Na lição anterior, estabelecemos o conceito fundamental de unir tabelas para recuperar dados relacionados. O tipo de join mais comum e frequentemente utilizado é o INNER JOIN. Nesta lição, exploraremos sua lógica, sintaxe e aplicações práticas em detalhes.
Um INNER JOIN é uma operação que combina linhas de duas tabelas apenas quando há um valor correspondente em ambas as tabelas com base em uma condição especificada. Se uma linha na Tabela A não tiver uma correspondência correspondente na Tabela B, essa linha será excluída do conjunto de resultados. Da mesma forma, quaisquer linhas na Tabela B que não correspondam à Tabela A também serão deixadas de fora.
Pense nisso como a interseção de dois conjuntos de dados.
Visualização:
Tabela A (customer) Tabela B (payment)
+----+----------+ +----+----------+
| id | name | | id | amount |
+----+----------+ +----+----------+
| 1 | Alice | <--------> | 1 | 10.00 | (Correspondência!)
| 2 | Bob | | 1 | 15.00 | (Correspondência!)
| 3 | Charlie | | 4 | 20.00 | (Sem correspondência para Charlie ou ID 4)
+----+----------+ +----+----------+
Neste exemplo, Charlie é excluído porque não tem pagamentos, e o pagamento com customer_id 4 é excluído porque não há cliente com esse ID.
A sintaxe padrão para um INNER JOIN é:
SELECT
table1.column1,
table2.column2
FROM
table1
INNER JOIN
table2 ON table1.common_column = table2.common_column;
INNER JOIN: Especifica que queremos apenas linhas correspondentes.ON: Define a condição para a correspondência (geralmente a Chave Primária de uma tabela e a Chave Estrangeira de outra).Nota: Na maioria dos bancos de dados SQL (como MySQL, PostgreSQL e SQL Server), a palavra-chave
INNERé opcional. EscreverJOINeINNER JOINproduzirá exatamente o mesmo resultado.
A tabela city contém um country_id que se refere à tabela country. Para ver o nome da cidade ao lado do nome do seu país, usamos um INNER JOIN.
SELECT
ci.city,
co.country
FROM
city AS ci
INNER JOIN
country AS co ON ci.country_id = co.country_id;
Esta consulta retorna apenas cidades que estão vinculadas a um país válido.
To find where each staff member lives, we join the staff and address tables.
Para descobrir onde cada funcionário mora, unimos as tabelas staff e address.
SELECT
s.first_name,
s.last_name,
a.address,
a.district
FROM
staff AS s
INNER JOIN
address AS a ON s.address_id = a.address_id;
Você pode encadear várias cláusulas INNER JOIN para reunir informações de várias tabelas ao mesmo tempo. Por exemplo, para ver em quais filmes um ator apareceu, precisamos de três tabelas: actor, film e a tabela de junção film_actor.
SELECT
a.first_name,
a.last_name,
f.title
FROM
actor AS a
INNER JOIN
film_actor AS fa ON a.actor_id = fa.actor_id
INNER JOIN
film AS f ON fa.film_id = f.film_id
LIMIT 10;
Como funciona:
actor e film_actor com base no actor_id.film com base no film_id.INNER JOIN subsequentes.AS ci, AS co) torna as junções complexas muito mais fáceis de ler e escrever.