Where (SQL)
Uma cláusula WHERE
no SQL especifica que uma instrução da linguagem de manipulação de dados (Data Manipulation Language - DML) SQL deve afetar apenas as linhas que atendem aos critérios especificados. Os critérios são expressos na forma de predicados. Cláusulas WHERE
não são cláusulas obrigatórias de instruções DML SQL, mas podem ser usadas para limitar o número de linhas afetadas por uma instrução ou retornadas por uma consulta. Em resumo, a cláusula SQL WHERE
é usada para extrair apenas aqueles resultados de uma instrução SQL, como: SELECT
, INSERT
, UPDATE
ou DELETE
.[1]
Visão geral
[editar | editar código-fonte]WHERE
é uma palavra reservada do SQL.
A cláusula WHERE
é usada em conjunto com as instruções DML SQL e assume o seguinte formato geral:
Instrução-DML-SQL
FROM nome_da_tabela
WHERE predicado
Todas as linhas para as quais o predicado na cláusula WHERE
for verdadeiro (True) são afetadas (ou retornadas) pela instrução ou consulta DML SQL. As linhas para as quais o predicado é avaliado como falso (False) ou desconhecido (NULL) não são afetadas pela instrução ou consulta DML.
A consulta a seguir retorna apenas as linhas da tabela minha_tabela, nas quais o valor na coluna minhacol é maior que 100:
SELECT *
FROM minha_tabela
WHERE minhacol > 100
A seguinte instrução DELETE
remove apenas as linhas da tabela minha_tabela em que a coluna minhacol é NULL ou possui um valor igual a 100.
DELETE
FROM minha_tabela
WHERE minhacol IS NULL OR minhacol = 100
Predicados
[editar | editar código-fonte]Predicados simples usam um dos seguintes operadores: =
, <>
, >
, >=
, <
, <=
, IN
, BETWEEN
, LIKE
, IS NULL
ou IS NOT NULL
.
Os predicados podem ser colocados entre parênteses, se desejado. As palavras-chave AND
e OR
podem ser usadas para combinar dois predicados em um novo. Se várias combinações forem aplicadas, parênteses podem ser usados para agrupar combinações para indicar a ordem de avaliação. Sem parênteses, o operador AND
tem uma ligação mais forte que OR
.
O exemplo a seguir exclui linhas de minha_tabela, em que o valor de minhacol é maior que 100 e o valor de item é igual ao literal da string 'Martelo':
DELETE
FROM minha_tabela
WHERE minhacol > 100 AND item = 'Martelo'
IN
[editar | editar código-fonte]IN
encontrará todos os valores existentes em um conjunto de candidatos.
SELECT nomec WHERE nomec IN ('Belém', 'Santarém')
Todas as linhas correspondem ao predicado se seu valor for um dos conjuntos de valores candidatos. Este é o mesmo comportamento que
SELECT nomec WHERE nomec='valor1' OR nomec='valor2'
exceto que o último poderia permitir a comparação de várias colunas, o que cada cláusula IN
não permite. Para um número maior de candidatos, o IN
é menos verboso.
BETWEEN
[editar | editar código-fonte]BETWEEN
encontrará todos os valores dentro de um intervalo.
SELECT nomec WHERE nomec BETWEEN 'valor1' AND 'valor2'
SELECT salario FROM emp WHERE salario BETWEEN 5000 AND 10000
Todas as linhas correspondem ao predicado se seu valor estiver entre 'valor1' e 'valor2', inclusive.
LIKE
[editar | editar código-fonte]LIKE
encontrará uma string que se ajusta a uma certa descrição.
- Terminando com curinga
- Encontra qualquer string que começa com a letra 'S'
SELECT nomec FROM emp WHERE nomec LIKE 'S%';
- Encontra qualquer string que começa com a letra 'S'
- Começando com curinga
- Encontra qualquer string que termina com a letra 'S'
SELECT nomec FROM emp WHERE nomec LIKE '%S';
- Encontra qualquer string que termina com a letra 'S'
- Vários curingas
- Encontra qualquer string que contenha, em qualquer lugar, a letra 'S'
SELECT nomec FROM emp WHERE nomec LIKE '%S%';
- Encontra qualquer string que contenha, em qualquer lugar, a letra 'S'
- Curinga com caractere único
- Encontra qualquer string que contenha a letra 'A', seguida por qualquer caractere único, seguido pela letra 'E'
SELECT nomec FROM emp WHERE nomec LIKE '%A_E%';
- Encontra qualquer string que contenha a letra 'A', seguida por qualquer caractere único, seguido pela letra 'E'
- Classes de caracteres[2]
- Encontra qualquer string que começa com uma letra, número ou o símbolo '_'
SELECT nomec FROM emp WHERE nomec LIKE '[a-zA-Z0-9_]%';
- Encontra qualquer string que começa com uma letra, número ou o símbolo '_'
Os programadores SQL precisam estar cientes de que o predicado LIKE
normalmente realiza uma pesquisa sem o benefício de desempenho normal dos índices. Usar '=', '<>', etc., em vez dele, aumentará o desempenho. Os usuários do predicado LIKE
devem estar cientes de que a diferenciação de maiúsculas e minúsculas (por exemplo, 'S' versus 's') pode ser diferente com base no produto ou na configuração do banco de dados.
Referências
- ↑ «SQL WHERE Clause – Things beginners must know»
- ↑ Microsoft TechnetAcessado em 21 de novembro de 2013.
Ligações externas
[editar | editar código-fonte]- PSOUG Home Puget Sound Oracle Users Group fornece vários exemplos de instruções SELECT com cláusulas WHERE.