MySQL: Uma explicação detalhada sobre os operadores e…
Última atualização: 2026-08-26
Os operadores são a base das consultas SQL — todas as condições em uma cláusula WHERE dependem deles.
Esta aula oferece uma visão geral sistemática de todos os operadores do MySQL e seus casos de uso.
graph TB
A[MySQL Operators] --> B[Arithmetic Operators<br/>+ - * / DIV %]
A --> C[Comparison Operators<br/>= != > < BETWEEN LIKE IN]
A --> D[Logical Operators<br/>AND OR NOT XOR]
A --> E[Bitwise operators<br/>& | ^ ~ << >>]
C --> C1[BETWEEN Scope]
C --> C2[IN List]
C --> C3[LIKE Blurred]
C --> C4[IS NULL Null value]
C --> C5[<=> Safety equals]
1. O que você vai aprender
- Operadores aritméticos (+−×÷)
- Operadores de comparação (=/>/</BETWEEN/LIKE/IN)
- Operadores lógicos (AND/OR/NOT)
- Operadores bit a bit (&/|/^)
- Precedência dos operadores
2. A história real por trás de uma reportagem
(1) Problema: Critérios de filtragem inseridos incorretamente
Um especialista em operações deseja consultar “pedidos dos últimos 30 dias com valor superior a 100 e cujo status não seja ‘cancelado’”:
-- Incorrect Formulation
SELECT * FROM orders
WHERE order_date > '2026-06-03' AND amount > 100 AND status != 'cancelled';
-- Missed: status could be NULL
(2) Resolução de equações com operadores
-- Correct Way: Handle NULL
SELECT * FROM orders
WHERE order_date > DATE_SUB(CURDATE(), INTERVAL 30 DAY)
AND amount > 100
AND (status != 'cancelled' OR status IS NULL);
Vantagens: Nenhum valor NULL é omitido, garantindo resultados precisos nas consultas.
3. Operadores aritméticos
| Operador | Descrição | Exemplo |
|---|---|---|
+ |
Adição | SELECT 1 + 1; → 2 |
- |
Subtração | SELECT 5 - 3; → 2 |
* |
Multiplicação | SELECT 2 * 3; → 6 |
/ |
Divisão | SELECT 10 / 3; → 3,3333 |
DIV |
Divisão inteira | SELECT 10 DIV 3; → 3 |
% |
Módulo | SELECT 10 % 3; → 1 |
MOD |
Módulo | SELECT MOD(10, 3); → 1 |
▶ Exemplo: Operações aritméticas
-- Calculate the total order amount
SELECT
product_name,
price,
quantity,
price * quantity AS total
FROM order_items;
-- Calculate the discounted price
SELECT
product_name,
original_price,
discount_rate,
original_price * (1 - discount_rate / 100) AS sale_price
FROM products;
Saída:
+--------------+-------+----------+-------+
| product_name | price | quantity | total |
+--------------+-------+----------+-------+
| iPhone | 999 | 2 | 1998 |
| MacBook | 1999 | 1 | 1999 |
+--------------+-------+----------+-------+
4. Operadores de comparação
| Operador | Descrição | Exemplo |
|---|---|---|
= |
é igual a | WHERE id = 1 |
<> ou != |
Não é igual a | WHERE status != 'deleted' |
< |
Menos que | WHERE age < 18 |
> |
Maior que | WHERE price > 100 |
<= |
Menor ou igual a | WHERE score <= 60 |
>= |
Maior ou igual a | WHERE amount >= 1000 |
| Escopo | BETWEEN |
WHERE age BETWEEN 18 AND 30 |
IN |
Lista | WHERE status IN ('active', 'pending') |
LIKE |
Correspondência aproximada | WHERE name LIKE 'J%' |
IS NULL |
É nulo | WHERE email IS NULL |
IS NOT NULL |
Não é nulo | WHERE email IS NOT NULL |
<=> |
Seguro equivale a | NULL <=> NULL → 1 |
▶ Exemplo: Consulta de intervalo BETWEEN
-- Check prices between 100 and 500
SELECT * FROM products WHERE price BETWEEN 100 AND 500;
-- Equivalent to
SELECT * FROM products WHERE price >= 100 AND price <= 500;
-- Query orders within a specific date range
SELECT * FROM orders WHERE order_date BETWEEN '2026-01-01' AND '2026-06-30';
▶ Exemplo: Consulta de lista IN
-- Query Orders with a Specific Status
SELECT * FROM orders WHERE status IN ('pending', 'paid', 'shipped');
-- Equivalent to
SELECT * FROM orders WHERE status = 'pending' OR status = 'paid' OR status = 'shipped';
-- Search for employees in a specific department
SELECT * FROM employees WHERE department_id IN (1, 3, 5, 7);
▶ Exemplo: Correspondência aproximada com LIKE
-- % Match any number of characters
SELECT * FROM users WHERE name LIKE 'J%'; -- Starts with J
SELECT * FROM users WHERE name LIKE '%son'; -- Ends with son
SELECT * FROM users WHERE name LIKE '%john%'; -- Contains john
-- _ Match a single character
SELECT * FROM users WHERE phone LIKE '138____1111'; -- Positions 4-7 can be any digit
-- ESCAPE Escape
SELECT * FROM files WHERE name LIKE '%\%%' ESCAPE '\\'; -- Contains %
▶ Exemplo: Comparando valores NULL
-- NULL cannot be compared with =
SELECT * FROM users WHERE email = NULL; -- Wrong, returns null
SELECT * FROM users WHERE email IS NULL; -- Correct
-- NULL cannot be compared with !=
SELECT * FROM users WHERE email != NULL; -- Wrong
SELECT * FROM users WHERE email IS NOT NULL; -- Correct
-- Safe equals <=>
SELECT NULL = NULL; -- NULL (Uncertain)
SELECT NULL <=> NULL; -- 1 (Determines if equal)
5. Operadores lógicos
| Operador | Descrição | Exemplo |
|---|---|---|
AND |
E lógico | WHERE a = 1 AND b = 2 |
OR |
OU lógico | WHERE a = 1 OR b = 2 |
NOT |
NÃO lógico | WHERE NOT (status = 'deleted') |
XOR |
OU exclusivo | WHERE a = 1 XOR b = 2 |
▶ Exemplo: Combinação AND/OR
-- AND: Both conditions must be met
SELECT * FROM employees
WHERE department = 'Engineering' AND salary > 8000;
-- OR: Meets any one of the conditions
SELECT * FROM employees
WHERE department = 'Sales' OR department = 'Marketing';
-- Combination: Note priority (AND > OR)
SELECT * FROM employees
WHERE (department = 'Sales' OR department = 'Marketing')
AND salary > 5000;
▶ Exemplo: NOT (negação)
-- NOT IN
SELECT * FROM products WHERE category_id NOT IN (1, 2, 3);
-- NOT BETWEEN
SELECT * FROM orders WHERE amount NOT BETWEEN 100 AND 500;
-- NOT LIKE
SELECT * FROM users WHERE email NOT LIKE '%@test.com';
-- NOT EXISTS
SELECT * FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id);
6. Operadores bit a bit
| Operador | Descrição | Exemplo |
|---|---|---|
& |
AND bit a bit | SELECT 5 & 3; → 1 |
| |
OR bit a bit | SELECT 5 | 3; → 7 |
^ |
XOR bit a bit | SELECT 5 ^ 3; → 6 |
~ |
NOT bit a bit | SELECT ~5; → -6 |
<< |
Deslocamento para a esquerda | SELECT 1 << 3; → 8 |
>> |
Deslocamento para a direita | SELECT 8 >> 2; → 2 |
▶ Exemplo: Aplicações das operações bit a bit
-- Permission system (Bit mask)
-- Read=1, Write=2, Execute=4
CREATE TABLE permissions (
user_id INT,
permission TINYINT
);
-- User has Read+Write permissions = 1|2 = 3
INSERT INTO permissions VALUES (1, 3);
-- Check for write permission (3 & 2 = 2, non-zero means "yes")
SELECT * FROM permissions WHERE permission & 2;
7. Precedência dos operadores
Da maior para a menor:
| Prioridade | Operador |
|---|---|
| 1 | ! (NÃO) |
| 2 | - (sinal negativo), ~ (não) |
| 3 | ^ (XOR) |
| 4 | *, /, DIV, %, MOD |
| 5 | +, - |
| 6 | <<, >> |
| 7 | & |
| 8 | | |
| 9 | =, <=>, <>, !=, <, <=, >, >=, LIKE, IN, BETWEEN |
| 10 | AND, && |
| 11 | OR, ||, XOR |
() para especificar a ordem de execução.
❓ Perguntas Frequentes
P: Qual é a diferença entre
=e<=>? R:=retorna NULL quando comparado a NULL, enquanto<=>retorna 1 (indicando igualdade) quando comparado a NULL.<=>é um operador de igualdade seguro específico do MySQL.
P: O que é mais rápido, LIKE ou REGEXP? R: O LIKE é mais rápido (pode usar um índice), enquanto o REGEXP é mais flexível (usa expressões regulares). Use o LIKE para correspondências simples.
P: Qual é a precedência de AND e OR? R: AND tem precedência maior do que OR.
WHERE a=1 OR b=2 AND c=3é equivalente aWHERE a=1 OR (b=2 AND c=3). Recomenda-se o uso de parênteses para maior clareza.
P: Qual é o resultado de uma operação que envolve NULL? R: Qualquer operação que envolva NULL resulta em NULL.
1 + NULL = NULL,'abc' || NULL = NULL.
📖 Resumo
- Operadores aritméticos são usados para cálculos numéricos:
+−×÷ DIV % - Operadores de comparação são usados para filtragem condicional:
= / != / < / > / BETWEEN / LIKE / IN / IS NULL - Operadores lógicos: Combinação de condições:
AND / OR / NOT / XOR - Operadores bit a bit: Operam sobre bits binários:
& / | / ^ / ~ / << / >> - NULL: O resultado de uma operação envolvendo NULL é NULL; use
IS NULLou<=>para comparações. - Use parênteses quando a prioridade for incerta
📝 Exercícios
-
Problema básico (Dificuldade ⭐): Escreva uma consulta para encontrar produtos com preço de venda entre 100 e 500, estoque maior que 0 e nome que contenha “phone”.
-
Problema avançado (Dificuldade ⭐⭐): Escreva uma consulta para encontrar pedidos dos últimos 7 dias com valor superior a 200, status “pago” ou “enviado” e endereço de e-mail do cliente não vazio.
-
Desafio (Dificuldade: ⭐⭐⭐): Crie um sistema de permissões que utilize operações bit a bit para armazenar e verificar as permissões de leitura, gravação e execução de um usuário.