WHERE le permite filtrar los datos que provienen de la cláusula FROM de SELECT.
Si hay una cláusula WHERE, debe ir seguida de una expresión de tipo UInt8.
Las filas en las que esta expresión se evalúa como 0 se excluyen de transformaciones posteriores o del resultado.
La expresión que sigue a la cláusula WHERE suele usarse con operadores de comparación y operadores lógicos, o con una de las muchas funciones regulares.
Al evaluar la expresión WHERE, se tiene en cuenta si pueden utilizarse índices y la poda de particiones, siempre que el motor de tabla subyacente lo admita.
PREWHERETambién existe una optimización de filtrado llamada
PREWHERE.
Prewhere es una optimización que permite aplicar el filtrado de forma más eficiente.
Está habilitada de forma predeterminada incluso si la cláusula PREWHERE no se especifica explícitamente.Comprobación de NULL
NULL, use:
De lo contrario, una expresión con NULL nunca se cumplirá.
Filtrar datos con operadores lógicos
WHERE para combinar varias condiciones:
Uso de columnas UInt8 como condición
UInt8 pueden usarse directamente como condiciones booleanas, donde 0 es false y cualquier valor distinto de cero (normalmente 1) es true.
Un ejemplo de esto se muestra en la sección siguiente.
Uso de los operadores de comparación
| Operador | Función | Descripción | Ejemplo |
|---|---|---|---|
a = b | equals(a, b) | Igual a | price = 100 |
a == b | equals(a, b) | Igual a (sintaxis alternativa) | price == 100 |
a != b | notEquals(a, b) | Distinto de | category != 'Electronics' |
a <> b | notEquals(a, b) | Distinto de (sintaxis alternativa) | category <> 'Electronics' |
a < b | less(a, b) | Menor que | price < 200 |
a <= b | lessOrEquals(a, b) | Menor que o igual a | price <= 200 |
a > b | greater(a, b) | Mayor que | price > 500 |
a >= b | greaterOrEquals(a, b) | Mayor que o igual a | price >= 500 |
a LIKE s | like(a, b) | Coincidencia de patrones (distingue entre mayúsculas y minúsculas) | name LIKE '%top%' |
a NOT LIKE s | notLike(a, b) | No coincide con el patrón (distingue entre mayúsculas y minúsculas) | name NOT LIKE '%top%' |
a ILIKE s | ilike(a, b) | Coincidencia de patrones (sin distinción entre mayúsculas y minúsculas) | name ILIKE '%LAPTOP%' |
a BETWEEN b AND c | a >= b AND a <= c | Comprobación de rango (inclusivo) | price BETWEEN 100 AND 500 |
a NOT BETWEEN b AND c | a < b OR a > c | Comprobación fuera del rango | price NOT BETWEEN 100 AND 500 |
Coincidencia de patrones y expresiones condicionales
WHERE.
| Funcionalidad | Sintaxis | Sensible a mayúsculas/minúsculas | Rendimiento | Más adecuado para |
|---|---|---|---|---|
LIKE | col LIKE '%pattern%' | Sí | Rápido | Coincidencia de patrones con mayúsculas/minúsculas exactas |
ILIKE | col ILIKE '%pattern%' | No | Más lento | Búsquedas sin distinguir mayúsculas y minúsculas |
if() | if(cond, a, b) | N/D | Rápido | Condiciones binarias simples |
multiIf() | multiIf(c1, r1, c2, r2, def) | N/D | Rápido | Múltiples condiciones |
CASE | CASE WHEN ... THEN ... END | N/D | Rápido | Lógica condicional estándar de SQL |
Expresión con literales, columnas o subconsultas
WHERE también puede incluir literales, columnas o subconsultas, que son sentencias SELECT anidadas que devuelven valores usados en las condiciones.
| Tipo | Definición | Evaluación | Rendimiento | Ejemplo |
|---|---|---|---|---|
| Literal | Valor constante fijo | Al escribir la consulta | El más rápido | WHERE price > 100 |
| Columna | Referencia a datos de la tabla | Por fila | Rápido | WHERE price > cost |
| Subquery | SELECT anidado | Al ejecutar la consulta | Variable | WHERE id IN (SELECT ...) |
Ejemplos
Comprobación de NULL
NULL:
Filtrado de datos con operadores lógicos
AND - se deben cumplir ambas condiciones:
OR - al menos una condición debe cumplirse:
NOT - Niega una condición:
XOR - Exactamente una condición debe cumplirse (no ambas):
AND, OR, NOT, XOR) suele ser más legible, pero la sintaxis funcional puede resultar útil en expresiones complejas o al crear consultas dinámicas.
Uso de columnas UInt8 como condición
Uso de operadores de comparación
= 1 o = true):
false (= 0 o = false):
!= 0 o != false):
IN:
En el siguiente ejemplo, (1, true) es una tupla.