Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

🔍 CAPÍTULO 14: CONSULTAS SELECT (A ARTE DO DQL)

Dos milhares de comandos SQL rodando agora nos servidores da Amazon ou do Google, 90% deles são comandos SELECT. A Extração de Dados (DQL - Data Query Language) é o que permite que a diretoria tome decisões baseadas em fatos, e não em achismos. 🛡️🧩


🎯 Objetivo Curricular

Dominar o comando SELECT e suas cláusulas de filtragem (WHERE, LIKE, IN, BETWEEN) e ordenação (ORDER BY) para a geração de relatórios precisos.


🏢 O Cenário Prático (Seu Desafio)

O Diretor de Operações da TecProExpress quer um painel de controle. Ele diz: "Quero ver apenas os motoristas do estado de São Paulo, que ganham mais de R$ 3.000,00, organizados do maior salário para o menor, e quero o nome de quem tem 'Silva' no sobrenome".

"Seu desafio é transformar esse pedido humano em uma Query SQL matemática e cirúrgica, extraindo exatamente o que o diretor quer da base de dados, ignorando os milhares de outros registros irrelevantes."


🧠 Fundamentos: A Anatomia da Busca

O comando SELECT lê as tabelas de forma passiva. Ele nunca altera ou apaga um dado. Ele apenas tira uma "foto" e te mostra.

1. Seleção Básica (O Coringa)

-- DDL/DML Base para os exemplos
-- CREATE TABLE motorista (id INT, nome VARCHAR(50), estado CHAR(2), salario DECIMAL(10,2));
-- INSERT INTO motorista VALUES (1, 'João Silva', 'SP', 3500.00), (2, 'Maria Souza', 'RJ', 2800.00);

-- O * (asterisco) significa "traga todas as colunas"
SELECT * FROM motorista;

-- Traga apenas colunas específicas (Melhor performance)
SELECT nome, salario FROM motorista;

2. O Filtro Matemático (WHERE)

Você não quer ver o banco inteiro, você quer filtrar linhas (Tuplas).

-- Filtro Exato
SELECT nome FROM motorista WHERE estado = 'SP';

-- Filtro Numérico Maior/Menor
SELECT nome FROM motorista WHERE salario > 3000.00;

3. Filtros Avançados de Padrão (LIKE e IN)

Para buscar textos parciais ou listas específicas.

-- O operador % funciona como um coringa (qualquer coisa antes, 'Silva', qualquer coisa depois)
SELECT nome FROM motorista WHERE nome LIKE '%Silva%';

-- O operador IN evita ter que escrever vários OR (estado='SP' OR estado='RJ')
SELECT nome FROM motorista WHERE estado IN ('SP', 'RJ', 'MG');

4. Ordenação (ORDER BY)

Como o resultado será apresentado na tela.

-- ASC = Crescente (A-Z ou 0-9) | DESC = Decrescente (Z-A ou 9-0)
SELECT nome, salario FROM motorista ORDER BY salario DESC;

📖 Exemplo Guiado: O Relatório do Diretor

Vamos unir todas as cláusulas para resolver o desafio da TecProExpress.

A ordem de escrita é obrigatória no SQL:

  1. SELECT (O que eu quero ver?)
  2. FROM (De onde vem?)
  3. WHERE (Quais são as condições?)
  4. ORDER BY (Como organizo?)

🛠️ Código do Exemplo

SELECT nome, estado, salario 
FROM motorista 
WHERE estado = 'SP' 
  AND salario > 3000.00 
  AND nome LIKE '%Silva%'
ORDER BY salario DESC;

🔍 Detalhamento do Código:

  • AND: O operador lógico exige que as três condições sejam verdadeiras simultaneamente para que a linha seja exibida na tela.
  • ORDER BY salario DESC: O motorista que ganha R$ 4.000 aparecerá antes do que ganha R$ 3.500.

🛠️ Prática Obrigatória: Extração de Dados

Cenário: O relatório de Pacotes da TecProExpress.

  1. Crie a tabela pacote com id, descricao, peso_kg e valor_frete.
  2. Insira 4 pacotes com pesos e fretes diferentes.
  3. Crie um SELECT que mostre apenas a descricao e o valor_frete dos pacotes que pesam entre 10 e 50 kg (BETWEEN), ordenados pelo frete mais barato primeiro.

🚀 Script de Seed (Gabarito DQL)

-- 1. Setup (DDL)
CREATE TABLE pacote (
    id INT PRIMARY KEY,
    descricao VARCHAR(100),
    peso_kg DECIMAL(5,2),
    valor_frete DECIMAL(10,2)
);

-- 2. Massa de Dados (DML)
INSERT INTO pacote VALUES (1, 'Televisão', 15.50, 150.00);
INSERT INTO pacote VALUES (2, 'Celular', 0.50, 30.00);
INSERT INTO pacote VALUES (3, 'Geladeira', 80.00, 400.00);
INSERT INTO pacote VALUES (4, 'Bicicleta', 20.00, 200.00);

-- 3. O Relatório (DQL)
SELECT descricao, valor_frete 
FROM pacote 
WHERE peso_kg BETWEEN 10.00 AND 50.00 
ORDER BY valor_frete ASC;

📤 Instruções de Entrega (Microsoft Teams)

Após validar seus códigos práticos e de estudo:

Use o operador e para critérios rigorosos e ou para critérios flexíveis. Salve os arquivos com a extensão .sql (Ex: Atividade_XX_SeuNome.sql ou Atividade_XX_SeuNome.png ou Atividade_XX_SeuNome.drawio


💡 Checkpoint de Lógica

[!IMPORTANT] Reflexão Profissional: Nunca, em hipótese alguma, utilize SELECT * no código fonte de uma aplicação em produção (Java, Node.js, C#). Se a sua aplicação só precisa mostrar o Nome e o Email do usuário, fazer SELECT * fará com que o SGBD traga todas as colunas, incluindo Fotos, Textos longos de Biografia e a Senha criptografada pela rede. Isso gasta banda, atrasa a tela e gera risco de segurança. Sempre cite as colunas que você quer no SELECT! 🧠🛡️