> Tech > Introduction aux sous-requêtes

Introduction aux sous-requêtes

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

Une sous-requête est une requête imbriquée dans une autre requête. Pour illustrer son mode de fonctionnement, j'utilise la table FavColors, qui comporte deux colonnes : Person et FavoriteColor. La figure 4 contient la table et l'instruction SQL qui la crée. Supposons que je recherche la liste des personnes dont la

Introduction aux sous-requêtes

couleur favorite est également appréciée par d’autres personnes du groupe.
Par  » appréciée « , nous entendons une couleur que plus de deux personnes dans
la table choisissent comme leur couleur favorite. Je peux utiliser une sous-requête
et la requête la contenant, pour trouver d’abord la couleur favorite de chaque
personne puis renvoyer les lignes avec les couleurs choisies par plus de deux
personnes. La requête



Select *

From FavColors OuterRow

Where 3 <=

( Select Count( * )

From FavColors InnerRow

Where OuterRow.FavoriteColor

= InnerRow.FavoriteColor )



Un nom de corrélation est un nom unique qui qualifie un
nom de colonne



(avec sa sous-requête imbriquée) produit la table de résultat illustrée en figure
5, nommant trois personnes ayant choisi le jaune (yellow) et trois ayant choisi
le marron (brown) comme couleur favorite, rendant ces couleurs « appréciées »
d’après notre définition. Analysons maintenant la requête et sa sous-requête.

La clause Select * de la requête précise que toutes les colonnes définies dans
la table de base doivent apparaître dans la table de résultats. La clause From
de la requête contient le nom de la table (FavColors) suivi par le nom de corrélation
OuterRow. Un nom de corrélation est un nom unique qui qualifie un nom de colonne
(nous y reviendrons dans quelques instants). Dans ce cas, le nom de colonne
qualifié est FavoriteColor. La clause Where de la requête renvoie toutes les
lignes dans lesquelles 3 est inférieur ou égal au résultat de la sous-requête.
Comme 3 est une valeur unique, la sous-requête doit aussi renvoyer une valeur
unique.

La sous-requête, placée entre parenthèses d’après les règles de la syntaxe SQL,
utilise la fonction Count pour trouver la valeur unique qui exprime le nombre
de lignes contenant la même couleur favorite. La fonction Count est une fonction
de colonne SQL opérant sur des colonnes au travers de plusieurs lignes et renvoie
le nombre de lignes satisfaisant à  la condition posée dans une requête. Les
fonctions de colonne SQL, y compris la fonction Count, renvoient toujours une
valeur unique. Ainsi, la requête



Select Count( * )

From FavColors

Where FavoriteColor = ‘Green’



renvoie le nombre 2 parce qu’il y a deux lignes dans la table FavColors ayant
la valeur Green pour la colonne FavoriteColor.

L’utilisation de Count dans notre sous-requête est légèrement plus compliquée
que cet exemple simple. Notons que la clause From de la sous-requête utilise
la table FavColors et le nom de corrélation InnerRow. Quand la sous-requête
s’exécute, les requêtes externes et internes ont une ligne prise en considération
en même temps. La clause Where de la sous-requête (c’est-à -dire la requête interne)
utilise les noms de corrélation pour qualifier la ligne comme externe ou interne
lorsqu’elle fait référence au nom de colonne FavoriteColor. Pour chaque ligne
de la table (le OuterRow de la requête externe), la fonction Count compare la
valeur FavoriteColor de cette ligne (OuterRow.FavoriteColor) à  la valeur FavoriteColor
de chaque ligne dans la table (InnerRow.FavoriteColor). Elle compte le nombre
de correspondances et renvoie le comptage à  la requête externe. La clause Where
de la requête externe indique que si le nombre renvoyé par la sous-requête est
supérieur à  2, la ligne en cours d’évaluation dans la requête externe est sélectionnée.
Autrement dit, la requête renvoie toutes les lignes contenant une couleur que
plus de deux personnes ont choisie comme leur favorite.

C’est tout pour l’instant. Dans un prochain article, nous verrons d’autres utilisations
des sous-requêtes.

Téléchargez gratuitement cette ressource

Guide PME : 5 leviers pour accélérer votre développement

Guide PME : 5 leviers pour accélérer votre développement

Grandir, se développer et piloter la croissance sont des enjeux majeurs pour les PME qui doivent sécuriser le quotidien pour s’engager vers demain. Découvrez, dans ce Guide infographique, les différents leviers qui vous permettront de consolider durablement votre développement.

Tech - Par iTPro - Publié le 24 juin 2010