Principais conclusões:
- As junções MySQL combinam dados de várias tabelas num único resultado.
- Diferentes tipos de junção (INNER, LEFT, RIGHT, etc.) determinam quais as linhas que são incluídas com base nas condições de correspondência.
- As junções são essenciais para recuperar dados relacionados de forma eficiente em aplicações de bases de dados.
Ao gerir dados em bases de dados, a organização das informações em tabelas separadas pode melhorar o desempenho e manter a consistência. No entanto, para satisfazer determinadas consultas, os dados de várias tabelas precisam frequentemente de ser combinados. A junção de tabelas permite fazer isto através da correspondência de registos com base em valores de campos partilhados.
Por exemplo, juntar uma tabela“clientes” a uma tabela“encomendas” permite recuperar as encomendas e as informações correspondentes dos clientes numa única consulta.
Diferentes tipos de junções fornecem vários métodos de combinação de dados de tabelas. Neste guia, aprenderemos como juntar duas tabelas no MySQL, por que elas são usadas e como usá-las.
Começa.
Aloja sites PHP com facilidade [A partir de $11 de crédito]
- Encenação gratuita
- Backup gratuito
- PHP 8.0
- Websites ilimitados

O que são Joins no MySQL?
Em suma, o MySQL Joins permite-te aceder a dados de múltiplas tabelas. Um MySQL Join é executado sempre que duas ou mais tabelas são unidas numa instrução SQL.
O formato básico de uma instrução de junção SQL é o seguinte:
SELECIONA * DE <primeira_tabela> <join_type> <second_table> <condição_de_união>;
As junções de bases de dados fundem registos de diferentes fontes com base em valores correspondentes em colunas específicas. Cada linha resultante inclui dados da primeira tabela e dados da segunda tabela, alinhados com base em valores de coluna partilhados.
Numa junção, cada linha inclui todas as colunas da primeira tabela, seguidas de todas as colunas da segunda tabela. Podes especificar quais as colunas a apresentar na parte SELECT da consulta.
As junções MySQL incluem:
- MySQL Inner Join (também conhecido como Simple Join)
- MySQL Left Outer Join (também chamado de Left Join, devolve os registos correspondentes da tabela da esquerda)
- Junção à direita (devolve os registos correspondentes da tabela da direita)
- União total (devolve registos correspondentes de todas as tabelas)
O tipo de junção e as condições especificadas determinam como cada linha resultante é construída e o que acontece com as linhas de cada tabela que não correspondem à condição de junção.
Por exemplo, um Inner Join pode ser utilizado para combinar uma tabela de“clientes” com uma tabelade “encomendas“, recuperando as encomendas juntamente com as informações correspondentes dos clientes.
Como juntar várias tabelas no MySQL?
Se estiveres a trabalhar numa aplicação de grandes dimensões, como uma loja de comércio eletrónico, e a criar várias tabelas, como clientes, encomendas e produtos, poderás ter de juntar tabelas.
Vejamos um exemplo em que vamos obter todos os produtos encomendados por clientes específicos.
Cria a nossa consulta:
SELECT * FROM table1 LEFT JOIN table2 ON table2.id = table1.id LEFT JOIN table3 ON table3.id = table1.id
Se olhares para a consulta acima, primeiro juntamos a Tabela 1 e a Tabela 2, o que resulta numa tabela temporária com dados combinados da Tabela 1 e da Tabela 2, que é depois juntada à Tabela 3. Esta equação pode ser alargada a mais de 3 tabelas e a N tabelas. Tens de te certificar de que a consulta SQL tem uma instrução de junção N-1 para juntar N tabelas.
A consulta acima permitir-te-á fazer corresponder as linhas da Tabela 1 (em qualquer caso) às linhas das outras duas tabelas. A utilização de LEFT JOIN permite-te juntar a Tabela 2 e a Tabela 3 com a Tabela 1 (e não apenas a Tabela 2 com a Tabela 1 e a Tabela 3 com a Tabela 2).
Também podes adicionar condições como WHERE, AND e ORDER BY:
SELECT * FROM table1 LEFT JOIN table2 ON table2.id = table1.id LEFT JOIN table3 ON table3.id = table1.id WHERE mês = "númeroAqui AND (table2.email IS NOT NULL OR table3.email IS NOT NULL) ORDER BY submitdate DESC
Quantas tabelas podem ser unidas no MySQL?
De acordo com a documentação oficial do MySQL 8.0, o número máximo de tabelas em uma instrução JOIN é 61. No entanto, tem em atenção que as instruções JOIN podem exigir muitos recursos do servidor à medida que o número de tabelas aumenta. Se este for o caso da tua consulta, recomendo vivamente que a dividas em várias consultas para reduzir a carga no servidor.
Tipos de junções no MySQL
Existem diferentes tipos de junções, e cada uma delas pode produzir diferentes conjuntos de dados. Saber como funcionam pode ajudar-te a selecionar a junção mais adequada para obteres o resultado de dados desejado para a tua consulta.
- União interna
- Junta-te à direita
- Junta à esquerda
- União
- União cruzada ou produto cartesiano
- Auto-adesão
- União exterior completa
- Junta natural
As junções SQL estão a dar-te a volta à cabeça?
Simplifica consultas complexas com dicas de assistentes de banco de dados na Comunidade Reddit da Cloudways.
Para demonstrar o comportamento de cada tipo de junção, vamos considerar um cenário em que temos duas tabelas: myguests e messages.
Esquema para a tabela “mensagens
Vamos criar uma tabela chamada“mensagens” para armazenar mensagens juntamente com o ID de utilizador do remetente. Apresentamos-te o esquema da nossa tabela:
CREATE TABLE `messages` ( `id` int(11) NOT NULL, `message` varchar(255) NOT NULL );
Esta tabela servirá de referência para testar cada tipo de união.
União interna
No MySQL, o tipo padrão de junção é uma junção interna. Isto pode ser especificado usando INNER JOIN ou apenas JOIN. Adicionalmente, o MySQL suporta CROSS JOIN. Ao contrário de certos sistemas de base de dados, onde INNER JOIN e CROSS JOIN são conceitos separados, o MySQL combina-os numa única construção.
A estrutura das consultas Inner Join é a seguinte:
SELECT nome_da_coluna(s) FROM table1 INNER JOIN table2 ON table1.column_name=table2.column_name;
Inner Join e simple Join são a mesma coisa. Também podes escrever a tua consulta desta forma:
SELECT nome_da_coluna(s) FROM table1 junta-te a table2 ON table1.column_name=table2.column_name;
Agora vamos buscar o Nome e a mensagem da nossa base de dados utilizando a junção interna. A consulta terá o seguinte aspeto:
$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message De myguests INNER JOIN mensagens ON meusconvidados.id = mensagens.id";
A função CONCAT é utilizada para juntar duas colunas de strings no MySQL. Agora abre o teu index.php, que criámos anteriormente, e copia o seguinte código.
<table>
Nome
Correio eletrónico
Mensagem
Data
!–> <?php inclui ‘crud.php’; $sql = “SELECT CONCAT(myguests.firstname,’ ‘,myguests.lastname) AS name, myguests.email, messages.message De myguests INNER JOIN mensagens ON meusconvidados.id = mensagens.id”; $resultado = selectdata($sql); se($resultado != “zero”) { while($row = $result->fetch_assoc()) { ecoa ”
";
ecoa ”
" . $linha['nome'] . "
“; ecoa ”
" . $linha['email'] . "
“; if($row[‘message’] === null){echo ”
" . 'null'. "
“;} else { echo ”
" . $linha['mensagem']. "
“; } ; ecoa “”; } } mais { ecoa $resultado; } ?> </table> ?>
Quando executas esta página no teu servidor de alojamento web PHP, o resultado será semelhante a este:
Como podes ver claramente, só devolveu os resultados que correspondem a user_id e em que as mensagens não são nulas.
JUNTA À DIREITA
RIGHT JOIN combina tabelas para devolver todos os valores da tabela da direita e os valores correspondentes da tabela da esquerda. Inclui também valores NULL na tabela da esquerda quando não é encontrada nenhuma correspondência.
A estrutura para RIGHT JOIN é:
SELECT nome_da_coluna(s) FROM table1 junta à direita tabela2 ON table1.column_name=table2.column_name;
Supõe que queremos ir buscar o Nome e a mensagem à nossa base de dados, com as mensagens como a tabela da direita e os meus convidados como a tabela da esquerda. A consulta seria:
$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message De myguests junta à direita mensagens ON mensagens.id = meusconvidados.id";
Esta consulta devolve todas as mensagens da tabela messages. Para cada mensagem, também obtém os nomes e e-mails correspondentes da tabela myguests, se disponíveis. Se não houver IDs correspondentes na tabela myguests, são retornados valores NULL para nomes e emails.
Agora abre o index.php e substitui a consulta $sql pelo texto acima. Quando a executares, o teu resultado será:
Se deres uma vista de olhos à tabela de mensagens na captura de ecrã acima, vais reparar em alguns IDs que não correspondem a nenhum ID de utilizador. É por isso que esta consulta devolve um valor nulo nas colunas de nome e e-mail, quando não encontra qualquer correspondência na coluna da esquerda.
JUNTA À ESQUERDA
Os LEFT JOINs juntam as duas tabelas de forma a devolverem todos os valores da tabela da esquerda e os valores correspondentes da tabela da direita, e também devolvem NULL na tabela da direita quando não é encontrada nenhuma correspondência. A estrutura de um LEFT JOIN é:
SELECT nome_da_coluna(s) FROM table1 LEFT JOIN table2 ON table1.column_name=table2.column_name;
Agora vamos recuperar o Nome e a mensagem da nossa base de dados, com a tabela “messages” como a nossa tabela da direita e “myguests” como a nossa tabela da esquerda.
$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message De myguests LEFT JOIN mensagens ON mensagens.id = meusconvidados.id";
Agora abre index.php e substitui a consulta $sql pela consulta acima. Quando a executares, o teu resultado será:
Se olhares para a tabela de mensagens, encontrarás alguns IDs que não correspondem a nenhum ID de utilizador. É por isso que esta consulta devolve NULL na coluna Mensagem e não encontra qualquer correspondência na coluna da direita.
UNIÃO
UNION no MySQL combina várias colunas de diferentes tabelas num único conjunto de resultados. A estrutura de uma consulta UNION para selecionar valores únicos é:
SELECT nome_da_coluna(s) FROM table1 UNIÃO SELECT nome_da_coluna(s) FROM table2;
E para selecionar valores repetidos de colunas:
SELECT nome_da_coluna(s) FROM table1 UNIÃO TUDO SELECT nome_da_coluna(s) FROM table2;
Agora, vamos buscar os IDs das nossas tabelas.
$sql = "SELECT id FROM myguests UNIÃO SELECT id FROM messages";
Agora abre index.php e substitui a consulta $sql pela que está acima. Quando a executares, o teu resultado será:
A consulta obteve todos os IDs únicos encontrados em ambas as tabelas.
Cross JOIN ou Produto Cartesiano
Este tipo de JOIN devolve o produto cartesiano das linhas das tabelas em Join. Devolve uma tabela que consiste em registos que combinam cada linha da primeira tabela com cada linha da segunda tabela.
A sintaxe de Cross JOIN é:
SELECT lista de nomes de colunas da tabela-nome1 JUNÇÃO CRUZADA nome da tabela2;
Agora, vamos mostrar o Cross JOIN usando as tabelas “myguests” e “messages”:
Supõe que queremos listar todas as combinações possíveis de nomes da tabela “myguests” com mensagens da tabela “messages”. Podemos fazer isso usando um Cross JOIN:
SELECT meusconvidados.nome, meusconvidados.apelido, mensagens.mensagem DE meus convidados JUNÇÃO CRUZADA mensagens;
Esta consulta dá-nos uma lista com todas as combinações de um nome da tabela “myguests” e uma mensagem da tabela “messages”.
Auto JOIN
Uma junção própria é um tipo de junção que combina as linhas de uma tabela com ela mesma. Embora possa não ser imediatamente aparente a sua utilidade, na verdade tem muitas aplicações comuns.
Junta-te a nós próprios Sintaxe:
SELECT nome_da_coluna(s) FROM tabela1 T1, tabela1 T2 ONDE estás;
Agora, vamos demonstrar um Self Join usando a tabela “messages”:
Supõe que queremos encontrar pares de mensagens que tenham o mesmo remetente. Podemos conseguir isso usando um Self Join:
SELECT m1.id, m1.sender, m2.id, m2.sender FROM mensagens m1, mensagens m2 WHERE m1.sender = m2.sender E m1.id <> m2.id;
Esta consulta devolverá pares de mensagens com o mesmo remetente, excluindo os casos em que uma mensagem é comparada com ela própria.
As uniões automáticas são particularmente úteis em cenários em que é necessário comparar linhas dentro da mesma tabela, como em estruturas hierárquicas ou ao lidar com relações recursivas.
JUNÇÃO EXTERIOR COMPLETA
O FULL OUTER JOIN devolve todos os registos quando existe uma correspondência nos registos da tabela da esquerda (tabela1) ou da direita (tabela2). Combina essencialmente os resultados de LEFT JOIN e RIGHT JOIN.
Nota: FULL OUTER JOIN pode potencialmente devolver conjuntos de resultados muito grandes!
Sintaxe de união exterior completa:
SELECT nome_da_coluna(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
Segue-se um breve exemplo para ilustrar FULL OUTER JOIN:
Supõe que temos duas tabelas, “empregados” e “departamentos”, e queremos obter todos os registos de ambas as tabelas, incluindo os registos correspondentes e os não correspondentes:
SELECT e.employee_id, e.employee_name, d.department_name FROM empregados e FULL OUTER JOIN departamentos d ON e.department_id = d.department_id;
Esta consulta devolve todos os registos de membros da equipa, incluindo os que não têm um departamento correspondente, e todos os registos de departamentos, incluindo os que não têm colaboradores associados.
JUNÇÃO NATURAL
Natural Join é um tipo de junção em SQL que combina linhas de tabelas com base em colunas com o mesmo nome e tipo de dados. Esta junção só inclui colunas comuns uma vez no conjunto de resultados.
Para utilizar o Natural Join, podes combinar duas ou mais tabelas utilizando a seguinte sintaxe:
SELECT coluna_1, coluna_2, ..., coluna_n FROM table_1 NATURAL JOIN table_2;
Vamos ilustrar a junção natural utilizando a tabela “mensagens”:
Imagina que temos duas tabelas, “mensagens” e “utilizadores”, ambas contendo uma coluna chamada “user_id”. O nosso objetivo é obter todos os registos de ambas as tabelas em que os valores da coluna “user_id” coincidem:
SELECT * DE mensagens Utilizadores NATURAL JOIN;
Esta consulta executará um Natural Join na coluna “user_id”, fundindo linhas de ambas as tabelas onde os valores “user_id” coincidem. O conjunto de dados resultante apresentará a coluna “user_id” apenas uma vez.
Resumo
Quase todas as consultas de dados do mundo real são realizadas utilizando alguma junção em SQL. As junções são como peças de puzzle que nos ajudam a reunir informações de várias fontes.
Neste artigo, falámos sobre as junções SQL e como o MySQL as utiliza para combinar dados de diferentes tabelas.
Ao compreender as junções, serás capaz de lidar com dados sem problemas nas tuas aplicações PHP, independentemente da sua estrutura.
Q1. Que comando SQL podes utilizar para juntar duas tabelas?
Resp: Podes utilizar o comando INNER JOIN em SQL para combinar duas tabelas com base numa coluna comum. Recupera apenas os registos correspondentes de ambas as tabelas, garantindo uma forma estruturada e eficiente de fundir dados relacionados.
Por exemplo:
SELECT encomendas.order_id, clientes.nome_do_cliente FROM encomendas INNER JOIN customers ON orders.customer_id = customers.customer_id;
Q2. Como juntar duas bases de dados no MySQL?
Resp: No MySQL, podes juntar tabelas de duas bases de dados diferentes utilizando a instrução JOIN. A sintaxe segue este formato:
SELECIONA tb_1.*, tb_2.* FROM database_1.table_name_1 tb_1 JOIN base_de_dados_2.nome_da_tabela_2 tb_2 ON tb_1.id = tb_2.id;
Esta consulta recupera registos correspondentes de tabelas em bases de dados separadas, referenciando-as com nome_da_base_de_dados.nome_da_tabela.
Q3. Como podes juntar duas tabelas em SQL com uma relação de muitos para muitos?
Resp: Para unir duas tabelas com uma relação muitos-para-muitos, utiliza uma tabela de união que contém chaves estrangeiras de ambas as tabelas.
Por exemplo, se tiveres eventos e participantes, uma tabela de junção como event_participants liga-os. Depois, utiliza uma INNER JOIN para obter registos relacionados:
SELECT e.nome_do_evento, p.nome_do_participante FROM eventos e JOIN event_participants ep ON e.id = ep.event_id JOIN participantes p ON ep.participant_id = p.id;
Q4. Podes juntar duas tabelas sem qualquer relação?
Resp: Sim, podes. Para juntar duas tabelas sem qualquer relação, podes utilizar CROSS JOIN ou UNION.
- CROSS JOIN emparelha cada linha de uma tabela com cada linha de outra tabela.
- UNION combina os resultados de duas consultas SELECT num único resultado, desde que as tabelas tenham a mesma estrutura.
Ambos os métodos permitem combinar tabelas mesmo sem uma chave partilhada ou relação.
Q5. Podes juntar duas tabelas MySQL com os mesmos nomes de colunas?
Resp: Sim, podes juntar duas tabelas MySQL com os mesmos nomes de colunas. Para evitar confusão, usa aliases para distinguir entre as colunas. Isso garante que as tabelas sejam unidas corretamente sem nenhum problema.
Por exemplo:
SELECT t1.nome_da_coluna AS t1_coluna, t2.nome_da_coluna AS t2_coluna FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id;
Q6. Como juntar 3 tabelas em SQL e MySQL?
Resp: Para juntar três tabelas em SQL ou MySQL, pode utilizar múltiplos JOINs. Simplesmente junta as duas primeiras tabelas e, em seguida, junta a terceira tabela ao resultado da primeira junção. Não precisas necessariamente de subconsultas para isto, uma vez que podes juntar diretamente todas as tabelas numa única consulta.
Por exemplo:
SELECT t1.column1, t2.column2, t3.column3 FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id JOIN table3 t3 ON t2.id = t3.id;
Q7. Como é que posso juntar duas tabelas em SQL sem joins?
Resp: Podes juntar duas tabelas em SQL sem utilizar a palavra-chave JOIN, listando ambas as tabelas na cláusula FROM, separadas por uma vírgula. Isto é conhecido como uma junção implícita.
Por exemplo:
SELECT * FROM TableA a, TableB b WHERE a.id = b.id;
Embora este método funcione, é geralmente melhor utilizar instruções JOIN explícitas para maior clareza e desempenho.
Q8. O que é uma junção no MySQL?
Resp: Uma junção no MySQL combina linhas de duas ou mais tabelas com base numa coluna relacionada, frequentemente uma chave estrangeira. Permite-lhe obter dados de várias tabelas numa única consulta especificando como as tabelas estão ligadas através destas chaves.
Q9. A junção é o mesmo que a junção interna?
Resp: Sim, no MySQL, JOIN é o mesmo que INNER JOIN. Ambos retornam registros que têm valores correspondentes em ambas as tabelas que estão sendo unidas. Se não for encontrada nenhuma correspondência, nenhum registo é devolvido.
Q10. Como juntar duas tabelas no MySQL?
Resp: Para juntar duas tabelas no MySQL, utiliza a cláusula JOIN em combinação com a palavra-chave ON para especificar a condição de correspondência. Por exemplo:
SELECT colunas FROM table1 junta-te a table2 ON table1.common_column = table2.common_column;
Q11. Como é que podes fundir duas tabelas no MySQL?
Resp: Para fundir duas tabelas no MySQL, utiliza o operador UNION. Este combina linhas de ambas as tabelas num único resultado. Certifica-se de que as tabelas têm o mesmo número de colunas e tipos de dados compatíveis.
Exemplo:
SELECT * FROM table1 UNIÃO SELECT * FROM table2;
Nota: Se quiseres incluir todas as linhas duplicadas, utiliza UNION ALL em vez de UNION.
Shahzeb Ahmed
Um criativo de dia (com uma chávena de chá) e um criativo de noite. Ahmad Kamran é um escritor de conteúdos sazonais e Executivo de Marketing Sénior na Cloudways. Podes encontrá-lo na sua secretária a escrever, a criar estratégias ou a jogar jogos. E, caso não o encontres aqui, ele estará nas montanhas ou à beira do rio.