Agora chegou a hora de juntar tudo isso e aprender a criar consultas simples, mas bem úteis, usando uma combinação de SELECT, WHERE e ORDER BY. Essa skill vai te ajudar em várias situações, desde pegar listas de usuários até montar relatórios rapidinhos.
Antes de começar, bora relembrar como é a estrutura de uma consulta SQL básica:
SELECT coluna1, coluna2, coluna3
FROM tabela
WHERE condição
ORDER BY coluna ASC
LIMIT quantidade_linhas
OFFSET quantidade_linhas;
Se SQL fosse uma obra literária, SELECT seria o título do capítulo, FROM o conteúdo, e WHERE a explicação da trama. Já o ORDER BY coloca tudo em ordem pra leitura ficar mais massa!
A ordem dos operadores é fixa. Dá pra pular alguns deles, mas trocar a ordem não rola.
Exemplo 1: Selecionando nomes de estudantes com notas excelentes
Imagina que a gente tem uma tabela students com essa estrutura e dados:
| id | name | age | grade |
|---|---|---|---|
| 1 | Otto | 21 | A |
| 2 | Maria | 22 | B |
| 3 | Alex | 20 | A |
| 4 | Nat | 23 | C |
| 5 | Dan | 25 | B |
Você precisa pegar a lista de todos os estudantes com nota excelente (ou seja, grade = 'A'), ordenados pelo nome. Olha só como faz:
SELECT name
FROM students
WHERE grade = 'A'
ORDER BY name ASC;
Resultado:
| name |
|---|
| Alex |
| Otto |
Explicação:
SELECT name— a gente pega só o nome. Não precisa gastar recurso puxando dado que não vai usar.WHERE grade = 'A'— filtra só quem tirou nota excelente.ORDER BY name ASC— ordena os nomes dos estudantes em ordem alfabética.
Exemplo 2: Buscando produtos pelo preço
Agora imagina que temos uma tabela products com informações dos produtos:
| id | product_name | category | price |
|---|---|---|---|
| 1 | Smartphone | Electronics | 30000 |
| 2 | Televisor | Electronics | 45000 |
| 3 | Kholodilnik | Appliances | 50000 |
| 4 | Pylesos | Appliances | 15000 |
| 5 | Lampochka | Lighting | 500 |
O objetivo é pegar a lista de produtos da categoria "Electronics", ordenando pelo preço do maior pro menor. A consulta fica assim:
SELECT product_name, price
FROM products
WHERE category = 'Electronics'
ORDER BY price DESC;
Resultado:
| product_name | price |
|---|---|
| Televisor | 45000 |
| Smartphone | 30000 |
Explicação:
SELECT product_name, price— pega o nome do produto e o preço.WHERE category = 'Electronics'— filtra só os produtos da categoria "Electronics".ORDER BY price DESC— ordena pelo preço do mais caro pro mais barato.
Exemplo 3: Filtros mais complexos com lógica
Vamos usar de novo a tabela students. Suponha que você precisa achar todos os estudantes com mais de 21 anos, que tenham nota B ou C, e ordenar pelo idade. Aqui a gente combina várias condições:
SELECT name, age, grade
FROM students
WHERE age > 21 AND (grade = 'B' OR grade = 'C')
ORDER BY age ASC;
Resultado:
| name | age | grade |
|---|---|---|
| Maria | 22 | B |
| Nat | 23 | C |
| Dan | 25 | B |
Explicação:
WHERE age > 21— pega só estudantes com mais de 21 anos.AND (grade = 'B' OR grade = 'C')— filtra quem tem notaBouC. Os parênteses servem pra agrupar as condições.ORDER BY age ASC— ordena pelo idade, do mais novo pro mais velho.
Exemplo 4: Combinando ordenação e filtragem
Voltando pra tabela products. Queremos achar produtos mais baratos que 50.000, ordenar por categoria e, dentro de cada categoria, pelo preço (do menor pro maior).
SELECT product_name, category, price
FROM products
WHERE price < 50000
ORDER BY category ASC, price ASC;
Resultado:
| product_name | category | price |
|---|---|---|
| Pylesos | Appliances | 15000 |
| Smartphone | Electronics | 30000 |
| Televisor | Electronics | 45000 |
| Lampochka | Lighting | 500 |
Explicação:
WHERE price < 50000— primeiro filtra os produtos, deixando só os que custam menos de 50.000.ORDER BY category ASC, price ASC— ordena por categoria (em ordem alfabética) e, dentro de cada categoria, pelo preço crescente.
Exemplo 5: Erro comum — esquecer de agrupar condições
Agora bora ver o que pode dar ruim. E se você esquecer de colocar os parênteses nas condições lógicas?
Consulta errada:
SELECT name, age, grade
FROM students
WHERE age > 21 AND grade = 'B' OR grade = 'C'
ORDER BY age ASC;
Aqui o OR grade = 'C' vai rodar sem considerar o AND age > 21, e a consulta vai trazer resultado errado. Vai aparecer todo mundo que tem nota C, mesmo se for mais novo que 21 anos.
Por isso, sempre usa parênteses pra deixar tudo claro:
WHERE age > 21 AND (grade = 'B' OR grade = 'C')
GO TO FULL VERSION