Operadores lógicos são ferramentas que ajudam a juntar condições nas queries pra filtrar dados de um jeito mais avançado. Provavelmente você já viu eles em linguagens de programação. Se comparar queries com um programa de filtro de spam na caixa de entrada, os operadores lógicos são tipo as regras que mandam os emails pra pasta "Spam" ou deixam eles na "Caixa de Entrada".
SQL é uma ferramenta que a galera usa muito pra buscar ou analisar dados. Os operadores lógicos (AND, OR, NOT) deixam você combinar várias condições numa query só, pra responder perguntas mais difíceis, tipo:
- Quais estudantes têm mais de 18 anos e tiraram nota "A"?
- Quais produtos são da categoria "Eletrônicos" ou "Eletrodomésticos"?
- Quais clientes não fizeram compras?
Bora ver os três operadores lógicos principais no SQL:
AND: as duas condições têm que ser verdadeiras.OR: pelo menos uma das condições tem que ser verdadeira.NOT: inverte (nega) a condição.
Operador AND: as duas condições são verdadeiras
O operador AND serve pra dizer que as duas partes da condição precisam ser verdadeiras pra linha aparecer no resultado.
Sintaxe
SELECT coluna1, coluna2
FROM tabela
WHERE condição AND condição2;
Exemplo 1: Filtrando estudantes com mais de 18 anos e nota "A"
Imagina que a gente tem uma tabela students:
| id | name | age | grade |
|---|---|---|---|
| 1 | Alex | 20 | A |
| 2 | Maria | 19 | B |
| 3 | Otto | 17 | A |
| 4 | Anna | 22 | A |
Query:
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A';
Resultado:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Anna | 22 | A |
Exemplo 2: Filtrando funcionários do departamento "HR" e salário acima de 50000
SELECT name, department, salary
FROM employees
WHERE department = 'HR' AND salary > 50000;
Operador OR: pelo menos uma condição é verdadeira
O operador OR é pra quando você quer pegar linhas que batem com pelo menos uma das condições.
Sintaxe
SELECT coluna1, coluna2
FROM tabela
WHERE condição OR condição2;
Exemplo 1: Filtrando estudantes com nota "A" ou "B"
SELECT name, age, grade
FROM students
WHERE grade = 'A' OR grade = 'B';
Resultado:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Maria | 19 | B |
| Otto | 17 | A |
| Anna | 22 | A |
Exemplo 2: Produtos da categoria "Eletrônicos" ou com preço menor que 100
Tabela products:
| product_id | name | category | price |
|---|---|---|---|
| 1 | Televisor | Eletrônicos | 300 |
| 2 | Ferro de passar | Eletrodomésticos | 50 |
| 3 | Smartphone | Eletrônicos | 700 |
| 4 | Chaleira | Eletrodomésticos | 80 |
SELECT name, category, price
FROM products
WHERE category = 'Eletrônicos' OR price < 100;
Resultado:
| name | category | price |
|---|---|---|
| Televisor | Eletrônicos | 300 |
| Ferro de passar | Eletrodomésticos | 50 |
| Chaleira | Eletrodomésticos | 80 |
| Smartphone | Eletrônicos | 700 |
Operador NOT: invertendo a condição
Se AND e OR servem pra dizer o que tem que ser verdadeiro, o NOT faz o contrário: ele pega as linhas onde a condição é falsa.
Sintaxe
SELECT coluna1, coluna2
FROM tabela
WHERE NOT condição;
Exemplo 1: Filtrando estudantes que não têm nota "A"
SELECT name, age, grade
FROM students
WHERE NOT grade = 'A';
Resultado:
| name | age | grade |
|---|---|---|
| Maria | 19 | B |
Exemplo 2: Pegando produtos que não são da categoria "Eletrônicos"
SELECT name, category, price
FROM products
WHERE NOT category = 'Eletrônicos';
Combinando operadores lógicos
Dá pra juntar operadores lógicos pra criar condições ainda mais complexas. Por exemplo, se você quiser pegar estudantes com mais de 18 anos e nota "A" ou "B", dá pra combinar AND e OR.
Sintaxe combinada
SELECT coluna1, coluna2
FROM tabela
WHERE (condição1 AND condição2) OR condição3;
Exemplo: Estudantes com mais de 18 anos e nota "A" ou estudantes com nota "B"
SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR grade = 'B';
Resultado:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Anna | 22 | A |
| Maria | 19 | B |
Prioridade de execução dos operadores
É importante lembrar que o SQL executa os operadores lógicos nessa ordem:
NOTANDOR
Você pode usar parênteses pra mudar a ordem de execução. Sem parênteses, o resultado pode ser bem diferente do que você espera!
Exemplo: Comparando com e sem parênteses
O que acontece nessa query?
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A' OR grade = 'B';
Essa query pega estudantes:
- Que têm mais de 18 anos e nota "A".
- Que têm nota "B".
A prioridade dos operadores faz dar o mesmo resultado que com parênteses:
SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR (grade = 'B');
Mas se a gente colocar parênteses assim:
SELECT name, age, grade
FROM students
WHERE age > 18 AND (grade = 'A' OR grade = 'B');
Agora só vão aparecer estudantes com mais de 18 anos e nota "A" ou "B". Os parênteses mudam tudo mesmo!
Erros comuns usando operadores lógicos
- Esquecer os parênteses. Isso pode dar resultados inesperados, principalmente quando mistura
ANDeOR. - Usar
NOTsem entender direito quais linhas vão ser excluídas. - Usar o operador lógico errado. Tipo, colocar
ANDno lugar deORou o contrário. - Condições muito complicadas. Se a condição fica gigante com vários
AND,OR,NOTe sem comentários, fica difícil de ler.
Esses operadores são a base de qualquer query mais avançada. Agora você já pode escrever queries que não só funcionam, mas acham exatamente o que você quer!
GO TO FULL VERSION