SQLite Cláusula WHERE

de SQLiteWHERELa cláusula se utiliza para especificar las condiciones para obtener datos de una tabla o de varias tablas.

Si se cumple la condición dada, es decir, es verdadera (true), se devuelven valores específicos de la tabla. Puede usar la cláusula WHERE para filtrar registros y obtener solo los registros necesarios.

La cláusula WHERE no solo se puede usar en la sentencia SELECT, también se puede usar en las sentencias UPDATE, DELETE, etc. Aprenderemos sobre esto en los siguientes capítulos.

Sintaxis

La sintaxis básica de la sentencia SELECT de SQLite con la cláusula WHERE es la siguiente:

SELECT column1, column2, columnN 
FROM table_name
WHERE [condition]

Ejemplos

También puede usaroperadores de comparación o lógicospara especificar condiciones, como >, <, =, LIKE, NOT, etc. Supongamos que la tabla COMPANY tiene los siguientes registros:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

El siguiente ejemplo demuestra el uso de los operadores lógicos de SQLite. La siguiente sentencia SELECT enumera todos los registros con AGE mayor o igual que 25ademásy salario mayor o igual que 65000.00:

sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000;
ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

La siguiente sentencia SELECT enumera todos los registros con AGE mayor o igual que 25oy salario mayor o igual que 65000.00:

sqlite> SELECT * FROM COMPANY WHERE AGE >= 25 OR SALARY >= 65000;
ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

La siguiente sentencia SELECT enumera todos los registros donde AGE no es NULL. El resultado muestra todos los registros, lo que significa que ningún registro tiene AGE igual a NULL:

sqlite>  SELECT * FROM COMPANY WHERE AGE IS NOT NULL;
ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

La siguiente sentencia SELECT enumera todos los registros donde NAME comienza con 'Ki', sin restricción sobre los caracteres después de 'Ki':

sqlite> SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%';
ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
6           Kim         22          South-Hall  45000.0

La siguiente sentencia SELECT enumera todos los registros donde NAME comienza con 'Ki', sin restricción sobre los caracteres después de 'Ki':

sqlite> SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*';
ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
6           Kim         22          South-Hall  45000.0

La siguiente sentencia SELECT enumera todos los registros donde el valor de AGE es 25 o 27:

sqlite> SELECT * FROM COMPANY WHERE AGE IN ( 25, 27 );
ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

La siguiente sentencia SELECT enumera todos los registros donde el valor de AGE no es ni 25 ni 27:

sqlite> SELECT * FROM COMPANY WHERE AGE NOT IN ( 25, 27 );
ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

La siguiente sentencia SELECT enumera todos los registros donde el valor de AGE está entre 25 y 27:

sqlite> SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27;
ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
2           Allen       25          Texas       15000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0

La siguiente sentencia SELECT utiliza una subconsulta SQL. La subconsulta encuentra todos los registros con el campo AGE donde SALARY > 65000. La cláusula WHERE posterior se usa junto con el operador EXISTS para enumerar todos los registros de la consulta externa donde AGE existe en los resultados devueltos por la subconsulta:

sqlite> SELECT AGE FROM COMPANY 
        WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
AGE
----------
32
25
23
25
27
22
24

La siguiente sentencia SELECT utiliza una subconsulta SQL. La subconsulta encuentra todos los registros con el campo AGE donde SALARY > 65000. La cláusula WHERE posterior se usa junto con el operador > para enumerar todos los registros de la consulta externa donde AGE es mayor que la edad en los resultados devueltos por la subconsulta:

sqlite> SELECT * FROM COMPANY 
        WHERE AGE > (SELECT AGE FROM COMPANY WHERE SALARY > 65000);
ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
Otras extensiones