> Tech > Prédicat Between et sous-requêtes SQL

Prédicat Between et sous-requêtes SQL

Tech - Par iTPro.fr - Publié le 24 juin 2010
email

par Mike Cravitz Ce mois-ci, nous allons voir l'utilisation du prédicat Between dans la clause Where d'une requête SQL, dans le but de trouver une valeur située entre deux bornes Je vous présente aussi un puissant mécanisme, appelé sous-requête. Et, pour faire bonne mesure, je montre comment utiliser la fonction SQL Count pour renvoyer le nombre de lignes d'une table de résultat de requête. En route !

Le prédicat Between sert à  référencer un ensemble de lignes dans
lesquelles une valeur de colonne ou autre expression se situe dans une certaine
fourchette. Pour en comprendre le fonctionnement, prenons l’exemple de la table
YouOweMe. La figure 1 illustre le SQL servant à  créer la table et la table elle-même.
La requête



Select *

From YouOweMe

Where AmtDue Between 50 and 110



renvoie le résultat illustré figure 2.

Notons que, comme Between est inclusif, SQL vérifie les deux bornes (inférieure
et supérieure) indiquées, pour déterminer si le prédicat de la fourchette est
satisfait. C’est pourquoi la table de résultat inclut Surly Sue, qui a une dette
correspond à  la borne inférieure (50) et BadDebt Bob, parce que sa dette correspond
à  la borne supérieure de la fourchette donnée (110).

Supposons maintenant que nous voulions produire une requête pour connaître tous
les débiteurs dont le nom commence par B, C ou D (autrement dit, B et D inclus).
A première vue, la requête suivante pourrait faire l’affaire :



Select *

From YouOweMe

Where DebtorName Between ‘B’ and ‘D’



Mais la figure 3 montre que l’on récupère des lignes dans lesquelles la première
lettre du nom est B ou C mais pas D (Deadbeat Charlie n’est pas renvoyé). Normal,
puisque nous avons défini la colonne DebtorName comme une zone caractère de
longueur 20 (figure 1). Les valeurs auxquelles nous comparons la zone caractère
ont toutes deux une longueur de un caractère. A l’instar de la plupart des langages
évolués, SQL étend la longueur d’une ou de plusieurs valeurs de comparaison
plus courtes pour s’aligner sur la plus longue, et remplit à  droite avec des
blancs les valeurs étendues avant de comparer. Dans le cas présente, SQL ajoute
aux valeurs les plus courtes (B et D) 19 blancs supplémentaires pour égaler
la longueur de DebtorName avant de faire la comparaison. SQL renvoie donc un
ensemble de lignes dans lesquelles DebtorName se situe entre B suivi de 19 blancs
et D suivi de 19 blancs. Comme DebtorName DeadBeat Charlie est supérieur à  D
suivi de 19 blancs, il est exclu du résultat de la requête.

Pour inclure des noms commençant par la lettre D, nous pouvons indiquer le prédicat



DebtorName Between ‘B’ and ‘E’





La meilleure méthode consiste à  effectuer la comparaison
sur le premier caractère du nom au lieu des 20 caractères



pour obtenir le résultat souhaité. Mais, s’il existe une ligne dans laquelle
DebtorName est égal à  la lettre E suivie de 19 blancs, le prédicat ci-dessus
la sélectionnera également.

Pour limiter le résultat de la requête à  tous les noms commençant par une lettre
entre B et D inclus, la meilleure méthode consiste à  effectuer la comparaison
sur le premier caractère du nom au lieu des 20 caractères, en utilisant le prédicat



Substr( DebtorName, 1, 1 )

Between ‘B’ and ‘D’



La fonction scalaire Substr (Substring) du prédicat ne choisit que le premier
caractère de DebtorName, et donc SQL n’a pas besoin d’allonger les valeurs B
et D. (Pour revoir la fonction Substr de SQL, voir l’article  » Manipuler des
dates en SQL « , NEWSMAGAZINE, janvier 2000.)

Téléchargez cette ressource

Guide inmac wstore pour l’équipement IT de l’entreprise

Guide inmac wstore pour l’équipement IT de l’entreprise

Découvrez toutes nos actualités à travers des interviews, avis, conseils d'experts, témoignages clients, ainsi que les dernières tendances et solutions IT autour de nos 4 univers produits : Poste de travail, Affichage et Collaboration, Impression et Infrastructure.

Tech - Par iTPro.fr - Publié le 24 juin 2010