WHERE vous permet de filtrer les données issues de la clause FROM de SELECT.
S’il y a une clause WHERE, elle doit être suivie d’une expression de type UInt8.
Les lignes pour lesquelles cette expression renvoie 0 sont exclues des transformations ultérieures ou du résultat.
L’expression qui suit la clause WHERE est souvent utilisée avec des opérateurs de comparaison et des opérateurs logiques, ou avec l’une des nombreuses fonctions standard.
L’expression WHERE est évaluée afin de déterminer s’il est possible d’utiliser des index et l’élagage des partitions, si le moteur de table sous-jacent le prend en charge.
PREWHEREIl existe également une optimisation de filtrage appelée
PREWHERE.
Prewhere est une optimisation qui permet d’appliquer le filtrage plus efficacement.
Elle est activée par défaut, même si la clause PREWHERE n’est pas spécifiée explicitement.Tester NULL
NULL, utilisez :
IS NULLouisNullIS NOT NULLouisNotNull
NULL ne sera jamais vraie.
Filtrer les données avec des opérateurs logiques
WHERE afin de combiner plusieurs conditions :
Utiliser des colonnes UInt8 comme condition
UInt8 peuvent être utilisées directement comme conditions booléennes : 0 correspond à false et toute valeur non nulle (généralement 1) à true.
Un exemple est donné dans la section ci-dessous.
Utilisation des opérateurs de comparaison
| Opérateur | Fonction | Description | Exemple |
|---|---|---|---|
a = b | equals(a, b) | Égal à | price = 100 |
a == b | equals(a, b) | Égal à (syntaxe alternative) | price == 100 |
a != b | notEquals(a, b) | Différent de | category != 'Electronics' |
a <> b | notEquals(a, b) | Différent de (syntaxe alternative) | category <> 'Electronics' |
a < b | less(a, b) | Inférieur à | price < 200 |
a <= b | lessOrEquals(a, b) | Inférieur ou égal à | price <= 200 |
a > b | greater(a, b) | Supérieur à | price > 500 |
a >= b | greaterOrEquals(a, b) | Supérieur ou égal à | price >= 500 |
a LIKE s | like(a, b) | Correspondance de motif (sensible à la casse) | name LIKE '%top%' |
a NOT LIKE s | notLike(a, b) | Absence de correspondance de motif (sensible à la casse) | name NOT LIKE '%top%' |
a ILIKE s | ilike(a, b) | Correspondance de motif (insensible à la casse) | name ILIKE '%LAPTOP%' |
a BETWEEN b AND c | a >= b AND a <= c | Vérification d’intervalle (bornes incluses) | price BETWEEN 100 AND 500 |
a NOT BETWEEN b AND c | a < b OR a > c | Vérification hors intervalle | price NOT BETWEEN 100 AND 500 |
Recherche par motif et expressions conditionnelles
WHERE.
| Fonctionnalité | Syntaxe | Sensible à la casse | Performances | Idéal pour |
|---|---|---|---|---|
LIKE | col LIKE '%pattern%' | Oui | Rapide | Recherche de motifs exacte, sensible à la casse |
ILIKE | col ILIKE '%pattern%' | Non | Plus lent | Recherche insensible à la casse |
if() | if(cond, a, b) | N/A | Rapide | Conditions binaires simples |
multiIf() | multiIf(c1, r1, c2, r2, def) | N/A | Rapide | Conditions multiples |
CASE | CASE WHEN ... THEN ... END | N/A | Rapide | Logique conditionnelle SQL standard |
Expression avec des littéraux, des colonnes ou des sous-requêtes
WHERE peut également inclure des littéraux, des colonnes ou des sous-requêtes, c’est-à-dire des instructions SELECT imbriquées qui renvoient des valeurs utilisées dans des conditions.
| Type | Définition | Évaluation | Performance | Exemple |
|---|---|---|---|---|
| Littéral | Valeur constante fixe | À l’écriture de la requête | La plus rapide | WHERE price > 100 |
| Colonne | Référence aux données de la table | Pour chaque ligne | Rapide | WHERE price > cost |
| Sous-requête | SELECT imbriqué | À l’exécution de la requête | Variable | WHERE id IN (SELECT ...) |
Exemples
Tester NULL
NULL :
Filtrer les données avec des opérateurs logiques
AND - les deux conditions doivent être vraies :
OR - au moins une condition doit être vraie :
NOT - Négation d’une condition :
XOR - Une et une seule condition doit être vraie (pas les deux) :
AND, OR, NOT, XOR) est généralement plus lisible, mais la syntaxe des fonctions peut être utile dans des expressions complexes ou pour construire des requêtes dynamiques.
Utiliser des colonnes UInt8 comme condition
Utilisation des opérateurs de comparaison
= 1 or = true) :
= 0 ou = false) :
!= 0 ou != false) :
IN :
Dans l’exemple ci-dessous, (1, true) est un Tuple.