Como usar juntar ao exterior sql

Video: Curso SQL Server - 23. Cláusula UNION para unir consultas | UskoKruM2010

Quando você está juntando duas tabelas SQL, o primeiro (chamemos-lhe o outro à esquerda) pode ter linhas que não têm contrapartidas correspondentes na segunda tabela (o da direita). Por outro lado, a tabela à direita pode ter linhas que não têm contrapartidas correspondentes na tabela à esquerda.

Se você executar uma junção interna nessas tabelas, todas as linhas ímpares são excluídos da saída. Associações externas, no entanto, não exclui as linhas ímpares. Associações externas vêm em três tipos: a junção externa esquerda, se juntar ao exterior direita, ea junção externa completa.

Deixou junção externa

Em uma consulta que inclui uma junção, a tabela à esquerda é a que precede a palavra-chave JUNTE-SE, e a mesa certa é a que segue. o LEFT JOIN externa preserva as linhas sem correspondência da tabela da esquerda, mas descarta linhas sem correspondência da tabela da direita.

Para compreender associações externas, considere um banco de dados corporativo que mantém registros de funcionários, departamentos e locais da empresa.

LOCATION_IDCIDADE
1Boston
3Tampa
5Chicago

Aqui, a empresa rastreia os departamentos.

DEPT_IDLOCATION_IDNOME
211Vendas
241administrador
275Reparar
295estoque

Aqui, a empresa rastreia os funcionários.

EMP_IDDEPT_IDNOME
6124igreja
6327McCoy

Agora, suponha que você quer ver todos os dados para todos os funcionários, incluindo departamento e localização. Você começa este com uma equi-join:

* SELECT FROM LOCALIZAÇÃO G, DEPT D, EMPREGADO EWHERE L.LocationID = D.LocationIDAND D.DeptID = E.DeptID -

Esta declaração produz o seguinte resultado:

1 Boston 24 1 Administrador 61 24 Kirk5 Chicago 27 5 Repair 63 27 McCoy

Esta tabela resultado dá todos os dados para todos os funcionários, incluindo a localização e departamento. A equi-join funciona porque cada funcionário tem uma localização e um departamento.

Em seguida, suponha que você deseja que os dados sobre os locais, com os dados de departamento e funcionários relacionados. Este é um problema diferente, porque uma localização sem quaisquer departamentos associados podem existir. Para obter o que deseja, você tem que usar uma associação externa, como no exemplo a seguir:

SELECT * DE LOCALIZAÇÃO L LEFT OUTER JOIN DEPT DON (L.LocationID = D.LocationID) ESQUERDA EXTERIOR JOIN EMPREGADOS EON (D.DeptID = E.DeptID) -

Esta juntar dados puxa a partir de três tabelas. Primeiro, a tabela a localização é se juntou a tabela DEPT. O conjunto de resultados é, em seguida, juntou-se à tabela EMPLOYEE. Linhas da tabela à esquerda do LEFT OUTER JOIN operador que não tem nenhuma linha correspondente na tabela à direita são incluídos no resultado.

Assim, no primeiro unir-se, todos os locais são incluídos, mesmo se nenhum departamento associado com eles existe. Na segunda juntar-se, todos os departamentos estão incluídas, mesmo que nenhum funcionário que lhes estão associados existe. O resultado é o seguinte:

1 Boston 24 1 Administrador 61 24 Kirk5 Chicago 27 5 Repair 63 27 McCoy3 Tampa NULL NULL NULL NULL NULL NULL5 Chicago 29 5 Stock NULL NULL NULL1 Boston 21 1 Vendas NULL NULL NULL

As duas primeiras linhas são as mesmas que as duas linhas de resultado no exemplo anterior. A terceira linha (3 Tampa) Tem valores nulos nas colunas de departamento e funcionários porque há departamentos são definidos para Tampa e sem empregados estão estacionados lá.



A quarta e quinta linhas (5 Chicago e 1 Boston) Conter dados sobre o estoque e a Vendas departamentos, mas o Empregado colunas para estas linhas contêm valores nulos, porque esses dois departamentos não têm empregados. Esta junção externa diz tudo o que o equi-join que você disse - mais o seguinte:

  • Todos os locais da empresa, se eles têm quaisquer departamentos ou não

  • Todos os departamentos da empresa, se eles têm todos os empregados ou não

As linhas retornadas no exemplo anterior não são garantidos para ser na ordem que você quiser. A ordem pode variar de uma aplicação para a seguinte. Para certificar-se de que as linhas retornadas estão na ordem que você quiser, adicione um ORDENAR POR cláusula para a sua SELECIONAR declaração, como este:

SELECT * DE LOCALIZAÇÃO L LEFT OUTER JOIN DEPT DON (L.LocationID = D.LocationID) ESQUERDA EXTERIOR JOIN EMPREGADOS EON (D.DeptID = E.DeptID) POR ORDEM L.LocationID, D.DeptID, E.EmpID-

Você pode abreviar a junção externa esquerda linguagem como LEFT JOIN porque não há tal coisa como uma esquerda interior Junte-se.

Video: 17 - T-SQL - UNION - Unir resultados de declarações SELECT - SQL Server

Direito junção externa

o direito junção externa preserva as linhas sem correspondência da tabela direito, mas descarta linhas sem correspondência da tabela à esquerda. Você pode usá-lo nas mesmas tabelas e obter o mesmo resultado, invertendo a ordem em que você apresenta tabelas para a união:

SELECT * FROM EMPREGADOS E DIREITO OUTER JOIN DEPT DON (D.DeptID = E.DeptID) RIGHT OUTER JOIN LOCALIZAÇÃO LON (L.LocationID = D.LocationID) -

Nesta formulação, o primeiro unir-se produz uma tabela que contém todos os departamentos, se eles têm um empregado associado ou não. A segunda juntar produz uma tabela que contém todos os locais, se eles têm um departamento associado ou não.

Você pode abreviar a junção externa direita linguagem como RIGHT JOIN porque não há tal coisa como um direito interior Junte-se.

junção externa completa

o junção externa completa combina as funções da junção externa esquerda ea junção externa direita. Ele mantém as linhas ímpares, tanto do tabelas esquerdo e direito. Consideremos o caso mais geral da base de dados da empresa utilizado nos exemplos anteriores. Poderia ter

  • Locais sem departamentos

  • Departamentos com nenhum local

  • Departamentos sem funcionários

  • Empregados sem departamentos

Para mostrar todos os locais, departamentos e colaboradores, independentemente de se eles têm linhas correspondentes nas outras tabelas, use uma junção externa completa na seguinte forma:

SELECT * DE LOCALIZAÇÃO L CHEIO OUTER JOIN DEPT DON (L.LocationID = D.LocationID) CHEIO EXTERIOR JOIN EMPREGADOS EON (D.DeptID = E.DeptID) -

Você pode abreviar o full-outer-join linguagem como full join porque não há tal coisa como um completo interior Junte-se.


Publicações relacionadas