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]

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 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 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 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 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%';
      
  • Começando com curinga
    • Encontra qualquer string que termina com a letra 'S'
      SELECT nomec FROM emp WHERE nomec LIKE '%S';
      
  • Vários curingas
    • Encontra qualquer string que contenha, em qualquer lugar, a letra 'S'
      SELECT nomec FROM emp WHERE nomec LIKE '%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%';
      
  • 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_]%';
      

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

Ligações externas

[editar | editar código-fonte]