Menu |
Index/help |
|
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.
Exemple : Quels sont les employés ayant la même fonction que codd?
Remarques
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.
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?
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.
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.
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.