Where com operadores lógicos
Os operadores lógicos que a linguagem SQL aceita são o AND, OR e o NOT. De forma bem simplificada, seu funcionamento se resume a:
- AND - deve ser usado sempre que duas condições precisarem ser atendidas
- OR – deve ser usado quando apenas uma condição precisar ser atendida
- NOT – será usado quando você quiser negar uma condição.
Através dos operadores lógicos nós podemos tornar nossas buscas com o parâmetro WHERE ainda mais precisas. No tópico anterior fizemos algumas buscas usando o campo "idade" da tabela "cliente" como referência. Em uma das buscas o SGBD retornou pessoas com idade SUPERIOR a 30 anos e em outra com idade IGUAL OU SUPERIOR a 30 anos. Bom, mas e se quiséssemos pessoas com idade entre 29 e 34 anos, incluindo esses dois valores? Essa consulta só seria possível com o uso de um operador lógico, da seguinte forma:
SELECT nome AS Nome, idade AS Idade FROM cliente WHERE idade >= 29 AND idade <= 34;
Vejam o retorno do SGBD:
Percebam que dessa forma conseguimos especificar um intervalo de idade. Poderia haver uma situação onde você quisesse retornar todos os clientes que possuem idade menor do que 20 anos OU maior do que 30. Nesse caso o operador lógico que nos atenderia seria o OR, da seguinte maneira:
SELECT nome AS Nome, idade AS Idade FROM cliente WHERE idade < 20 OR idade > 30;
Vejam o retorno dessa consulta:
Vejam que agora nós excluímos os resultados de clientes com idades entre 20 e 30 anos.
No tópico anterior fizemos uma busca utilizando o caractere coringa %, que nos retornou todos os clientes cujos nomes iniciavam com a letra R. E se quiséssemos o contrário, ou seja, todos os clientes cujos nomes NÃO iniciem com a letra R? Bem, para solucionar isso podemos fazer uso do operador lógico NOT, dessa maneira:
SELECT nome as Nome, idade AS idade FROM cliente WHERE nome NOT like 'R%';
Vejam que nosso retorno contém todos os nomes que NÃO são iniciados pela letra R. Poderíamos combinar essa consulta com uma condição especificando que só nos interessa os clientes com idades menores do que 25 anos, com o comando abaixo:
SELECT nome as Nome, idade AS idade FROM cliente WHERE nome NOT like 'R%' AND idade < 25;
Agora o resultado eliminou as idades superiores ou iguais a 25 anos. Como você pôde perceber, é possível combinar os operadores AND, OR e NOT conforme sua necessidade.
No tópico seguinte falarei sobre outros operadores interessantes.