O que é um SQL JOIN
e quais são os diferentes tipos?
O SQL JOIN
é um método para recuperar dados de duas ou mais tabelas de banco de dados.
Há um total de cinco JOIN
s. Eles são :
1. JOIN or INNER JOIN
2. OUTER JOIN
2.1 LEFT OUTER JOIN or LEFT JOIN
2.2 RIGHT OUTER JOIN or RIGHT JOIN
2.3 FULL OUTER JOIN or FULL JOIN
3. NATURAL JOIN
4. CROSS JOIN
5. SELF JOIN
Neste tipo de `JOIN', obtemos todos os registros que correspondem à condição em ambas as tabelas, e os registros em ambas as tabelas que não correspondem não são relatados.
Em outras palavras, INNER JOIN
é baseado no simples fato de que: APENAS as entradas correspondentes em AMBOS as tabelas DEVEM ser listadas.
Note que um JUNTAR
sem outras palavras-chave JUNTAR
(como INNER
, OUTER
, LEFT
, etc.) é um INNER JOIN
. Em outras palavras, JUNTAR
é
um açúcar sintáctico para INNER JOIN
(ver: https://stackoverflow.com/questions/565620/difference-between-join-and-inner-join).
"OUTER JOIN" recupera
Qualquer um dos dois, as linhas combinadas de uma tabela e todas as linhas da outra tabela Ou.., todas as filas em todas as tabelas (não importa se há ou não uma correspondência).
Existem três tipos de Outer Join :
**2.1 JOGO ESQUERDA ou JOGO ESQUERDA***
Esta união retorna todas as linhas da tabela da esquerda em conjunto com as linhas correspondentes da
Mesa da direita. Se não houver colunas correspondentes na tabela da direita, ela retorna os valores NULL
.
**2.2 JUNTAR À DIREITA ou JUNTAR À DIREITA***
Este JOIN
devolve todas as linhas da tabela da direita em conjunto com as linhas correspondentes do
Mesa da esquerda. Se não houver colunas correspondentes na tabela da esquerda, ela retorna os valores NULL
.
**2.3 FULL OUTER JOIN ou FULL OUTER JOIN***
Este 'JOIN' combina 'LEFT OUTER JOIN' e 'RIGHT OUTER JOIN'. Ele retorna linhas de qualquer uma das tabelas quando as condições são cumpridas e retorna o valor NULL
quando não há correspondência.
Em outras palavras, 'OUTER JOIN' é baseado no fato de que: SOMENTE as entradas correspondentes em UMA das tabelas (DIREITA ou ESQUERDA) ou AMBOS das tabelas(COMPLETO) DEVEM ser listadas.
Note that `OUTER JOIN` is a loosened form of `INNER JOIN`.
Baseia-se nas duas condições :
JOIN
é feito em todas as colunas com o mesmo nome para igualdade.Isto parece ser mais de natureza teórica e como resultado (provavelmente) a maioria dos SGBD don'nem se preocupe em apoiar isto.
É o produto cartesiano das duas mesas envolvidas. O resultado de uma CROSS JOIN
não fará sentido.
na maioria das situações. Além disso, nós ganhamos'não precisamos disso em absoluto (ou precisamos o mínimo, para ser precisos).
Não é uma forma diferente de JUNTAR
, mas sim uma JUNTAR
(INNER
, OUTER
, etc.) de uma mesa para si mesma.
Dependendo do operador utilizado para uma cláusula JOIN
, pode haver dois tipos de JOIN
s. Eles são
Equi JOIN
Theta JOIN
Para qualquer tipo de JOIN
(INNER
, OUTER
, etc), se utilizarmos SOMENTE o operador de igualdade (=), então dizemos que
o JUNTAR
é um EQUI JOIN
.
Isto é o mesmo que EQUI JOIN
mas permite a todos os outros operadores como >, <, >= etc.
Muitos consideram tanto o
EQUI JOIN
como o ThetaJOIN
semelhante aoINNER
,OUTER
. etcJOIN
s. Mas eu acredito firmemente que é um erro e faz o ideias vagas. PorqueINNER JOIN
,OUTER JOIN
etc. estão todos ligados a as tabelas e seus dados enquantoEQUI JOIN
eTHETA JOIN
são apenas ligados com os operadores que usamos no primeiro.Mais uma vez, há muitos que consideram o
NATURAL JOIN
como uma espécie de " peculiar"EQUI JOIN
. Na verdade, é verdade, por causa do primeiro condição que mencionei paraNATURAL JOIN
. No entanto, nós não'não temos que restrinja isso simplesmente aNATURAL JOIN
s sozinho. 'INNER JOIN', 'OUTER JOIN', 'OUTER JOIN', 'NATURAL JOIN'. etc. poderia ser um "EQUI JOIN" também.
Definição:
Os JOINS são uma forma de consultar os dados que se combinam a partir de várias tabelas simultaneamente.
Preocupação com RDBMS há 5 tipos de adesões:
Equi-Join: Combina registros comuns de duas tabelas baseadas na condição de igualdade. Tecnicamente, a união feita usando o operador de igualdade (=) para comparar valores da chave primária de uma tabela e valores da chave externa de outra tabela, portanto, o conjunto de resultados inclui registros comuns de ambas as tabelas. Para implementação, ver INNER-JOIN.
Natural-Join: É uma versão melhorada do Equi-Join, na qual SELECT a operação omite a coluna duplicada. Para implementação ver INNER-JOIN
Non-Equi-Join: É o inverso de Equi-join em que a condição de junção é diferente de operador igual(=) e.g., !=, <=, >=, >, < ou BETWEEN etc. Para implementação ver INNER-JOIN.
Selff-Join:: Um comportamento personalizado de join onde uma tabela combinada consigo mesma; Isto é normalmente necessário para consultar tabelas de auto-referência (ou entidade Unary relationship entity). Para implementação ver INNER-JOINs.
Produto cartesiano: Combina todos os registos de ambas as tabelas sem qualquer condição. Tecnicamente, retorna o conjunto de resultados de uma consulta sem WHERE-Clause.
De acordo com a preocupação e avanço do SQL, existem 3 tipos de junções e todas as junções RDBMS podem ser conseguidas utilizando estes tipos de junções.
INNER-JOIN: Funde(ou combina) linhas combinadas de duas tabelas. A correspondência é feita com base em colunas comuns de tabelas e na sua operação de comparação. Se condição baseada na igualdade, então: EQUI-JOIN realizado, caso contrário não EQUI-Join.
OUTER-JOIN: Funde (ou combina) linhas combinadas de duas tabelas e linhas incomparáveis com valores NULL. No entanto, pode personalizar a selecção de linhas sem correspondência, por exemplo, seleccionando linha sem correspondência da primeira tabela ou da segunda tabela por subtipos: LEFT OUTER JOIN e RIGHT OUTER JOIN.
2.1. LEFT Outer JOIN (a.k.a, LEFT-JOIN): Devolve linhas combinadas de duas tabelas e sem comparação da tabela ESQUERDA (ou seja, primeira tabela) apenas.
2.2. *JUNTAR À DIREITA** (a.k.a, RIGHT-JOIN): Devolve filas combinadas de duas tabelas e só da tabela DIREITA.
2.3. FULL OUTER JOIN (a.k.a OUTER JOIN): Devoluções combinadas e inigualáveis de ambas as tabelas.
CROSS-JOIN: Esta join não se funde/combina, mas executa produto cartesiano.
Nota: A auto-junção pode ser alcançada tanto pelo INNER-JOIN, OUTER-JOIN e CROSS-JOIN com base na exigência, mas a tabela deve se unir a si mesma.
**1.1: INNER-JOIN: Implementação Equi-join***
SELECT *
FROM Table1 A
INNER JOIN Table2 B ON A.<Primary-Key> =B.<Foreign-Key>;
**1.2: INNER-JOIN: Implementação de Natural-JOIN***
Select A.*, B.Col1, B.Col2 --But no B.ForeignKeyColumn in Select
FROM Table1 A
INNER JOIN Table2 B On A.Pk = B.Fk;
**1.3: INNER-JOIN com implementação NÃO-Equi-juntar***
Select *
FROM Table1 A INNER JOIN Table2 B On A.Pk <= B.Fk;
**1.4: INNER-JOIN com SELF-JOIN***
Select *
FROM Table1 A1 INNER JOIN Table1 A2 On A1.Pk = A2.Fk;
2.1: Junção externa (união externa completa)
Select *
FROM Table1 A FULL OUTER JOIN Table2 B On A.Pk = B.Fk;
2.2: JOGO ESQUERDA
Select *
FROM Table1 A LEFT OUTER JOIN Table2 B On A.Pk = B.Fk;
2.3: JUNTO À DIREITA
Select *
FROM Table1 A RIGHT OUTER JOIN Table2 B On A.Pk = B.Fk;
3.1: CROSS JOIN
Select *
FROM TableA CROSS JOIN TableB;
**3.2: CROSS JOIN-Self JOIN***
Select *
FROM Table1 A1 CROSS JOIN Table1 A2;
//OR//
Select *
FROM Table1 A1,Table1 A2;