Teradata - Sous-questions
Une sous-requête renvoie les enregistrements d'une table en fonction des valeurs d'une autre table. Il s'agit d'une requête SELECT dans une autre requête. La requête SELECT appelée comme requête interne est exécutée en premier et le résultat est utilisé par la requête externe. Certaines de ses principales caractéristiques sont -
Une requête peut avoir plusieurs sous-requêtes et les sous-requêtes peuvent contenir une autre sous-requête.
Les sous-requêtes ne renvoient pas les enregistrements en double.
Si la sous-requête ne renvoie qu'une seule valeur, vous pouvez utiliser l'opérateur = pour l'utiliser avec la requête externe. S'il renvoie plusieurs valeurs, vous pouvez utiliser IN ou NOT IN.
Syntaxe
Voici la syntaxe générique des sous-requêtes.
SELECT col1, col2, col3,…
FROM
Outer Table
WHERE col1 OPERATOR ( Inner SELECT Query);
Exemple
Considérez le tableau des salaires suivant.
Numéro d'employé | Brut | Déduction | Salaire net |
---|---|---|---|
101 | 40 000 | 4 000 | 36 000 |
102 | 80 000 | 6 000 | 74 000 |
103 | 90 000 | 7 000 | 83 000 |
104 | 75 000 | 5 000 | 70 000 |
La requête suivante identifie le numéro d'employé avec le salaire le plus élevé. Le SELECT interne exécute la fonction d'agrégation pour renvoyer la valeur NetPay maximale et la requête SELECT externe utilise cette valeur pour renvoyer l'enregistrement d'employé avec cette valeur.
SELECT EmployeeNo, NetPay
FROM Salary
WHERE NetPay =
(SELECT MAX(NetPay)
FROM Salary);
Lorsque cette requête est exécutée, elle produit la sortie suivante.
*** Query completed. One row found. 2 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo NetPay
----------- -----------
103 83000