20th Jul 2022 4 minutos de leitura SQL JOIN explicado Patrycja Dybka join Índice JUNÇÃO CROSS INNER JOIN JOGOS DE FORA Entradas baseadas em operadores JUNTURA NATURAL Um monte de links úteis: Um SQL JOIN é um método de recuperação de dados de duas ou mais tabelas de banco de dados. Este artigo apresenta uma visão geral básica de como serão os dados de um determinado SQL join. Uma maneira popular de entender os SQL joins é visualizá-los usando diagramas Venn, de modo que cada exemplo tenha o diagrama Venn correspondente, a declaração apropriada SELECT e a tabela de resultados. Existem alguns tipos principais de joins SQL: JOINO INNER EXTERIOR [ESQUERDA | DIREITA | COMPLETA] UNIR NATURAL JOIN CROSS JOIN Distinguimos a implementação destas uniões com base nos operadores de uniões: equi e theta, que será descrita mais tarde. Para os propósitos deste artigo, vamos discutir as uniões usando um exemplo simples. Suponhamos que temos duas tabelas básicas, TableA e TableB, que são preenchidas com alguns dados de exemplo. Como vamos unir as tabelas na coluna name, distinguimos as linhas com o mesmo nome destacando-as em vermelho. Nas seções seguintes, veremos o que acontece com estes dados quando diferentes tipos de junções são implementadas. JUNÇÃO CROSS Um CROSS JOIN é um produto cartesiano da TableA e TableB. Cada linha da TableA é igualada com cada linha da TableB; é por isso que uma CROSS JOIN não faz sentido na maioria das situações. SELECT * FROM tableA CROSS JOIN tableB; TableA e TableB contêm 4 fileiras. A tabela resultante terá 4 * 4 = 16 fileiras e terá a seguinte aparência: INNER JOIN Um INNER JOIN funde SOMENTE as linhas correspondentes em AMBOS as tabelas. Um JOIN sem nenhuma outra palavra-chave JOIN (como INNER, OUTER, LEFT, etc.) é um INNER JOIN. Os resultados são encontrados na área de sobreposição. SELECT * FROM tableA INNER JOIN tableB ON tableA.name = tableB.name A tabela resultante será a seguinte: JOGOS DE FORA FULL OUTER JOIN devolve filas iguais e incomparáveis de ambas as tabelas (é uma união de ambas). Se não houver correspondência, o lado que falta conterá nulo. SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name; A tabela resultante será a seguinte: A LEFT OUTER JOIN retorna todas as linhas da tabela da esquerda (TableA) com as linhas correspondentes da tabela da direita (TableB) ou nula - se não houver correspondência na tabela da direita. Os resultados podem ser encontrados em todo o círculo da esquerda: SELECT * FROM TableA LEFT OUTER JOIN TableB ON tableA.name = tableB.name; A tabela resultante será a seguinte: Uma JUNTA DE OUTRA DIREITA retorna todas as linhas da tabela da direita (TableB) com as linhas correspondentes da tabela da esquerda (TableA) ou nula - se não houver correspondência na tabela da esquerda. Os resultados podem ser encontrados em todo o círculo da direita: SELECT * FROM tableA RIGHT OUTER JOIN tableB ON tableA.name = tableB.name A tabela resultante será a seguinte: Entradas baseadas em operadores Implementação Equi-join Este JOIN é feito usando o operador de igualdade (=) para comparar valores da chave primária de uma tabela e os valores da chave externa de outra tabela. SELECT * FROM TableA INNER/OUTER JOIN TableB ON TableA.PK =TableB.Fk; Implementação de Theta-join (não-equi) Isto é o mesmo que o equi JOIN mas permite a todos os outros operadores como >, <, >= etc. SELECT * FROM TableA INNER/OUTER JOIN TableB ON tableA.Pk <= tableB.Fk; Implementação auto-integrada Este tipo de JUNTO é normalmente usado no caso de um tipo de relação unária, onde uma tabela é combinada com ela mesma. SELECT * FROM TableA A1 JOIN TableA A2 ON A1.Pk = A2.Fk; JUNTURA NATURAL Uma adesão NATURAL é um tipo de adesão EQUI. Não há necessidade de usar uma cláusula ON. As colunas com o mesmo nome nas tabelas associadas aparecem apenas uma vez. SELECT * FROM tableA NATURAL JOIN tableB Através da manipulação de palavras-chave, podemos excluir dados específicos. Um OUTER EXCLUDING JOIN retorna todos os registros na TabelaA e todos os registros na TabelaB que não correspondem. SELECT * FROM tableA FULL OUTER JOIN tableB ON tableA.name = tableB.name WHERE tableA.name IS NULL OR tableB.name IS NULL A tabela resultante será a seguinte: Um LEFT EXCLUDING JOIN devolve todos os registros na TabelaA que não correspondem a nenhum registro na TabelaB. SELECT * FROM tableA LEFT JOIN tableB ON tableA.name = tableB.name WHERE tableB.name IS NULL A tabela resultante será a seguinte: A RIGHT EXCLUDING JOIN retorna todos os registros na TabelaB que não correspondem a nenhum registro na TabelaA. SELECT * FROM tableA RIGHT JOIN tableB ON tableA.name = tableB.name WHERE tableA.name IS NULL A tabela resultante será a seguinte: Um monte de links úteis: Codificação do horror: Uma explicação visual de sql joins Projeto de código: Uma representação visual das uniões do sql SQL Rockstar: Exemplos de união SQL do mundo real Tags: join