Na parte anterior desta série MySQL, demonstrei como você pode buscar dados usando cláusulas MySQL. Nesta parte, aprenderemos sobre a função Joins no MySQL, por que eles são usados e como usá-los. Vamos começar.
Como posso vincular duas tabelas no MySQL
As junções do MySQL permitem acessar dados de várias tabelas. Um MySQL Join é executado sempre que duas ou mais tabelas são unidas em uma instrução SQL. MySQL Joins incluem:o MySQL Inner Join (também conhecido como Simple Join), o MySQL Left Outer Join (também chamado de Left Join, retorna os registros correspondentes da tabela esquerda), o Right Join (retorna os registros correspondentes da tabela à esquerda). tabela à direita) e o Full Join (retorna os registros correspondentes de todas as tabelas). Usando MySQL JOINs, você poderá juntar mais de duas tabelas.
No MySQL, o Inner Join é o Join Padrão. Em determinadas palavras-chave nesse ponto, ele escolhe todas as linhas de ambas as tabelas, desde que haja uma coordenada entre as colunas em ambas as tabelas.
Ao contrário do SQL, o MySQL não considera o Outer Join como um tipo de Join separado. Para obter os mesmos resultados que o Outer Join, você precisa unir o Left Outer Join e o Right Outer Join.
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, observe que as instruções JOIN podem exigir muitos recursos do servidor à medida que o número de tabelas aumenta. Se esse for o caso da sua consulta, recomendo dividi-la em várias consultas para reduzir a carga no servidor.
Vamos começar adicionando uma nova tabela em nosso banco de dados que conterá a mensagem junto com o ID do usuário que enviou esta mensagem, nós a chamaremos de mensagens. O esquema da nossa tabela é:
CRIAR TABELA `mensagens` (
`id` int(11) NOT NULL,
`message` varchar(255) NÃO NULO
)
Usaremos a mesma função selectdata que criamos em nosso crud.php Arquivo. Agora vamos começar juntando essas duas tabelas. Você também pode preencher sua mesa para praticar.
Pare de perder tempo com servidores
A Cloudways cuida do gerenciamento de servidores para você, para que você possa se concentrar na criação de ótimos aplicativos e manter seus clientes satisfeitos.
Comece grátis
Inner Join
Inner Join junta a tabela de tal forma que mostra apenas os resultados que correspondem à condição fornecida e oculta os outros. A estrutura das consultas Inner Join são:
SELECT column_name(s)
DA tabela1
INNER JOIN tabela2
ON table1.column_name=table2.column_name;
Inner Join e simple join são iguais. Você também pode escrever sua consulta assim:
SELECT column_name(s)
DA tabela1
JOIN table2
ON table1.column_name=table2.column_name;
Agora vamos buscar o nome e a mensagem do nosso banco de dados usando o Inner join. A consulta será assim
$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests INNER JOIN messages ON myguests.id = messages.id";
O CONCAT A função é usada para unir duas colunas de strings no MySQL. Agora abra seu index.php que criamos anteriormente copie o seguinte código nele.
<table> <tr> <td> Name</td> <td> Email</td> <td> Message</td> <!-- <td> Message</td> <td> Date</td>!--> </tr> <?php include 'crud.php'; $sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests INNER JOIN messages ON myguests.id = messages.id"; $result = selectdata($sql); if($result != "zero") { while($row = $result->fetch_assoc()) { echo "<tr>"; echo "<td>" . $row['name'] . "</td>"; echo "<td>" . $row['email'] . "</td>"; if($row['message'] === null){echo "<td>" . 'null'. "</td>";} else { echo "<td>" . $row['message']. "</td>"; } ; echo "</tr>"; } } else { echo $result; } ?> </table> ?>
Quando você executar esta página em seu servidor de hospedagem PHP, seu resultado ficará assim:
Como você pode ver claramente, ele retornou apenas os resultados que correspondem a user_id e onde mensagens não é nulo.
JUNÇÃO À DIREITA
RIGHT JOIN une as duas tabelas de tal forma que retorna todo o valor da direita e o valor correspondente das tabelas da esquerda e também retorna nulo na tabela da esquerda quando não há correspondência encontrada. A estrutura para RIGHT JOIN é:
SELECT column_name(s)
DA tabela1
RIGHT JOIN tabela2
ON table1.column_name=table2.column_name;
Agora vamos buscar o Nome e a mensagem do nosso banco de dados fazendo mensagens em nossa tabela à direita e meus convidados na nossa mesa esquerda.
$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests RIGHT JOIN messages ON messages.id = myguests.id";
Agora abra index.php e substitua $sql consulta com o acima. Ao executá-lo, seu resultado será:
Se você der uma olhada nas mensagens tabela, você verá alguns IDs que não corresponderão a nenhum ID de usuário, é por isso que essa consulta retorna nulo na coluna nome e e-mail, onde não encontrará nenhuma correspondência na coluna esquerda.
LEFT JOIN
LEFT Joins une as duas tabelas de tal forma que retorna todo o valor da esquerda e o valor correspondente das tabelas da direita e também retorna nulo na tabela da direita quando não há correspondência encontrada. A estrutura para LEFT JOIN é:
SELECT column_name(s)
DA tabela1
LEFT JOIN tabela2
ON table1.column_name=table2.column_name;
Agora vamos buscar o Nome e a mensagem do nosso banco de dados fazendo mensagens em nossa mesa certa e meus convidados em nossa mesa esquerda.
$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests LEFT JOIN messages ON messages.id = myguests.id";
Agora abra index.php e consulte no lugar de $sql com o acima. Ao executá-lo, seu resultado será:
Se você der uma olhada nas mensagens tabela, você encontrará alguns IDs que não corresponderão a nenhum ID de usuário, por isso esta consulta retorna nulo na coluna Mensagem, onde não encontrará nenhuma correspondência na coluna direita.
UNIÃO
UNION no MySQL é usado para unir várias colunas de uma tabela diferente em uma única coluna. A estrutura da consulta UNION para selecionar valores exclusivos é:
SELECT column_name(s) FROM table1
UNIÃO
SELECT column_name(s) FROM table2;
E para selecionar valores repetidos de colunas é:
SELECT column_name(s) FROM table1
UNIÃO TODOS
SELECT column_name(s) FROM table2;
Agora vamos buscar os IDs de nossas tabelas.
$sql = "SELECT id FROM myguests UNION SELECT id FROM messages";
Agora abra index.php e substitua $sql consulta com o acima. Ao executá-lo, seu resultado será:
A consulta buscou todos os IDs exclusivos encontrados em ambas as tabelas.
Cross JOIN ou Produto Cartesiano
Esse tipo de JOIN retorna o produto cartesiano das linhas das tabelas em Join. Ele retornará uma tabela que consiste em registros que combinam cada linha da primeira tabela com cada linha da segunda tabela.
A sintaxe Cross JOIN é,
SELECT column-name-list from table-name1 CROSS JOIN table-name2;
Autenticação
Um self JOIN é uma junção regular, mas a tabela é unida a ela mesma.
SELECT column_name(s) FROM table1 T1, table1 T2 WHERE condition;
JUNÇÃO EXTERNA COMPLETA
A palavra-chave FULL OUTER JOIN retorna todos os registros quando há uma correspondência nos registros da tabela esquerda (tabela1) ou direita (tabela2).
Nota:FULL OUTER JOIN pode potencialmente retornar conjuntos de resultados muito grandes!
SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
Juntar várias tabelas
Nos blogs anteriores, você aprendeu como unir duas tabelas usando diferentes consultas de junção SQL. Mas se você estiver trabalhando em um grande aplicativo, ou seja, construindo uma loja de comércio eletrônico e criando várias tabelas nela, como clientes, pedidos e produtos, a complexidade na junção de tabelas pode definitivamente surgir. Para resolver isso, você precisa obter todos os produtos encomendados por clientes específicos. O esquema permanece o mesmo, então não estou declarando aqui. Vejamos a consulta:
SELECT * FROM table1 LEFT JOIN table2 ON table2.id = table1.id LEFT JOIN table3 ON table3.id = table1.id
Primeiro, juntamos a tabela 1 e a tabela 2, que entregam uma tabela temporária com dados combinados da tabela1 e da tabela2, que nesse ponto é unida à tabela3. Esta equação pode ser estendida para mais de 3 tabelas para N tabelas, você só precisa ter certeza de que a consulta SQL deve ter a instrução de junção N-1 em organizar para unir N tabelas.
A consulta acima permitirá que você combine as linhas da tabela1 (em qualquer caso) com as linhas de outras duas tabelas. Usar LEFT JOIN permite unir tabela2 e tabela3 com tabela1 (não apenas tabela2 com tabela1 e tabela3 com tabela2).
Você também pode adicionar condições como WHERE, AND e ORDERBY
SELECT * FROM table1 LEFT JOIN table2 ON table2.id = table1.id LEFT JOIN table3 ON table3.id = table2.id WHERE month = 'numberHere' AND (table2.email IS NOT NULL OR table3.email IS NOT NULL) ORDER BY submitdate DESC
Conclusão:
Neste tutorial, aprendemos sobre junções que são muito usadas em bancos de dados relacionais. As junções não são usadas apenas para duas tabelas e você pode unir mais de duas tabelas usando a mesma técnica. Na oitava e última parte desta série sobre MySQL, discutirei como usar expressões regulares (REGEX) para buscar e classificar dados no MySQL. Para isso, assine a newsletter do nosso blog e você também pode se inscrever em nosso Managed PHP Stack e começar a testar esses tutoriais em nossos servidores otimizados para PHP.
perguntas frequentes
Q. Como faço para unir duas tabelas?
Resposta: A junção de duas tabelas no SQL pode ser feita de quatro maneiras principais:Inner Join (retorna linhas com colunas correspondentes), Left Join (TODOS os registros na tabela à esquerda e registros correspondentes na tabela à direita), Right Join (TODOS os registros na tabela à direita) e registros correspondentes na tabela à esquerda) e União (remove duplicatas).
Q. Qual comando SQL você pode usar para unir duas tabelas?
Resposta: Duas tabelas podem ser unidas usando a instrução INNER JOIN que retorna registros correspondentes de ambas as tabelas.
Q. Como faço para unir duas tabelas no SQL sem junções?
Resposta: Você pode usar a seguinte instrução para unir tabelas sem realmente usar a instrução JOIN
SELECT * FROM TableA a, TableB b