SQLite - Cláusula WHERE

SQLite WHERE cláusula é usada para especificar uma condição ao buscar os dados de uma tabela ou várias tabelas.

Se a condição fornecida for satisfeita, significa verdadeiro, então ele retorna o valor específico da tabela. Você terá que usar a cláusula WHERE para filtrar os registros e buscar apenas os registros necessários.

A cláusula WHERE não é usada apenas na instrução SELECT, mas também é usada na instrução UPDATE, DELETE, etc., que será abordada nos capítulos subsequentes.

Sintaxe

A seguir está a sintaxe básica da instrução SQLite SELECT com a cláusula WHERE.

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

Exemplo

Você pode especificar uma condição usando Comparação ou Operadores lógicos como>, <, =, LIKE, NOT, etc. Considere a tabela COMPANY com os seguintes 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

A seguir está um exemplo simples que mostra o uso de operadores lógicos SQLite. A instrução SELECT a seguir lista todos os registros onde AGE é maior ou igual a 25AND salário é maior ou igual a 65.000,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

A instrução SELECT a seguir lista todos os registros onde AGE é maior ou igual a 25 OR salário é maior ou igual a 65.000,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

A instrução SELECT a seguir lista todos os registros onde AGE não é NULL, o que significa todos os registros porque nenhum dos registros tem 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

A instrução SELECT a seguir lista todos os registros onde NAME começa com 'Ki', não importa o que venha depois de 'Ki'.

sqlite> SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%';

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
6           Kim         22          South-Hall  45000.0

A instrução SELECT a seguir lista todos os registros onde NAME começa com 'Ki', não importa o que venha depois de 'Ki'.

sqlite> SELECT * FROM COMPANY WHERE NAME GLOB 'Ki*';

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
6           Kim         22          South-Hall  45000.0

A instrução SELECT a seguir lista todos os registros onde o valor de AGE é 25 ou 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

A instrução SELECT a seguir lista todos os registros em que o valor de AGE não é 25 nem 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

A instrução SELECT a seguir lista todos os registros onde o valor de AGE está entre 25 E 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

A instrução SELECT a seguir usa a subconsulta SQL, onde a subconsulta encontra todos os registros com o campo AGE tendo SALARY> 65000 e posterior, a cláusula WHERE está sendo usada junto com o operador EXISTS para listar todos os registros onde existe AGE da consulta externa no resultado retornado pela subconsulta -

sqlite> SELECT AGE FROM COMPANY 
   WHERE EXISTS (SELECT AGE FROM COMPANY WHERE SALARY > 65000);

AGE
----------
32
25
23
25
27
22
24

A instrução SELECT a seguir usa a subconsulta SQL onde a subconsulta encontra todos os registros com o campo AGE tendo SALARY> 65000 e posterior a cláusula WHERE está sendo usada junto com o operador> para listar todos os registros onde AGE da consulta externa é maior do que a idade no resultado retornado pela 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