Pergunta

Também como fazer LEFT JOIN, RIGHT JOIN e FULL JOIN se encaixa?

Foi útil?

Solução

Supondo que você está ingressando em colunas sem duplicados, o que é muito comum o caso de:

  • Uma associação interna de A e B dá o resultado de Uma interseção B, i.e.a parte interna de um Diagrama de Venn intersecção.

  • Uma associação externa de A e B fornece os resultados de Uma união B, i.e.as partes externas de um diagrama de Venn da união.

Exemplos

Suponha que você tem duas tabelas, com uma única coluna, cada, e os dados da seguinte forma:

A    B
-    -
1    3
2    4
3    5
4    6

Note que (1,2) são exclusivas para Um, (3,4) são comuns, e (5,6) são exclusivos para B.

Inner join

Um inner join usando o equivalente a consultas dá a intersecção das duas tabelas, i.é.as duas linhas que eles têm em comum.

select * from a INNER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a = b.b;

a | b
--+--
3 | 3
4 | 4

Left outer join

Uma associação externa à esquerda vai lhe dar todas as linhas em Um, além de qualquer comuns de linhas de B.

select * from a LEFT OUTER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a = b.b(+);

a |  b
--+-----
1 | null
2 | null
3 |    3
4 |    4

Right outer join

Uma associação externa direita vai lhe dar todas as linhas de B, mais comum linhas de A.

select * from a RIGHT OUTER JOIN b on a.a = b.b;
select a.*, b.*  from a,b where a.a(+) = b.b;

a    |  b
-----+----
3    |  3
4    |  4
null |  5
null |  6

Full outer join

Uma associação externa completa irá dar-lhe a união de A e B, i.e.de todas as linhas e todas as linhas de B.Se algo que não tem um correspondente de referência em B e, em seguida, a porção B é nulo, e vice-versa.

select * from a FULL OUTER JOIN b on a.a = b.b;

 a   |  b
-----+-----
   1 | null
   2 | null
   3 |    3
   4 |    4
null |    6
null |    5

Outras dicas

Os diagramas de Venn realmente não é para mim.

Eles não mostram qualquer distinção entre um cross join e um inner join, por exemplo, ou, mais geralmente, mostrar qualquer distinção entre os diferentes tipos de predicado de associação ou fornecer um quadro de raciocínio sobre como irão operar.

Não há nenhum substituto para a compreensão da lógica de processamento e é relativamente simples de entender de qualquer maneira.

  1. Imagine uma associação cruzada.
  2. Avaliar o on cláusula contra todas as linhas a partir do passo 1, mantendo aqueles em que o predicado avalia a true
  3. (Para associações externas apenas) adicionar de volta em quaisquer linhas exteriores que foram perdidos no passo 2.

(NB:Na prática, o otimizador de consulta pode encontrar formas mais eficientes de executar a consulta que o puramente lógico descrição acima, mas o resultado final deve ser o mesmo)

Eu vou começar com uma versão animada de um full outer join.Mais explicações a seguir.

enter image description here


Explicação

Tabelas De Origem

enter link description here

Primeiro começar com uma CROSS JOIN (AKA Produto Cartesiano).Este não tem um ON cláusula e simplesmente retorna, para cada combinação de linhas das duas tabelas.

SELECIONE A. Cor, B. de Cor a PARTIR de UMA ASSOCIAÇÃO entre B

enter link description here

Associações internas e Externas de um" cláusula do predicado.

  • Inner Join. Avaliar a condição "ON" cláusula para todas as linhas na cruz resultado de associação.Se verdadeiro retorno associado linha.Caso contrário, descarte-o.
  • Left Outer Join. Mesmo como inner join, em seguida, para as linhas na tabela da esquerda que não corresponde a nada saída destes com valores NULOS para a direita nas colunas da tabela.
  • Right Outer Join. Mesmo como inner join, em seguida, para as linhas na tabela à direita que não corresponde a nada saída destes com valores NULOS para a esquerda colunas da tabela.
  • Full Outer Join. Mesmo como inner join, em seguida, preservar a esquerda não correspondido linhas como na associação externa esquerda e direita não correspondência de linhas como por right outer join.

