SQL Intermediário

Avançando além do básico, estes conceitos permitirão que você execute consultas mais complexas e poderosas, extraindo informações valiosas dos seus dados.

ORDER BY

A cláusula ORDER BY é usada para classificar o conjunto de resultados em ordem crescente (ASC) ou decrescente (DESC).

SELECT * FROM Alunos 
ORDER BY nome ASC;

Para ordenar por múltiplas colunas (útil quando há valores repetidos na primeira coluna):

SELECT * FROM Alunos 
ORDER BY curso_id ASC, idade DESC;
Dica: ASC (ascendente) é o padrão e pode ser omitido. Use DESC para ordem descendente.

LIMIT e OFFSET

LIMIT é usado para especificar o número máximo de registros a retornar. OFFSET especifica quantos registros pular antes de começar a retornar.

SELECT * FROM Alunos 
LIMIT 5 OFFSET 10;
Uso prático: LIMIT e OFFSET são frequentemente usados para implementar paginação em aplicações, mostrando um número fixo de resultados por página.

Funções de Agregação

Funções de agregação realizam um cálculo em um conjunto de valores e retornam um único valor. São essenciais para análise de dados.

SELECT 
COUNT(*) AS total_alunos,
AVG(idade) AS media_idade,
MIN(idade) AS idade_minima,
MAX(idade) AS idade_maxima,
SUM(idade) AS soma_idades
FROM Alunos;

Principais funções de agregação:

GROUP BY

A cláusula GROUP BY agrupa linhas que têm os mesmos valores em colunas especificadas. É frequentemente usada com funções de agregação.

SELECT curso_id, COUNT(*) AS total 
FROM Alunos 
GROUP BY curso_id;
Importante: Todas as colunas no SELECT que não são funções de agregação devem aparecer no GROUP BY.

HAVING

HAVING é usado para filtrar resultados de grupos, assim como WHERE filtra registros individuais. A diferença é que HAVING funciona após o agrupamento.

SELECT curso_id, COUNT(*) AS total 
FROM Alunos 
GROUP BY curso_id 
HAVING COUNT(*) >= 2;
Dica: Use WHERE para filtrar registros antes do agrupamento e HAVING para filtrar grupos após o agrupamento.

Subqueries

Subqueries (consultas aninhadas) são consultas dentro de outras consultas SQL. Elas permitem realizar operações complexas em etapas.

SELECT nome 
FROM Alunos 
WHERE curso_id IN (
SELECT id FROM Cursos 
WHERE area = 'Tecnologia'
);
Uso comum: Subqueries são úteis quando você precisa filtrar com base em resultados de outra consulta, ou quando precisa calcular valores para comparação.