Um dos maiores benefícios de usar bancos de dados relacionais como o MySQL é que sua estrutura relacional permite armazenar e consultar informações facilmente em várias tabelas.

Vamos explorar como recuperar exatamente os dados que você deseja de várias tabelas de banco de dados e as várias junções disponíveis que permitem obter os resultados exatos que você deseja.

Inicializar banco de dados de amostra

Isso não é obrigatório, mas se desejar seguir os exemplos neste artigo, você pode inicializar um banco de dados de amostra localmente com os comandos de terminal abaixo:

git clone https://github.com/mdizak/sample-select-db.git
cd sample-select-db
sudo mysql sudo mysql sampledb
mysql> SELECT COUNT (*) FROM customers;

Você deve obter um resultado informando que há 2.000 linhas dentro do clientes tabela.

Associação padrão / INNER

A junção padrão usada em Bancos de dados MySQL é chamada de junção INNER e é a mais comum e direta. Esta junção retorna todos os registros para os quais existem registros correspondentes em ambas as tabelas e descarta todos os outros registros.

instagram viewer
Como se conectar a um banco de dados MySQL com Java

Java fornece JDBC como parte do Java SDK. Neste artigo, vamos dar uma olhada nos detalhes da conexão com um banco de dados MySQL e realizar consultas com ele.

Por exemplo, se você quiser ver o nome e o sobrenome do cliente, além do valor do pedido e a data de todos os pedidos superiores a $ 1000, poderá usar a seguinte instrução SQL:


SELECIONE
c.id, c.first_name, c.last_name, o.amount, o.created_at
A PARTIR DE
clientes c, pedidos o
ONDE
o.customer_id = c.id AND o.amount> = 1000;

Algumas notas sobre a consulta acima:

  • Cinco colunas diferentes estão sendo selecionadas, três da tabela de clientes e duas da tabela de pedidos.
  • Na cláusula FROM, as duas tabelas são definidas, mas com o sufixo das letras "c" e "o". Eles simplesmente especificam aliases no SQL, podem ser o que você quiser e são usados ​​para encurtar a consulta SQL.
  • O o.customer_id = c.id é o aspecto de junção da consulta e garante a correlação adequada entre clientes e pedidos.

Uma maneira diferente e tecnicamente mais sintaticamente correta de escrever a mesma consulta está abaixo:


SELECIONE
c.id, c.first_name, c.last_name, o.amount, o.created_at
A PARTIR DE
clientes c INNER JOIN pedidos o
SOBRE
customer_id = c.id
ONDE
o.amount> = 1000;

A consulta acima tende a ser um pouco mais fácil de ler, pois você pode ver facilmente a junção entre a tabela de clientes e pedidos. Para todos os efeitos, porém, essas duas consultas são iguais e produzirão exatamente os mesmos registros.

LEFT junta-se

As junções à esquerda retornarão todos os registros da tabela à esquerda que também correspondem aos registros da tabela à direita e descartarão todos os outros registros. Por exemplo, talvez você queira ver o valor total das vendas de cada produto no banco de dados, você pode tentar usar uma consulta como:


SELECIONE
p.name, sum (item.amount) AS tamount
A PARTIR DE
pedidos_itens item LEFT JOIN produtos p
SOBRE
item.product_id = p.id
GROUP BY item.product_id ORDER BY tamount DESC

Isso resulta em uma bela visualização de duas colunas mostrando o nome do produto com o valor total das vendas e funciona conforme o esperado. A consulta passou por todos os produtos na tabela orders_items, juntou-os aos registros na tabela de produtos e retornou o valor total das vendas de cada um.

RIGHT Joins

Usando o exemplo acima, observe o fato de que a consulta acima retornou apenas 19 registros, enquanto há um total de 22 produtos no banco de dados. Isso ocorre porque a consulta começou com a tabela orders_items e a juntou à esquerda para a tabela de produtos, e uma vez que alguns produtos nunca foram pedidos, nenhum registro desses produtos existe em orders_items tabela.

O que acontece se você deseja obter uma lista de todos os produtos com valores de venda, incluindo produtos que não foram pedidos? Tente uma junção certa com a seguinte consulta:


SELECIONE
p.name, sum (item.amount) AS tamount
A PARTIR DE
pedidos_itens item RIGHT JOIN produtos p
SOBRE
item.product_id = p.id
GROUP BY p.id ORDER BY tamount DESC

Isso é melhor, e a consulta agora retorna os 22 produtos completos, com três deles tendo uma quantidade de nulo. Isso ocorre porque em vez de usar orders_items como a tabela primária que se junta à tabela de produtos, a junção certa inverte o pedido e junta a tabela de produtos à tabela orders_items.

Múltiplas associações em uma consulta

Às vezes, você precisa juntar três ou mais tabelas para obter um conjunto específico de resultados.

Por exemplo, talvez você queira uma lista de todos os clientes que compraram o micro-ondas (id do produto # 1), incluindo seus nomes e data do pedido. Isso requer um SELECT em três tabelas, que pode ser feito usando duas junções com a seguinte consulta:


SELECIONE
c.first_name, c.last_name, o.amount, o.created_at
A PARTIR DE
clientes c INNER JOIN pedidos o
SOBRE
c.id = o.customer_id INNER JOIN orders_items item
SOBRE
item.order_id = o.id
ONDE
item.product_id = 1 ORDER BY o.created_at;

Esta consulta retorna todos os 426 pedidos do microondas e funciona conforme o esperado. Primeiro, ele associa todos os clientes aos seus respectivos pedidos e, em seguida, consultas adicionais que resultam definidas por combinando todos os pedidos apenas com aqueles dentro da tabela orders_items que contêm o produto de microondas (id # 1).

Nunca use subconsultas com cláusulas IN

Como uma nota rápida, a todo custo, você deve sempre evitar usar subconsultas com dentro de suas consultas SQL, como:

SELECT first_name, last_name FROM clientes WHERE id IN (SELECT customer_id FROM pedidos WHERE status = 'aprovado' E valor <100);

Consultas como as acima são muito ineficientes, usam um grande número de recursos e devem ser evitadas tanto quanto possível. Em vez disso, use junções adequadas conforme descrito nas seções acima. Por exemplo, a consulta acima deve ser reescrita como:

SELECT c.first_name, c.last_name DE clientes c LEFT JOIN pedidos o ON o.customer_id = c.id WHERE o.status = 'aprovado' AND o.amount <100;

Economize tempo com junções SQL

Esperamos que este artigo tenha ajudado a mostrar o poder dos bancos de dados relacionais, como o MySQL, e como construir Consultas SQL que recuperam registros de várias tabelas em uma consulta usando junções, permitindo que você recupere os resultados exatos desejados.

Você aprendeu três associações diferentes no SQL, como criar nomes de colunas e tabelas, usar várias associações em uma consulta e por que deve evitar subconsultas. Nunca se atrapalhe tentando compilar manualmente diferentes conjuntos de dados em um e comece a usar junções para impressionar seus colegas de trabalho e economizar tempo.

O email
10 maneiras bacanas de criar lindos documentos do Google

O Google Docs agora é uma potência de escritório. Com a ajuda desses add-ons, você pode deixar seu Google Docs bonito e estiloso.

Tópicos relacionados
  • Programação
  • SQL
  • base de dados
Sobre o autor
Matt Dizak (13 artigos publicados)Mais de Matt Dizak

Assine a nossa newsletter

Junte-se ao nosso boletim informativo para dicas de tecnologia, análises, e-books grátis e ofertas exclusivas!

Mais um passo…!

Confirme o seu endereço de e-mail no e-mail que acabamos de enviar.

.