Alguns exemplos

SELECIONE A. Cor, B. de Cor a PARTIR de UM INNER JOIN B EM A. Cor = Cor B.

O acima é o clássico equi join.

Inner Join

Versão Animada

enter image description here

SELECIONE A. Cor, B. de Cor a PARTIR de UM INNER JOIN B EM A. Cor, NÃO NA ('Verde','Azul')

O inner join condição não precisa ser, necessariamente, uma igualdade de condição e que não necessita de colunas de referência de ambos (ou mesmo ambos) das tabelas.Avaliação A.Colour NOT IN ('Green','Blue') em cada linha do cross join retorna.

inner 2

SELECIONE A. Cor, B. de Cor a PARTIR de UM INNER JOIN B 1 =1

A juntar a condição for avaliada como true para todas as linhas na associação entre resultado, então isso é exatamente o mesmo como uma associação cruzada.Eu não repetir a imagem de 16 linhas novamente.

SELECIONE A. Cor, B. de Cor a PARTIR de UMA ASSOCIAÇÃO EXTERNA à ESQUERDA de B EM A. Cor = Cor B.

Associações externas são logicamente avaliados da mesma forma como associações internas, exceto que, se uma linha da tabela à esquerda (para o left join) não ingressar com as linhas da mão direita tabela a tudo o que é preservado no resultado com NULL valores para a mão direita colunas.

LOJ

SELECIONE A. Cor, B. de Cor a PARTIR de UMA ASSOCIAÇÃO EXTERNA à ESQUERDA de B EM A. Cor = B. de Cor ONDE a B. Cor É NULO

Isso limita o resultado anterior para retornar somente as linhas onde B.Colour IS NULL.Neste caso específico, serão as linhas que foram preservados como eles não tinham o jogo na mão direita da tabela e a consulta retorna o único vermelho linha não correspondido na tabela B.Isso é conhecido como um anti semi join.

É importante selecionar uma coluna para o IS NULL teste que é ou não anulável ou para o qual a condição de associação garante que qualquer NULL os valores serão excluídos, para que este padrão para funcionar corretamente e evitar apenas trazer de volta linhas que acontecer de ter um NULL valor para a coluna, além da onu de correspondência de linhas.

loj is null

SELECIONE A. Cor, B. de Cor a PARTIR de UMA ASSOCIAÇÃO EXTERNA à DIREITA de B EM A. Cor = Cor B.

Direito associações externas que actuam de forma semelhante à esquerda junções externas, exceto preservam a não correspondência de linhas da tabela à direita e nulo estender a mão esquerda colunas.

ROJ

SELECIONE A. Cor, B. Cor DE UMA ASSOCIAÇÃO EXTERNA COMPLETA de B EM A. Cor = Cor B.

Full outer joins combinar o comportamento da esquerda e da direita de associações e preservar a não correspondência de linhas de esquerda e direita tabelas.

FOJ

SELECIONE A. Cor, B. Cor DE UMA ASSOCIAÇÃO EXTERNA COMPLETA B 1 = 0

Não há linhas em cruz junte-se corresponder o 1=0 predicado.Todas as linhas de ambos os lados são preservados utilizando-se normal exterior de regras de associação com NULL nas colunas da tabela no outro lado.

FOJ 2

