Opérateurs de sous-requête¶
Une sous-requête est une requête dans une autre requête. Les opérateurs de sous-requête effectuent des opérations sur les valeurs générées par les sous-requêtes.
Snowflake prend en charge les opérateurs de sous-requête suivants :
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 pour chaque valeur retournée par la sous-requête :
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é.
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é.
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 dans les valeurs généré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) pour trouver les départements qui n’ont pas d’employés :
SELECT department_id
FROM departments d
WHERE d.department_id NOT IN (
SELECT e.department_id
FROM employees e);