Catégories :

Syntaxe de requête

WHERE

La clause WHERE filtre le résultat de la clause FROM.

Syntaxe

SELECT ...
FROM ...
WHERE <predicate>
[ ... ]
prédicat

Une expression booléenne. L’expression peut inclure des opérateurs logiques, tels que AND, OR et NOT.

Notes sur l’utilisation

Jointures dans la clause WHERE

  • Les jointures peuvent être exprimées dans la clause WHERE, en plus ou au lieu de les spécifier dans la clause FROM, en incluant des conditions de jointure dans la clause WHERE.

    Les deux requêtes équivalentes suivantes montrent comment exprimer une jointure dans les clauses FROM ou WHERE :

    SELECT c1, c2
    FROM t1 INNER JOIN t2
            ON c1 = c2
    ORDER BY 1,2;
    
    SELECT c1, c2
    FROM t1, t2
    WHERE c1 = c2
    ORDER BY 1,2;
    
  • Les prédicats de la clause WHERE se comportent comme s’ils étaient évalués après la clause FROM (bien que l’optimiseur puisse réorganiser les prédicats s’il n’y a pas d’incidence sur les résultats). Par exemple, si un prédicat de la clause WHERE fait référence aux colonnes d’une table participant à une jointure externe de la clause FROM, il agira sur les lignes renvoyées par la jointure (pouvant être complétées avec des NULLs).

  • Les jointures externes peuvent être spécifiées dans la clause WHERE à l’aide de la syntaxe (+). Pour spécifier une jointure externe à l’aide de (+), les colonnes de la table NULL enrichie de la jointure sont annotées avec le (+) dans la clause WHERE.

    Les deux requêtes équivalentes suivantes montrent comment une jointure externe peut être exprimée dans la clause FROM ou WHERE :

    SELECT c1, c2
    FROM t1 LEFT OUTER JOIN t2
            ON c1 = c2;
    
    SELECT c1, c2
    FROM t1, t2
    WHERE c1 = c2(+);
    

    Note

    Il existe de nombreuses restrictions quant à l’emplacement où l’annotation (+) peut apparaître. Les jointures externes de la clause FROM sont plus expressives. Snowflake suggère d’utiliser la notation (+) uniquement lors du transfert de code utilisant déjà cette notation. Le nouveau code devrait éviter cette notation.

    Les restrictions comprennent :

    • Vous ne pouvez pas utiliser la notation (+) pour créer FULL OUTER JOIN. Vous ne pouvez créer que LEFT OUTER JOIN et RIGHT OUTER JOIN.

Exemples

Les exemples suivants montrent quelques utilisations simples de la clause WHERE :

SELECT * FROM invoices
  WHERE invoice_date < '2018-01-01';

SELECT * FROM invoices
  WHERE invoice_date < '2018-01-01' AND paid = False;

Cet exemple utilise une sous-requête et affiche toutes les factures dont le montant de facturation est inférieur à la moyenne :

SELECT * FROM invoices
  WHERE amount < (SELECT AVG(amount) FROM invoices);