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 !
Prédicat Between et sous-requêtes SQL
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
Sécuriser votre système d’impression
Longtemps sous-estimée, la sécurisation d’un système d’impression d’entreprise doit être pleinement prise en compte afin de limiter le risque de fuite d’informations sensibles. Voici les 3 principales précautions à prendre.