DevPath · Aprenda a programar ESPTEN

Capstone: projete e consulte um banco de dados

Plano de consultas: unir, agregar, comparar

Percorrer relações com JOIN

Para mostrar dados de várias tabelas ao mesmo tempo usa-se JOIN, emparelhando linhas pelas suas chaves: a estrangeira de uma tabela com o id da outra.

SELECT clientes.nome, pedidos.data
FROM clientes
JOIN pedidos ON pedidos.cliente_id = clientes.id;

Para saber quais produtos cada pedido leva encadeamos vários JOIN, passando pela tabela ponte detalhes:

SELECT clientes.nome, produtos.nome, detalhes.quantidade
FROM clientes
JOIN pedidos   ON pedidos.cliente_id    = clientes.id
JOIN detalhes  ON detalhes.pedido_id    = pedidos.id
JOIN produtos  ON produtos.id           = detalhes.produto_id;

Resumir com GROUP BY

O valor de cada linha é quantidade * preco. Para o total gasto por cliente somamos todas as suas linhas e agrupamos por cliente:

SELECT clientes.nome, SUM(detalhes.quantidade * produtos.preco) AS total
FROM clientes
JOIN pedidos   ON pedidos.cliente_id = clientes.id
JOIN detalhes  ON detalhes.pedido_id = pedidos.id
JOIN produtos  ON produtos.id        = detalhes.produto_id
GROUP BY clientes.id
ORDER BY total DESC;

Comparar com subconsultas

Uma subconsulta é um SELECT dentro de outro. Serve, por exemplo, para comparar cada linha com um valor calculado (como uma média):

SELECT nome FROM produtos
WHERE preco > (SELECT AVG(preco) FROM produtos);

Ordem determinista. sql.js compara o resultado linha a linha, então sempre fechamos com um ORDER BY que não deixe empates ambíguos (adicionando o id ou o nome como desempate quando for preciso).

Coloque isto em prática

O DevPath é um curso prático: aqui você lê a teoria; no app você a coloca em prática com exercícios que rodam de verdade, offline.

Comece grátis no app →
← O modelo de dados da lojaVer o módulo →