Consultas Básicas

Consultas Básicas

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.


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 é:

SQL
SELECT coluna1, coluna2, ...
FROM nome_da_tabela;

2. Consultar Colunas Específicas vs. Todas as Colunas

Consultar colunas específicas (recomendado):

SQL
SELECT name, salary FROM employees;

Consultar todas as colunas:

SQL
SELECT * FROM employees;
💡 Dica: No desenvolvimento real, é recomendado especificar explicitamente os nomes das colunas que você precisa em vez de usar *. 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:

SQL
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

SQL
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;
💡 Dica: Quando 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:

SQL
SELECT name, department_id
FROM employees
WHERE department_id IN (1, 2, 3);

BETWEEN — Corresponder a valores dentro de um intervalo (incluindo limites):

SQL
SELECT name, salary
FROM employees
WHERE salary BETWEEN 40000 AND 80000;

LIKE — Correspondência fuzzy de strings:

SQL
-- 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:

SQL
-- 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:

SQL
-- 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;
💡 Dica: LIMIT é tipicamente usado com ORDER BY; caso contrário, a ordem dos registros retornados é indefinida.


Sintaxe/Uso Básico

Estrutura Completa de uma Instrução de Consulta

SQL
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

Técnicas Comuns

SQL
-- 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;
💡 Dica:

  • Aliases podem usar caracteres em português, mas inglês é recomendado para colaboração em equipe
  • DISTINCT remove 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

Exemplos

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.

SQL
SELECT name, salary
FROM employees
WHERE department_id = 1
ORDER BY salary DESC;
▶ Experimente

Saída Esperada:

TEXT
+----------+--------+
| name     | salary |
+----------+--------+
| John     |  85000 |
| Bob      |  62000 |
| Alice    |  55000 |
+----------+--------+

Explicação:

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.

SQL
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;
▶ Experimente

Saída Esperada:

TEXT
+----------+---------------+--------+
| name     | department_id | salary |
+----------+---------------+--------+
| John     |             1 |  85000 |
| Bob      |             1 |  62000 |
| Jane     |             2 |  75000 |
+----------+---------------+--------+

Explicação:

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.

SQL
SELECT name, hire_date, salary
FROM employees
WHERE name LIKE '%J%'
ORDER BY hire_date DESC
LIMIT 2 OFFSET 1;
▶ Experimente

Saída Esperada:

TEXT
+--------+------------+--------+
| name   | hire_date  | salary |
+--------+------------+--------+
| Jane   | 2022-03-15 |  68000 |
| Julia  | 2021-08-20 |  52000 |
+--------+------------+--------+

Explicação:


Cenários

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.

SQL
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:

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.

SQL
-- 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

P: Qual a diferença entre SELECT * e especificar nomes de colunas? R: 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.

P: Posso usar aliases em WHERE? R: Não. A ordem de execução do SQL é FROMWHERESELECTORDER 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).

P: BETWEEN inclui valores limites? R: Sim. BETWEEN 10 AND 20 é equivalente a >= 10 AND <= 20. Ambos os valores dos extremos estão incluídos nos resultados.

P: LIKE é case-sensitive? R: Depende da collation do banco de dados. MySQL é case-insensitive por padrão, enquanto PostgreSQL é case-sensitive por padrão. Para forçar sensibilidade a maiúsculas/minúsculas, PostgreSQL pode usar LIKE e MySQL pode usar a palavra-chave BINARY.


📖 Resumo

Esta lição cobriu as habilidades centrais de consulta SQL:

  1. SELECT — Especificar colunas a consultar; use * para consultar todas as colunas
  2. WHERE — Filtrar linhas com condições, suportando operadores de comparação (=, >, <, <>, >=, <=)
  3. Operadores LógicosAND (ambos), OR (qualquer um); use parênteses para controlar prioridade
  4. IN — Corresponder a qualquer valor em um conjunto
  5. BETWEEN — Corresponder a valores dentro de um intervalo (incluindo limites)
  6. LIKE — Correspondência fuzzy; % corresponde a múltiplos caracteres, _ corresponde a um único caractere
  7. ORDER BY — Ordenar; ASC ascendente (padrão), DESC descendente
  8. LIMIT / OFFSET — Limitar linhas retornadas, habilitando paginação

Ordem de escrita da instrução de consulta: SELECTFROMWHEREORDER BYLIMIT


📝 Exercícios

Exercício 1: Consulta Básica

Consulte todos os registros na tabela departments, mostrando apenas as colunas name e location.

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.

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

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%