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
Si vous devez vérifier si une valeur est NULL, utilisez :
IS NULLouisNullIS NOT NULLouisNotNull
NULL ne sera jamais vraie.
Filtrer les données avec des opérateurs logiques
Vous pouvez utiliser les fonctions logiques suivantes avec la clauseWHERE afin de combiner plusieurs conditions :
Utiliser des colonnes UInt8 comme condition
Dans ClickHouse, les colonnesUInt8 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
Les opérateurs de comparaison suivants peuvent être utilisés :Recherche par motif et expressions conditionnelles
Au-delà des opérateurs de comparaison, vous pouvez utiliser la recherche par motif et les expressions conditionnelles dans la clauseWHERE.
Voir « Recherche par motif et expressions conditionnelles » pour des exemples d’utilisation.
Expression avec des littéraux, des colonnes ou des sous-requêtes
L’expression qui suit la clauseWHERE 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.
Vous pouvez combiner des littéraux, des colonnes et des sous-requêtes dans des conditions complexes :
Exemples
Tester NULL
Requêtes avec des valeurs NULL :
Filtrer les données avec des opérateurs logiques
Considérons la table et les données suivantes :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
En reprenant la table de l’exemple précédent, vous pouvez utiliser directement un nom de colonne comme condition :Utilisation des opérateurs de comparaison
Les exemples ci-dessous utilisent la table et les données de l’exemple ci-dessus. Les résultats sont omis pour des raisons de concision. 1. Égalité explicite avec true (= 1 or = true) :
= 0 ou = false) :
!= 0 ou != false) :
IN :
Dans l’exemple ci-dessous, (1, true) est un Tuple.
Recherche par motif et expressions conditionnelles
Les exemples ci-dessous utilisent la table et les données de l’exemple ci-dessus. Les résultats sont omis par souci de brièveté.Exemples avec LIKE
Exemples d’ILIKE
Exemples de SIMILAR TO
Contrairement àLIKE, un motif SIMILAR TO accepte également les métacaractères d’expression régulière |, *, +, ?, {, }, (, ), [ et ] et, comme avec LIKE, il doit correspondre à l’intégralité de la valeur :
ESCAPE permet de définir un caractère d’échappement personnalisé. Elle fonctionne également avec LIKE, ILIKE, NOT LIKE, NOT ILIKE et NOT SIMILAR TO :
SIMILAR TO.