CodeGym /Cursos /SQL SELF /Construindo consultas simples com SELECT, WHERE e ORDER B...

Construindo consultas simples com SELECT, WHERE e ORDER BY

SQL SELF
Nível 3 , Lição 2
Disponível

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:

  1. SELECT name — a gente pega só o nome. Não precisa gastar recurso puxando dado que não vai usar.
  2. WHERE grade = 'A' — filtra só quem tirou nota excelente.
  3. 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:

  1. SELECT product_name, price — pega o nome do produto e o preço.
  2. WHERE category = 'Electronics' — filtra só os produtos da categoria "Electronics".
  3. 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:

  1. WHERE age > 21 — pega só estudantes com mais de 21 anos.
  2. AND (grade = 'B' OR grade = 'C') — filtra quem tem nota B ou C. Os parênteses servem pra agrupar as condições.
  3. 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:

  1. WHERE price < 50000 — primeiro filtra os produtos, deixando só os que custam menos de 50.000.
  2. 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')
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION