SQL: Consultas Básicas
Última atualização: 2026-10-09
Imagine entrar em uma biblioteca e querer encontrar um livro. Você não levaria todos os livros para casa — em vez disso, diria à bibliotecária: "Gostaria de encontrar romances de ficção científica publicados após 2020, ordenados por data de publicação do mais novo ao mais antigo, e me mostre os 5 primeiros." Este processo corresponde aos passos centrais de uma consulta SQL: selecionar dados, filtrar condições, ordenar e limitar quantidade.
Na lição anterior, aprendemos a criar bancos de dados e tabelas, e inserir dados. Esta lição aprenderá como consultar com precisão os dados que precisamos de um banco de dados.
1. Conceitos Fundamentais
(1) Instrução SELECT
SELECT é a instrução mais comumente usada em SQL, utilizada para recuperar dados de tabelas do banco de dados. Sua estrutura básica é:
SELECT coluna1, coluna2, ...
FROM nome_da_tabela;
- Após
SELECT, especifique as colunas a consultar - Após
FROM, especifique de qual tabela consultar - Cada instrução SQL termina com ponto e vírgula
;
(2) Consultar Colunas Específicas vs. Todas as Colunas
Consultar colunas específicas (recomendado):
SELECT name, salary FROM employees;
Consultar todas as colunas:
SELECT * FROM employees;
*. Isso melhora a eficiência da consulta e torna o código mais claro.
(3) Filtragem com Condição WHERE
A cláusula WHERE é usada para filtrar registros, retornando apenas linhas que atendem às condições:
SELECT coluna1, coluna2
FROM nome_da_tabela
WHERE condição;
(4) Operadores de Comparação
| Operador | Descrição | Exemplo |
|---|---|---|
= |
Igual a | salary = 50000 |
<> ou != |
Diferente de | status <> 'Inactive' |
> |
Maior que | salary > 50000 |
< |
Menor que | age < 30 |
>= |
Maior ou igual a | salary >= 50000 |
<= |
Menor ou igual a | age <= 30 |
(5) Operadores Lógicos: AND / OR
AND: Todas as condições devem ser verdadeirasOR: Pelo menos uma condição deve ser verdadeira
SELECT name, salary, department_id
FROM employees
WHERE salary > 50000 AND department_id = 1;
SELECT name, salary, department_id
FROM employees
WHERE department_id = 1 OR department_id = 2;
AND e OR são misturados, AND tem prioridade maior. Use parênteses () para esclarecer a prioridade e evitar ambiguidade.
(6) IN / BETWEEN / LIKE
IN — Corresponder a qualquer valor em um conjunto:
SELECT name, department_id
FROM employees
WHERE department_id IN (1, 2, 3);
BETWEEN — Corresponder a valores dentro de um intervalo (incluindo limites):
SELECT name, salary
FROM employees
WHERE salary BETWEEN 40000 AND 80000;
LIKE — Correspondência fuzzy de strings:
%corresponde a qualquer número de caracteres (incluindo zero)_corresponde a exatamente um caractere
-- Funcionários cujos nomes começam com "J"
SELECT name FROM employees WHERE name LIKE 'J%';
-- Funcionários cujos nomes têm 4 caracteres e começam com "John"
SELECT name FROM employees WHERE name LIKE 'John_';
(7) Ordenação com ORDER BY
ORDER BY é usado para ordenar o conjunto de resultados:
ASC: Ascendente (padrão, pode ser omitido)DESC: Descendente
-- Ordenar por salário do maior para o menor
SELECT name, salary
FROM employees
ORDER BY salary DESC;
-- Ordenar por departamento ascendente, depois por salário descendente
SELECT name, department_id, salary
FROM employees
ORDER BY department_id ASC, salary DESC;
(8) LIMIT para Limitar Linhas
LIMIT é usado para restringir o número de registros retornados:
-- Retornar apenas os primeiros 5 registros
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 5;
-- Pular os primeiros 5, retornar os próximos 5 (paginação)
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 5 OFFSET 5;
LIMIT é tipicamente usado com ORDER BY; caso contrário, a ordem dos registros retornados é indefinida.
2. Sintaxe/Uso Básico
(1) Estrutura Completa de uma Instrução de Consulta
SELECT coluna1, coluna2, ...
FROM nome_da_tabela
WHERE condição
ORDER BY coluna [ASC|DESC]
LIMIT quantidade [OFFSET deslocamento];
A ordem de escrita das cláusulas deve ser seguida rigorosamente:
| Ordem | Cláusula | Finalidade |
|---|---|---|
| 1 | SELECT |
Especificar colunas a consultar |
| 2 | FROM |
Especificar a tabela de origem |
| 3 | WHERE |
Filtrar linhas |
| 4 | ORDER BY |
Ordenar resultados |
| 5 | LIMIT |
Limitar número de linhas retornadas |
(2) Técnicas Comuns
-- Usar aliases para tornar nomes de colunas mais legíveis
SELECT name AS employee_name, salary AS employee_salary
FROM employees;
-- Remover valores duplicados
SELECT DISTINCT department_id
FROM employees;
-- Usar expressões em SELECT
SELECT name, salary, salary * 12 AS annual_salary
FROM employees;
- Aliases podem usar caracteres em português, mas inglês é recomendado para colaboração em equipe
DISTINCTremove duplicatas baseado na combinação de todas as colunas selecionadas- Expressões não modificam os dados originais; afetam apenas a exibição dos resultados da consulta
▶ Exemplo
▶ Exemplo: Consultar Funcionários de um Departamento Específico
Requisito: Consultar todos os nomes e salários dos funcionários do departamento ID 1, ordenados por salário do maior para o menor.
SELECT name, salary
FROM employees
WHERE department_id = 1
ORDER BY salary DESC;
Saída Esperada:
+----------+--------+
| name | salary |
+----------+--------+
| John | 85000 |
| Bob | 62000 |
| Alice | 55000 |
+----------+--------+
Explicação:
WHERE department_id = 1mantém apenas linhas onde o ID do departamento é 1ORDER BY salary DESCordena por salário em ordem decrescente- Os resultados contêm apenas as colunas
nameesalary
▶ Exemplo: Consulta Multi-condição
Requisito: Consultar funcionários com salário entre 60000 e 90000, e ID do departamento 1 ou 2. Mostrar nome, ID do departamento e salário. Ordenar por ID do departamento ascendente, depois salário descendente.
SELECT name, department_id, salary
FROM employees
WHERE salary BETWEEN 60000 AND 90000
AND department_id IN (1, 2)
ORDER BY department_id ASC, salary DESC;
Saída Esperada:
+----------+---------------+--------+
| name | department_id | salary |
+----------+---------------+--------+
| John | 1 | 85000 |
| Bob | 1 | 62000 |
| Jane | 2 | 75000 |
+----------+---------------+--------+
Explicação:
BETWEEN 60000 AND 90000filtra o intervalo de salárioIN (1, 2)filtra departamentosANDcombina as duas condições- Ordenar por departamento ascendente primeiro, depois por salário descendente dentro do mesmo departamento
▶ Exemplo: Consulta Fuzzy e Paginação
Requisito: Encontrar funcionários cujos nomes contêm "J", ordenados por data de contratação descendente, mostrando apenas os registros 2 a 3.
SELECT name, hire_date, salary
FROM employees
WHERE name LIKE '%J%'
ORDER BY hire_date DESC
LIMIT 2 OFFSET 1;
Saída Esperada:
+--------+------------+--------+
| name | hire_date | salary |
+--------+------------+--------+
| Jane | 2022-03-15 | 68000 |
| Julia | 2021-08-20 | 52000 |
+--------+------------+--------+
Explicação:
LIKE '%J%'corresponde a registros onde o nome contém "J" em qualquer posiçãoORDER BY hire_date DESCordena por data de contratação do mais novo ao mais antigoLIMIT 2 OFFSET 1pula o primeiro registro, retorna o 2º e 3º (ou seja, página 2 com 2 registros por página)
3. Cenários
(1) Cenário 1: Filtrar Funcionários de Alto Salário por Faixa Salarial
RH precisa exportar uma lista de funcionários que ganham mais de 70000, incluindo nome, departamento e salário, ordenados por salário do maior para o menor.
SELECT e.name AS employee_name,
d.name AS department_name,
e.salary AS salary
FROM employees e
JOIN departments d ON e.department_id = d.id
WHERE e.salary > 70000
ORDER BY e.salary DESC;
Observações:
- Usa
JOINpara associar a tabela de departamentos para obter nomes dos departamentos (coberto em detalhes nas lições posteriores) eedsão aliases de tabela que simplificam a escrita- Aliases usam nomes descritivos para uma saída mais clara
(2) Cenário 2: Lista de Funcionários Paginada
A página de lista de funcionários de uma aplicação web mostra 10 registros por página. Quando o usuário clica na página 3, precisa pular os primeiros 20 registros e exibir os registros 21-30.
-- Página 3, 10 registros por página
SELECT id, name, department_id, salary
FROM employees
ORDER BY id ASC
LIMIT 10 OFFSET 20;
Fórmula de Paginação: OFFSET = (número_da_página - 1) × registros_por_página
| Página | LIMIT | OFFSET |
|---|---|---|
| Página 1 | 10 | 0 |
| Página 2 | 10 | 10 |
| Página 3 | 10 | 20 |
❓ Perguntas Frequentes
SELECT * e especificar nomes de colunas?SELECT * retorna todas as colunas da tabela, enquanto especificar nomes de colunas retorna apenas as colunas que você precisa. Em ambientes de produção, é recomendado especificar explicitamente os nomes das colunas — as consultas são mais rápidas, mais legíveis e menos propensas a erros quando as estruturas das tabelas mudam.WHERE?FROM → WHERE → SELECT → ORDER BY. Quando WHERE executa, os aliases ainda não foram gerados. Se precisar filtrar por um alias, use uma subconsulta ou HAVING (coberto nas lições posteriores).BETWEEN inclui valores limites?BETWEEN 10 AND 20 é equivalente a >= 10 AND <= 20. Ambos os valores dos extremos estão incluídos nos resultados.LIKE é case-sensitive?LIKE e MySQL pode usar a palavra-chave BINARY.📖 Resumo
Esta lição cobriu as habilidades centrais de consulta SQL:
- SELECT — Especificar colunas a consultar; use
*para consultar todas as colunas - WHERE — Filtrar linhas com condições, suportando operadores de comparação (
=,>,<,<>,>=,<=) - Operadores Lógicos —
AND(ambos),OR(qualquer um); use parênteses para controlar prioridade - IN — Corresponder a qualquer valor em um conjunto
- BETWEEN — Corresponder a valores dentro de um intervalo (incluindo limites)
- LIKE — Correspondência fuzzy;
%corresponde a múltiplos caracteres,_corresponde a um único caractere - ORDER BY — Ordenar;
ASCascendente (padrão),DESCdescendente - LIMIT / OFFSET — Limitar linhas retornadas, habilitando paginação
Ordem de escrita da instrução de consulta: SELECT → FROM → WHERE → ORDER BY → LIMIT
📝 Exercícios
(1) Exercício 1: Consulta Básica
Consulte todos os registros na tabela departments, mostrando apenas as colunas name e location.
(2) Exercício 2: Filtragem por Condição e Ordenação
Consulte funcionários na tabela employees com salário maior ou igual a 60000 e data de contratação posterior a 1º de janeiro de 2022. Mostrar nome, salário e data de contratação, ordenados por salário descendente.
(3) Exercício 3: Consulta Abrangente
Consulte funcionários na tabela employees com ID do departamento 1 ou 3, e nomes que não começam com "J". Mostrar nome, ID do departamento e salário. Ordenar por ID do departamento ascendente, salário descendente. Retornar apenas os primeiros 3 registros.
Próxima Lição: Operações de Dados: INSERT, UPDATE, DELETE