Opérateurs de sous-requête¶
Cette rubrique fournit des informations de référence sur les opérateurs de sous-requête pris en charge dans Snowflake. Une sous-requête est une requête dans une autre requête.
Dans ce chapitre :
ALL / ANY¶
Les mots clés ALL et ANY peuvent être utilisés pour appliquer un opérateur de comparaison aux valeurs produites par une sous-requête (qui peut retourner plus d’une ligne).
Syntaxe¶
<expr> comparisonOperator { ALL | ANY} ( <query> )
Où :
comparisonOperator ::= { = | != | > | >= | < | <= }
Notes sur l’utilisation¶
L’expression est comparée avec l’opérateur avec chaque valeur retournée par la sous-requête :
Si ANY est spécifié, alors le résultat est TRUE si une ligne de la sous-requête satisfait la condition, sinon FALSE est retourné.
Si ALL est spécifié, alors le résultat est TRUE si chaque ligne de la sous-requête satisfait la condition, sinon FALSE est retourné.
Les sous-requêtes ANY/ALL ne sont actuellement prises en charge que dans une clause WHERE.
Les sous-requêtes ANY/ALL ne peuvent pas apparaître comme arguments dans un opérateur OR.
La sous-requête ne doit contenir qu’un seul élément dans sa liste SELECT.
Exemples¶
Utilisez une sous-requête != ALL
pour trouver les départements qui n’ont pas d’employés :
SELECT department_id FROM departments d WHERE d.department_id != ALL (SELECT e.department_id FROM employees e);
[ NOT ] EXISTS¶
Une sous-requête EXISTS est une expression booléenne qui peut apparaître dans une clause WHERE ou HAVING, ou dans toute fonction qui fonctionne sur une expression booléenne :
Une expression EXISTS s’évalue sur TRUE si des lignes sont produites par la sous-requête.
Une expression NOT EXISTS s’évalue sur TRUE si aucune ligne n’est produite par la sous-requête.
Syntaxe¶
[ NOT ] EXISTS ( <query> )
Notes sur l’utilisation¶
Les sous-requêtes EXISTS corrélées ne sont actuellement prises en charge que dans une clause WHERE.
Les sous-requêtes EXISTS corrélées ne peuvent pas apparaître comme arguments dans un opérateur OR.
Les sous-requêtes EXISTS non corrélées sont prises en charge partout où une expression booléenne est autorisée.
Exemples¶
Utilisez une sous-requête corrélée NOT EXISTS pour trouver les départements qui n’ont pas d’employés :
SELECT department_id FROM departments d WHERE NOT EXISTS (SELECT 1 FROM employees e WHERE e.department_id = d.department_id);
[ NOT ] IN¶
Les opérateurs IN et NOT IN vérifient si une expression est incluse ou non dans les valeurs renvoyées par une sous-requête.
Syntaxe¶
<expr> [ NOT ] IN ( <query> )
Notes sur l’utilisation¶
IN est une abréviation pour
= ANY
, et est sujet aux mêmes restrictions que les sous-requêtes ANY.NOT IN est une abréviation pour
!= ALL
, et est sujet aux mêmes restrictions que les sous-requêtes ALL.[NOT] IN
peut également être utilisé comme opérateur dans des expressions qui n’impliquent pas de sous-requête. Pour plus de détails, voir [ NOT ] IN.
Exemples¶
Utilisez une sous-requête NOT IN équivalente à l’exemple de sous-requête != ALL
(plus haut dans cette rubrique) :
SELECT department_id FROM departments d WHERE d.department_id NOT IN (SELECT e.department_id FROM employees e);