SELECT COALESCE(A. de Cor, B., de Cor COMO a Cor DE UMA ASSOCIAÇÃO EXTERNA COMPLETA B 1 = 0

Com uma pequena alteração para a consulta anterior poderia simular um UNION ALL das duas tabelas.

UNION ALL

SELECIONE A. Cor, B. de Cor a PARTIR de UMA ASSOCIAÇÃO EXTERNA à ESQUERDA de B EM A. Cor = B. de Cor ONDE a B. Cor = 'Verde'

Observe que o WHERE cláusula (se presente) logicamente é executado após a associação.Um erro comum é executar uma associação externa à esquerda e, em seguida, incluir uma cláusula WHERE com uma condição na tabela da direita, o que acaba excluindo a não correspondência de linhas.Acima acaba de realizar o outer join...

LOJ

...E, em seguida, o "Onde" cláusula é executado. NULL= 'Green' não avaliar para true, para a linha preservada pela associação externa acaba descartado (junto com o azul) efetivamente converter a associação de volta a um interior.

LOJtoInner

Se a intenção era incluir apenas as linhas de B, onde a Cor é Verde e todas as linhas a partir de Um independentemente a sintaxe correta seria

SELECIONE A. Cor, B. de Cor a PARTIR de UMA ASSOCIAÇÃO EXTERNA à ESQUERDA de B EM A. Cor = B. Cor E B. Cor = 'Verde'

enter image description here

SQL Violino

Veja estes exemplos executar ao vivo no SQLFiddle.com.

Associações são utilizados para combinar os dados de duas tabelas, com o resultado sendo uma nova tabela temporária.Associações são realizadas com base em algo chamado de um predicado, que especifica a condição para usar, a fim de realizar uma união.A diferença entre um inner join e outer join é que um inner join retorna somente as linhas que correspondam efectivamente com base no predicado de associação.Vamos considerar o Empregado e o Local de tabela:

enter image description here

Inner Join:- Inner join cria uma nova tabela de resultados através da combinação de valores de colunas das duas tabelas (Funcionário e Localização baseado na associação de predicado.A consulta compara cada linha de Funcionário com cada linha de Localização para encontrar todos os pares de linhas que satisfazem a juntar-predicado.Quando a associação de predicado está satisfeito por correspondência de valores não NULOS, valores de coluna para cada par correspondente de linhas de Funcionário e Localização são combinados em uma linha do resultado.Aqui está o que o SQL para uma associação interna terá a seguinte aparência:

select  * from employee inner join location on employee.empID = location.empID
OR
select  * from employee, location where employee.empID = location.empID

Agora, aqui está o resultado da execução do SQL seria:enter image description here enter image description here

Outer Join:- Uma associação externa não exigem cada registro de duas tabelas associadas a ter um registo correspondente.A tabela associada mantém cada registro, mesmo se nenhum outro registro correspondente existe.Associações externas subdividir ainda mais em left outer joins e right outer joins, dependendo de qual tabela de linhas são mantidas (esquerda ou direita).

Left Outer Join:- O resultado de uma associação externa esquerda (ou simplesmente left join) para tabelas Funcionário e Localização sempre contém todos os registros de "esquerda" (tabelaFuncionário), mesmo se a associação da condição de não encontrar nenhum registro correspondente no "direito" (tabelaLocalização).Aqui está o que o SQL para uma associação externa à esquerda seria semelhante, utilizando as tabelas acima:

select  * from employee left outer join location on employee.empID = location.empID;
//Use of outer keyword is optional

Agora, aqui está o resultado da execução deste SQL seria:enter image description here enter image description here

Right Outer Join:- Uma associação externa direita (ou right join) parecida com um left outer join, exceto com o tratamento das tabelas invertida.Cada linha da "direita" (tabelaLocalização) irá aparecer na tabela associada pelo menos uma vez.Se não correspondente linha da "esquerda" (tabelaFuncionário) existe, NULL vai aparecer em colunas de Funcionário para os registros que não têm correspondência no Localização.Isto é o que o SQL parece:

select * from employee right outer join location  on employee.empID = location.empID;
//Use of outer keyword is optional

Usando as tabelas acima, pode-se mostrar que o conjunto de resultados de uma associação externa à direita ficaria:

enter image description hereenter image description here

Full Outer Joins:- Full Outer Join ou Total da Associação é manter a não-correspondência de informação, incluindo não-correspondência de linhas nos resultados de uma associação, use uma associação externa completa.Ele inclui todas as linhas de ambas as tabelas, independentemente de estarem ou não a tabela tem um valor correspondente.enter image description here

Fonte Da Imagem

MySQL 8.0 Manual De Referência - Sintaxe De Associação

Oracle operações de Associação

Inner Join

Recuperar a correspondência de linhas apenas, que é, A intersect B.

Enter image description here

SELECT *
FROM dbo.Students S
INNER JOIN dbo.Advisors A
    ON S.Advisor_ID = A.Advisor_ID

Left Outer Join

Selecionar todos os registros da primeira tabela, e quaisquer registros na segunda tabela que correspondem a juntou-se chaves.

Enter image description here

SELECT *
FROM dbo.Students S
LEFT JOIN dbo.Advisors A
    ON S.Advisor_ID = A.Advisor_ID

Full Outer Join

Selecionar todos os registros da segunda tabela, e em todos os registros na primeira tabela que correspondem a juntou-se chaves.

Enter image description here

SELECT *
FROM dbo.Students S
FULL JOIN dbo.Advisors A
    ON S.Advisor_ID = A.Advisor_ID

Referências

Em palavras simples:

Um inner join recuperar a correspondência de linhas apenas.

Considerando que um associação externa recuperar a correspondência de linhas de uma tabela e todas as linhas da outra tabela ....o resultado depende do que você estiver usando:

  • Esquerda:Correspondência de linhas na tabela à direita e todas as linhas da tabela à esquerda

  • Direito:Correspondência de linhas na tabela da esquerda e todas as linhas na tabela à direita ou

  • Completo:Todas as linhas de todas as tabelas.Não importa se há um match ou não

Uma associação interna, somente mostra linhas que se não houver um registro correspondente no outro (direito) do lado da associação.

Um (à esquerda) associação externa mostra linhas para cada registro no lado esquerdo, mesmo se não houver nenhuma linha correspondente na outra (direita) do lado da associação.Se não houver registros coincidentes, as colunas para o outro (direito) do lado iria mostrar Nulos.

Associações internas requerem um registro com o ID associado existir na tabela associada.

Associações externas retornará registros para o lado esquerdo, mesmo se nada existe para o lado direito.

Por exemplo, você tem um Encomendas e uma tabela detalhes da encomenda.Eles estão relacionados por uma "OrderID".

Encomendas

  • Códigodopedido
  • Nome do cliente

OrderDetails

  • OrderDetailID
  • Códigodopedido
  • ProductName
  • Qty
  • Preço

A pedido

SELECT Orders.OrderID, Orders.CustomerName
  FROM Orders 
 INNER JOIN OrderDetails
    ON Orders.OrderID = OrderDetails.OrderID

irá retornar somente as Ordens que também têm algo a tabela detalhes da encomenda.

Se você alterá-lo para o EXTERIOR LEFT JOIN

SELECT Orders.OrderID, Orders.CustomerName
  FROM Orders 
  LEFT JOIN OrderDetails
    ON Orders.OrderID = OrderDetails.OrderID

em seguida, ele irá retornar os registros da tabela Pedidos, mesmo se eles não têm registros de OrderDetails.

Você pode usar isso para encontrar Ordens que não têm qualquer OrderDetails indicando uma possível órfãos ordem adicionando uma cláusula where, como WHERE OrderDetails.OrderID IS NULL.

Em palavras simples :

Inner join -> Tome APENAS de registros comuns de tabelas pai e filho, ONDE a chave primária da tabela Pai jogos de chave Estrangeira na tabela Filho.

Left join ->

pseudo-código

1.Take All records from left Table
2.for(each record in right table,) {
    if(Records from left & right table matching on primary & foreign key){
       use their values as it is as result of join at the right side for 2nd table.
    } else {
       put value NULL values in that particular record as result of join at the right side for 2nd table.
    }
  }

Direito de associação :Exatamente o oposto do left join .Coloca o nome da tabela de ASSOCIAÇÃO à ESQUERDA no lado direito no Direito de associação , você obtém os mesmos resultados, como LEFT JOIN.

Associação externa :Mostrar todos os registros de Ambas as tabelas No matter what.Se os registros na tabela da Esquerda não são equivalentes para a direita, tabela com base no Primário , Forieign chave , utilize o valor NULO como resultado da associação .

Exemplo :

Example

Vamos supor agora para 2 tabelas

1.employees , 2.phone_numbers_employees

employees : id , name 

phone_numbers_employees : id , phone_num , emp_id   

Aqui , empregados de mesa é o Mestre de mesa , phone_numbers_employees é filho de tabela(contém emp_id como chave externa que se conecta employee.id assim, seu filho da tabela.)

Associações internas

Tomar os registros das tabelas 2 SOMENTE SE a chave Primária da tabela funcionários(seu id) corresponde a chave Estrangeira da tabela Filho phone_numbers_employees(id_emp).

Para consulta seria :

SELECT e.id , e.name , p.phone_num FROM employees AS e INNER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;

Aqui, tome apenas linhas correspondentes na chave primária = chave estrangeira, como explicado acima.Aqui não linhas correspondentes na chave primária = chave estrangeira são ignorados como resultado da associação.

A esquerda junta :

Left join mantém todas as linhas da tabela à esquerda, independentemente de haver ou não uma linha que corresponde à direita da tabela.

SELECT e.id , e.name , p.phone_num FROM employees AS e LEFT JOIN phone_numbers_employees AS p ON e.id = p.emp_id;

Associações externas :

SELECT e.id , e.name , p.phone_num FROM employees AS e OUTER JOIN phone_numbers_employees AS p ON e.id = p.emp_id;

Diagramatically ele se parece :

Diagram

Você usa INNER JOIN para retornar todas as linhas de ambas as tabelas, onde há uma correspondência.i.e.Na tabela resultante de todas as linhas e colunas terão valores.

No OUTER JOIN a tabela resultante pode ter colunas vazias.Associação externa pode ser LEFT ou RIGHT.

LEFT OUTER JOIN retorna todas as linhas da primeira tabela, mesmo se não houver nenhuma correspondência na segunda tabela.

RIGHT OUTER JOIN retorna todas as linhas da segunda tabela, mesmo se não houver nenhuma correspondência na primeira tabela.

This is a good explanation for joins

Este é um bom diagramática explicação para todo o tipo de associações

fonte: http://ssiddique.info/understanding-sql-joins-in-easy-way.html

INNER JOIN requer existe pelo menos um jogo na comparação entre as duas tabelas.Por exemplo, A tabela e A tabela B, o que implica Uma ٨ B (A intersecção B).

LEFT OUTER JOIN e LEFT JOIN são os mesmos.Ele dá todos os registros correspondentes em ambas as tabelas e todas as possibilidades da tabela da esquerda.

Da mesma forma, RIGHT OUTER JOIN e RIGHT JOIN são os mesmos.Ele dá todos os registros correspondentes em ambas as tabelas e todas as possibilidades da tabela da direita.

FULL JOIN é a combinação de LEFT OUTER JOIN e RIGHT OUTER JOIN sem duplicação.

A resposta está no significado de cada um, portanto, nos resultados.

Nota :
No SQLite não há RIGHT OUTER JOIN ou FULL OUTER JOIN.
E também em MySQL não há FULL OUTER JOIN.

A minha resposta é baseado no acima Nota.

Quando você tem duas tabelas, como estas:

--[table1]               --[table2]
id | name                id | name
---+-------              ---+-------
1  | a1                  1  | a2
2  | b1                  3  | b2

CROSS JOIN / OUTER JOIN :
Você pode ter todas as tabelas de dados com CROSS JOIN ou apenas com , como esta:

SELECT * FROM table1, table2
--[OR]
SELECT * FROM table1 CROSS JOIN table2

--[Results:]
id | name | id | name 
---+------+----+------
1  | a1   | 1  | a2
1  | a1   | 3  | b2
2  | b1   | 1  | a2
2  | b1   | 3  | b2

INNER JOIN :
Quando você deseja adicionar um filtro para resultados acima, com base em uma relação como table1.id = table2.id você pode usar INNER JOIN:

SELECT * FROM table1, table2 WHERE table1.id = table2.id
--[OR]
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id

--[Results:]
id | name | id | name 
---+------+----+------
1  | a1   | 1  | a2

ESQUERDA [OUTER] JOIN :
Quando você quer ter todas as linhas de uma das tabelas acima o resultado, com a mesma relação - você pode usar LEFT JOIN:
(Para DIREITO DE ASSOCIAÇÃO apenas a mudança de lugar das tabelas)

SELECT * FROM table1, table2 WHERE table1.id = table2.id 
UNION ALL
SELECT *, Null, Null FROM table1 WHERE Not table1.id In (SELECT id FROM table2)
--[OR]
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id

--[Results:]
id | name | id   | name 
---+------+------+------
1  | a1   | 1    | a2
2  | b1   | Null | Null

FULL OUTER JOIN :
Quando você também quer ter todas as linhas da outra tabela em seus resultados que você pode usar FULL OUTER JOIN:

SELECT * FROM table1, table2 WHERE table1.id = table2.id
UNION ALL
SELECT *, Null, Null FROM table1 WHERE Not table1.id In (SELECT id FROM table2)
UNION ALL
SELECT Null, Null, * FROM table2 WHERE Not table2.id In (SELECT id FROM table1)
--[OR] (recommended for SQLite)
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id
UNION ALL
SELECT * FROM table2 LEFT JOIN table1 ON table2.id = table1.id
WHERE table1.id IS NULL
--[OR]
SELECT * FROM table1 FULL OUTER JOIN table2 On table1.id = table2.id

--[Results:]
id   | name | id   | name 
-----+------+------+------
1    | a1   | 1    | a2
2    | b1   | Null | Null
Null | Null | 3    | b2

Bem, como sua necessidade você a escolher cada uma que cobre a sua necessidade ;).

Inner join.

Uma associação é a combinação de linhas de duas tabelas.Um inner join tentativas de igualar-se duas tabelas com base nos critérios que você especificar na consulta e retorna somente as linhas que correspondem.Se uma linha da primeira tabela na associação corresponde a duas linhas da segunda tabela e, em seguida, duas linhas serão devolvidos nos resultados.Se há uma linha da primeira tabela que não correspondem a uma linha na segunda, não devolvidos;da mesma forma, se há uma linha da segunda tabela que não correspondem a uma linha na primeira, ele não é devolvido.

Associação Externa.

Um left join tenta encontrar corresponder as linhas da primeira tabela para linhas da segunda tabela.Se ele não encontrar uma correspondência, ele irá retornar as colunas da primeira tabela e deixar as colunas da segunda tabela em branco (nulo).

Eu não vejo muito detalhes sobre o desempenho e otimizador em outras respostas.

Às vezes, é bom saber que só INNER JOIN é associativa, o que significa que o otimizador não tem mais a opção de jogar com ele.É possível reorganizar a ordem de associação para torná-lo mais rápido, mantendo o mesmo resultado.O otimizador pode usar a maioria dos modos de associação.

Geralmente é uma boa prática para tentar usar INNER JOIN em vez de os diferentes tipos de associações.(Claro, se é possível, considerando o conjunto de resultado esperado.)

Há um par de bons exemplos e a explicação aqui sobre esse estranho comportamento associativo:

Preciso algoritmo para INNER JOIN, LEFT/RIGHT OUTER JOIN são as seguintes:

  1. Tome cada linha da primeira tabela: a
  2. Considere todas as linhas da segunda tabela ao lado: (a, b[i])
  3. Avaliar o ON ... cláusula contra cada par: ON( a, b[i] ) = true/false?
    • Quando a condição for avaliada como true, retorno que combinado linha (a, b[i]).
    • Quando chegar ao fim da segunda tabela, sem qualquer correspondência, e este é um Outer Join em seguida, retornar um (virtual) par usando Null para todas as colunas da tabela: (a, Null) para LEFT outer join ou (Null, b) para RIGHT outer join.Isso é para garantir que todas as linhas da primeira tabela existe no resultado final.

Nota: a condição especificada na ON cláusula poderia ser qualquer coisa, isso não é necessário para usar Chaves Primárias (e você não precisa sempre fazer referência a Colunas de duas tabelas)!Por exemplo:

Inner Join vs. Left Outer Join


enter image description here

Nota: Left Join = Left Outer Join, Right Join = Right Outer Join.

Ter criticado o bem-amado vermelho-sombreada do diagrama de Venn, eu pensei que só justo para postar a minha própria tentativa.

Apesar @Martin Smith, a resposta é o melhor do grupo por um longo caminho, o seu só mostra a coluna de chave de cada tabela, enquanto que eu acho que o ideal colunas não chave deve também ser mostrado.

O melhor que eu podia fazer em meia hora permitido, eu ainda não acho que seja adequadamente mostra que os valores nulos existem devido à ausência de valores de chave em TableB ou que OUTER JOIN é, na verdade, uma união em vez de uma associação:

enter image description here

enter image description here

  • INNER JOIN mais típico de associação de duas ou mais tabelas.Ele retorna de correspondência de dados na tabela NO chaveprimária e forignkey relação.
  • OUTER JOIN é mesmo como INNER JOIN, mas ele também incluem NULL de dados no conjunto de Resultados.
    • LEFT JOIN = INNER JOIN + Incomparável de dados de esquerda tabela com Null correspondência na tabela da direita.
    • RIGHT JOIN = INNER JOIN + Incomparável de dados de direito tabela com Null correspondência na tabela da esquerda.
    • FULL JOIN = INNER JOIN + Incomparável de dados em direita e esquerda tabelas com Null jogos.
  • Auto associação não é uma palavra-chave no SQL, quando uma tabela de referências de dados em si, sabe como auto-associação.Usando INNER JOIN e OUTER JOIN podemos escrever a auto consultas.

Por exemplo:

SELECT * 
FROM   tablea a 
       INNER JOIN tableb b 
               ON a.primary_key = b.foreign_key 
       INNER JOIN tablec c 
               ON b.primary_key = c.foreign_key 

Mais Simples Definições

Inner Join:Retorna registros correspondentes a partir de ambas as tabelas.

Full Outer Join:Retorna de correspondência e registros não coincidentes a partir de ambas as tabelas com null para registros não coincidentes de Ambas As Tabelas.

Left Outer Join:Retorna combinados e incomparável somente os registros da tabela em Lado Esquerdo.

Right Outer Join:Retorna combinados e incomparável somente os registros da tabela em Lado Direito.

Em Breve

Correspondência Esquerda + Ímpar + Direita Incomparável = Full Outer Join

Correspondência Esquerda + Ímpar = Left Outer Join

Correspondência De + Direito Incomparável = Right Outer Join

Correspondência = Inner Join

Em Termos Simples,

1.INNER JOIN OU EQUI JOIN : Retorna o conjunto de resultados que corresponde apenas a condição em ambas as tabelas.

2.OUTER JOIN : Retorna o conjunto de resultados de todos os valores de ambas as tabelas, mesmo se não houver condição de corresponder ou não.

3.LEFT JOIN : Retorna o conjunto de resultados de todos os valores da tabela da esquerda e apenas as linhas que correspondem a condição na tabela da direita.

4.DIREITO DE ASSOCIAÇÃO : Retorna o conjunto de resultados de todos os valores da tabela para a direita e apenas as linhas que correspondem a condição na tabela da esquerda.

5.FULL JOIN : Adesão total e Full outer Join são as mesmas.

1.Inner Join: Também chamado de Associação.Ele retorna as linhas presentes tanto a tabela da Esquerda, e à direita uma mesa se houver uma correspondência.Caso contrário, ele retorna zero registros.

Exemplo:

SELECT
  e1.emp_name,
  e2.emp_salary    
FROM emp1 e1
INNER JOIN emp2 e2
  ON e1.emp_id = e2.emp_id

output1

2.Full Outer Join: Também chamado de adesão Total.Ele retorna todas as linhas presente em ambos a tabela da Esquerda e da direita da tabela.

Exemplo:

SELECT
  e1.emp_name,
  e2.emp_salary    
FROM emp1 e1
FULL OUTER JOIN emp2 e2
  ON e1.emp_id = e2.emp_id

output2

3.Left Outer join: Ou simplesmente chamado como Left Join.Ele retorna todas as linhas presentes na tabela à Esquerda e linhas correspondentes da tabela da direita (se houver).

4.Right Outer Join: Chamado também como o Direito de Associação.Ele retorna linhas correspondentes da tabela da esquerda (se houver), e todas as linhas presentes na tabela à Direita.

joins

Vantagens das Junções

  1. Executa mais rápido.
  • Inner join - Um inner join usando o equivalente a consultas dá a intersecção dos dois tabelas, i.é.as duas linhas que eles têm em comum.

  • Left outer join - Um left outer join vai dar todas as linhas em Um, além de qualquer comuns de linhas de B.

  • Full outer join - Um full outer join vai dar-lhe a união de A e B, i.e.De todas as linhas e todas as linhas de B.Se algo que não tem um correspondente de referência em B e, em seguida, a porção B é nulo, e vice-versay

left join on (aka left outer join on) retorna inner join on linhas union all incomparável esquerda linhas da tabela prorrogado por valores nulos.

right join (on aka right outer join on) retorna inner join on linhas union all incomparável direito de linhas da tabela prorrogado por valores nulos.

full join on (aka full outer join on) retorna inner join on linhasunion all incomparável esquerda linhas da tabela estendida por nulos union all incomparável direito de linhas da tabela prorrogado por valores nulos.

(Padrão SQL 2006 SQL/Foundation 7.7 Regras de Sintaxe 1, Regras Gerais 1-b, 3-c & d, 5-b.)

Portanto, não outer join até você saber o que subjacente inner join está envolvido.


Descubra quais linhas inner join retorna.

Leia meus comentários lá voltar muitas confuso e pobres respostas.

Em seguida, leia os meus comentários aqui novamente a muitos confuso e pobres respostas.

A diferença entre o inner join e outer join é como a seguir:

  1. Inner join é uma associação que combinado tabelas com base na correspondência de tuplas, enquanto a exterior é uma junção que combinado tabela com base em ambos combinados e inigualável de tupla.
  2. Inner join mescla de correspondência de linhas de duas tabelas onde incomparável linha são omitidos, considerando que a associação externa mescla de linhas de duas tabelas e incomparável linhas preencher com o valor null.
  3. Inner join é como um cruzamento de operação, considerando que a outer join é como uma operação de união.
  4. Associação interna é de dois tipos, enquanto que a associação externa são de três tipos.
  5. Inner join é mais lento, enquanto que a associação externa é mais rápido do que o inner join.

Considere abaixo de 2 tabelas:

EMP

empid   name    dept_id salary
1       Rob     1       100
2       Mark    1       300
3       John    2       100
4       Mary    2       300
5       Bill    3       700
6       Jose    6       400

Departamento

deptid  name
1       IT
2       Accounts
3       Security
4       HR
5       R&D

Inner Join:

A maioria escrita apenas como PARTICIPAR em consultas sql.Ele retorna somente os registros correspondentes entre as tabelas.

Descubra todos os funcionários e suas departamento de nomes:

Select a.empid, a.name, b.name as dept_name
FROM emp a
JOIN department b
ON a.dept_id = b.deptid
;

empid   name    dept_name
1       Rob     IT
2       Mark    IT
3       John    Accounts
4       Mary    Accounts
5       Bill    Security

Como você pode ver acima, Jose não é impresso a partir de EMP na saída, como é dept_id 6 não encontrar uma correspondência no Departamento de tabela.Da mesma forma, HR e R&D linhas não são impressos a partir de Departamento tabela de como eles não encontrar uma correspondência na tabela Emp.

Assim, INNER JOIN ou simplesmente ASSOCIAÇÃO, retorna somente as linhas coincidentes.

LEFT JOIN :

Este retorna todos os registros da tabela da ESQUERDA e apenas os registos correspondentes da tabela da DIREITA.

Select a.empid, a.name, b.name as dept_name
FROM emp a
LEFT JOIN department b
ON a.dept_id = b.deptid
;

empid   name    dept_name
1       Rob     IT
2       Mark    IT
3       John    Accounts
4       Mary    Accounts
5       Bill    Security
6       Jose    

Assim, se você observar a saída acima, todos os registros da tabela da ESQUERDA(Emp) são impressos apenas com correspondência de registros da tabela à DIREITA.

HR e R&D linhas não são impressos a partir de Departamento tabela de como eles não encontrar uma correspondência na tabela Emp no dept_id.

Assim, LEFT JOIN retorna TODAS as linhas da tabela à Esquerda e apenas linhas correspondentes da tabela da DIREITA.

Também pode verificar PENTEADOS aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top