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