Uma tabela pode conter milhões de registros. Contudo, mover um volume tão grande de dados para a memória pode ser inviável. Além disso, na maioria dos casos precisamos modificar ou acessar poucos registros. A linguagem SQL nos permite parametrizar consultas para filtrar seu retorno.
Cláusulas WHERE no SQL
Neste documento falaremos sobre como isso é possível através da cláusula WHERE.
Tópicos
Sintaxe
Usamos WHERE para filtrar dados em um comando SQL. Essa cláusula deve ser seguida por uma expressão lógica.
Vemos a seguir um exemplo da sintaxe dessa cláusula.
WHERE [condição(ões)]
Tabela de exemplo
Para acompanhar os exemplos apresentados nessa documentação considere a seguinte tabela:
Expressões lógicas
Chamamos de expressão lógica o conjunto de uma ou mais condições a serem verificadas pela cláusula WHERE. Essas expressões são construídas utilizando operadores, sobre os quais falaremos a partir desta seção.
Igualdade
Este operador realiza a operação de igualdade entre dois valores. Com ele verificamos se o valor à direita do sinal = é igual ao valor contido na coluna informada à esquerda.
No exemplo a seguir buscamos um produto pela sua descrição:
SELECT
descricao,
precocusto
FROM
produtos
WHERE
descricao = "Caderno Escolar"
Obteremos como retorno a primeira linha na tabela de produtos.
Diferença
Podemos ainda selecionar dados em uma tabela utilizando o operador <>, que aplica a operação de desigualdade entre dois valores.
No exemplo a seguir buscamos todos os produtos com categoria diferente de 2.
SELECT
descricao,
precocusto
FROM
produtos
WHERE
categoria <> 2
Ao final dessa consulta teremos apenas o último registro da tabela de produtos retornado, pois ele é o único que atende ao critério estabelecido.
Menor que
O operador < verifica se o valor informado à esquerda é menor que àquele a direita. Podemos usar esse operador em conjunto com =, formando um único operador <=, chamado menor ou igual, para verificar se o valor é menor ou igual ao esperado.
No exemplo a seguir buscamos todos os produtos com preço de venda menor ou igual a 10:
SELECT
descricao,
precocusto
FROM
produtos
WHERE
precovenda <= 10
Visto que a tabela produtos possui dois registros com preço de venda menor ou igual a 10, apenas “Caneta Azul” será retornado.
Maior que
O operador > verifica se o valor informado à esquerda é maior que àquele a direita. Podemos ainda combinar > e = resultando em >=, que verifica se o valor é maior ou igual.
No exemplo a seguir buscamos os produtos com preço de venda maior ou igual a 40:
SELECT
descricao,
precocusto
FROM
produtos
WHERE
precovenda >= 40
Uma vez que a tabela produtos possui um registro com preço de venda maior ou igual a 40, “Carregador Portátil”, apenas esse registro será retornado.
BETWEEN
Algumas vezes precisamos buscar registros de acordo com um intervalo de valores. Para isso contamos com o operador BETWEEN, que recebe um valor mínimo e um valor máximo e retorna os dados da coluna que atendem a esse critério.
No exemplo abaixo buscamos na tabela produtos os registros com preço de custo entre 1 e 5.
SELECT
descricao,
precocusto
FROM
produtos
WHERE
precovenda BETWEEN 1 AND 5
Para essa consulta será retornado apenas o produto “Caneta Azul”.
LIKE
O operador LIKE permite comparar o valor de uma coluna com uma sequências de caracteres. Com ele podemos verificar se o texto na coluna contém uma palavra ou parte dela ou até mesmo uma sentença completa.
A sintaxe desse operador pode ser vista abaixo:
LIKE [sequência de caracteres]
Esse operador permite o uso do sinal %, que substitui um ou mais caracteres no início, meio ou final do texto utilizado como parâmetro. Exemplificando esse comportamento a seguir, usamos parte de uma palavra, “%ade%”, para buscar na coluna descrição por um texto que contenha “ade”, seja em seu início, meio ou final.
SELECT
descricao,
precocusto
FROM
produtos
WHERE
descricao LIKE "%ade%"
Uma vez que apenas “Caderno” contém os caracteres “ade”, esse registro será retornado.
IN
Com o operador INpodemos criar uma lista de valores que serão comparados com o valor na coluna. Dessa forma a linha a qual o valor avaliado pertence será ignorada exceto se qualquer um dos valores na lista corresponder ao valor da coluna.
Esta lista de valores pode conter tanto números quanto sequências de caracteres:
IN (1, 2, 3)
IN (“caderno”, “caneta”)
A seguir temos um exemplo do uso deste operador, no qual buscamos os produtos de código 1 e 3:
SELECT
codigo,
descricao
FROM
produtos
WHERE
codigo IN (1, 3)
Teremos como resultado dessa consulta as linhas 1 e 3 da tabela produtos.
AND e OR
Há casos nos quais precisamos unir duas ou mais condições. Na linguagem SQL podemos realizar essa tarefa através de operadores lógicos como AND, que aplica a operação lógica E, e OR, que aplica a operação lógica OU.
A seguir listamos todos os produtos com preço de venda 40% maior que o preço de custo e que pertencem a categoria 2.
SELECT
codigo,
descricao,
precocusto,
precovenda
FROM
produtos
WHERE
precovenda >= (precocusto + (precocusto * 0.4)) AND categoria = 2
Ao final da consulta apenas a linha 2 da tabela será retornada.
Exemplo prático
No exemplo abaixo buscamos os produtos de categoria 2 ou que tenham preço de venda maior que 10 e que possuam preço de custo menor que 20.
SELECT
codigo,
descricao
FROM
produtos
WHERE
(categoria = 2 OR precovenda > 10) AND precocusto < 20
Como resultado obteremos as linhas 1 e 2, que atendem a todos os critérios estabelecidos.