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