Menu

Index/help

 


Les sous-interrogations

Une caractéristique puissante de SQL est la possibilité qu'un critère de recherche employé dans une clause WHERE (expression à droite d'un opérateur de comparaison) soit lui-même le résultat d'un SELECT ; c'est ce qu'on appelle une sous-interrogation.

Sous-interrogation ramenant une seule valeur

Exemple : Quels sont les employés ayant la même fonction que codd?

Remarques

Sous-interrogation ramenant plusieurs lignes

Une sous-interrogation peut ramener plusieurs lignes à condition que l'opérateur de comparaison admette à sa droite un ensemble de valeurs. Les opérateurs permettant de comparer une valeur à un ensemble de valeurs sont :

Exemple : Quels sont les employés gagnant plus que tous les employés du département 30.

Sous-interrogation ramenant plusieurs colonnes

Il est possible de comparer le résultat d'un SELECT ramenant plusieurs colonnes à une liste de colonnes. La liste de colonnes figurera entre parenthèses à gauche de l'opérateur de comparaison.

Exemple : Quels sont les employés ayant même fonction et même supérieur que CODD?

Sous-interrogation synchronisée avec l'interrogation principale

Dans les exemples précédents, la sous-interrogation était évaluée d'abord, puis le résultat pouvait être utilisé pour exécuter l'interrogation principale. SQL sait également traiter une sous-interrogation faisant référence à une colonne de la table de l'interrogation principale. Le traitement dans ce cas est plus complexe car il faut évaluer la sous-interrogation pour chaque ligne de l'interrogation principale.

Exemple : Quels sont les employés ne travaillant pas dans le même département que leur supérieur hiérarchique.

Il a fallu ici renommer la table emp de l'interrogation principale pour pouvoir la référencer dans la sous-interrogation.
n_sup IS NOT NULL est nécessaire car dans le cas de JOUBERT la colonne n_sup est NULL et la sous-requête ne ramène alors aucune valeur.

Sous-interrogation ramenant au moins une ligne

L'opérateur EXISTS permet de construire un prédicat vrai si la sous-interrogation qui suit ramène au moins une ligne.

Exemple : Quels sont les employés travaillant dans un département qui a procédé à des embauches depuis le début de l'année 94.

Remarque : On peut inverser le sens de l'opérateur EXISTS en le faisant précéder de NOT.

Sous-interrogations multiples

Un SELECT peut comporter plusieurs sous-interrogations, soit imbriquées, soit au même niveau dans différents prédicats combinés par des AND ou des OR.

Exemple : Liste des employés du département 10 ayant même fonction que quelqu'un du département de DUPONT.