CodeGym /Cursos /SQL SELF /Operadores lógicos (AND, OR, NOT): combinando condições

Operadores lógicos (AND, OR, NOT): combinando condições

SQL SELF
Nível 2 , Lição 2
Disponível

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:

  1. AND: as duas condições têm que ser verdadeiras.
  2. OR: pelo menos uma das condições tem que ser verdadeira.
  3. 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:

  1. NOT
  2. AND
  3. OR

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:

  1. Que têm mais de 18 anos e nota "A".
  2. 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

  1. Esquecer os parênteses. Isso pode dar resultados inesperados, principalmente quando mistura AND e OR.
  2. Usar NOT sem entender direito quais linhas vão ser excluídas.
  3. Usar o operador lógico errado. Tipo, colocar AND no lugar de OR ou o contrário.
  4. Condições muito complicadas. Se a condição fica gigante com vários AND, OR, NOT e 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!

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION