SQLShack (Português)

Este artigo fornecerá uma visão geral completa, com exemplos da junção externa do SQL, incluindo a junção externa completa, direita e esquerda, além de cobrir a união entre junções externas esquerda e direita do SQL.

É essencial entender o processo para obter os dados do múltiplo tabelas. Um iniciante pode não ter a ideia de Joins no SQL Server. Nesta dica, teremos uma visão geral das junções SQL, aprenderemos SQL OUTER JOIN junto com sua sintaxe, exemplos e casos de uso.

Em um sistema de banco de dados relacional, é uma prática recomendada seguir os princípios de normalização, em que, basicamente, dividimos tabelas grandes em tabelas menores. Em uma instrução select, podemos recuperar os dados dessas tabelas usando joins. Podemos juntar as tabelas e obter os campos obrigatórios dessas tabelas no conjunto de resultados. Essas tabelas devem ter algum campo comum para se relacionar. Você pode encontrar dados divididos em vários bancos de dados e, às vezes, também é uma estrutura muito complexa. Com Joins, podemos juntar os dados de várias tabelas e bancos de dados de uma forma amigável e representar esses dados no aplicativo.

Podemos representar um SQL JOIN usando a imagem a seguir

Podemos muitos tipos de junção SQL no SQL Server. Na imagem a seguir, você pode ver as categorias de SQL Joins

Vamos explorar o SQL Outer Join em detalhes na próxima seção.

Visão geral do SQL OUTER JOIN

Usamos o SQL OUTER JOIN para combinar linhas entre tabelas. Podemos querer obter linhas correspondentes junto com linhas não correspondidas também de uma ou ambas as tabelas. Temos os seguintes três tipos de SQL OUTER JOINS.

  1. SQL Full Outer Join
  2. SQL Left Outer Join
  3. SQL Right Outer Join

Vamos explorar cada SQL Outer Join com exemplos.

SQL Full Outer Join

Na SQL Full Outer Join, todas as linhas de ambas as tabelas são incluídas . Se houver alguma linha sem correspondência, ele mostra valores NULL para eles.

Podemos entender de forma eficiente usando exemplos. Vamos criar uma tabela de amostra e inserir dados nela.

Você pode consultar o seguinte modelo de dados de ambas as tabelas.

Insira dados na tabela Funcionário com o seguinte script.

Insira Dados na tabela Departamentos

Podemos representar uma relação lógica entre duas tabelas usando um diagrama de Venn. Em um diagrama de Venn, contém vários círculos sobrepostos e cada círculo representa uma entidade ou tabela. A área comum ou área de sobreposição no diagrama de Venn representa os valores comuns entre as duas tabelas.

Por exemplo, na imagem a seguir, temos dois círculos sobrepostos. Cada círculo reenvia uma mesa (Funcionário e Departamentos). Vamos entender a junção externa FULL usando o exemplo a seguir.

Temos um campo comum (EmpID) em ambas as tabelas; portanto, podemos juntar a tabela com esta coluna. Na consulta a seguir, definimos FULL OUTER JOIN entre departamentos e a tabela Employee na coluna EMPID de ambas as tabelas.

1
2
3

SELECIONE *
DE Funcionário
FULL OUTER JOIN Departamentos ON Employee.EmpID = Departments.EmpID;

SQL Full Outer Join fornece as seguintes linhas em uma saída

  • Linhas correspondentes entre ambas as tabelas
  • Linhas não correspondidas de ambas as tabelas (valores NULL )

Vamos executar esta consulta para retornar a saída da consulta Full Outer Join. Obtemos a seguinte saída.

Podemos ver alguns registros com valores NULL também. Vamos entender isso de uma maneira melhor usando um diagrama de Venn.

Na captura de tela a seguir, você pode ver as seguintes informações

  • EmpID 1, 2,3,4,5 , 6,10 existe na tabela Funcionário e Departamentos. Na saída da consulta Full Outer Join, obtemos todas essas linhas com dados de ambas as tabelas
  • EmpID 7, 8, 9 existe na tabela Employee, mas não na tabela Departments. Não inclui nenhuma linha correspondente na tabela de departamentos; Portanto; obtemos valores NULL para esses registros

Agora, para fins de demonstração, vamos inserir mais um registro nas tabelas de Departamentos . Nesta consulta, inserimos EmpID 11 que não existe na tabela Employee.

Execute novamente a consulta SQL Full Outer Join. Na imagem a seguir, você obtém uma linha adicional com valores NULL. Não temos nenhuma linha correspondente para EmpID 11 na tabela de funcionários.Devido a isso, obtemos valores NULL para ele na saída.

Como um resumo, podemos representar o SQL Full Outer Join usando o seguinte diagrama de Venn. Obtemos o que está representado na área destacada na saída da Full Outer Join.

SQL FULL OUTER JOIN e cláusula WHERE

Podemos adicionar uma cláusula WHERE com SQL FULL OUTER JOIN para obter linhas sem dados correspondentes entre as duas tabelas de junção.

Na consulta a seguir, adicionamos uma cláusula where para mostra apenas registros com valores NULL.

1
2
3
4
5

SELECT *
FROM Employee
FULL OUTER JOIN Departamentos ON Employee.EmpID = Departments.EmpID
ONDE Employee.EmpID IS NULL
OU Departments.EmpID IS NULL;

Execute este comando e visualize a saída. Ele retorna apenas linhas que não correspondem na tabela Employee ou Departments.

SQL LEFT OUTER JOIN

Em uma SQL Left Outer Join, obtemos as seguintes linhas em nossa saída.

  • Ela fornece a saída da linha correspondente entre as duas tabelas
  • Se nenhum registro corresponder da tabela à esquerda, também mostra os registros com valores NULL

Execute o seguinte código para retornar a saída SQL LEFT OUTER JOIN

1
2
3

SELECT *
FROM Employee
LEFT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID

Na imagem a seguir, você pode ver que temos valores NULL para EmpID 7,8 e 9. Esse EmpID não existe no lado direito Tabela de departamento.

Precisamos observar a posição de colocação da tabela na instrução Join. Atualmente, temos uma tabela Employee no lado esquerdo e a tabela Departments no lado direito.

Vamos reescrever a consulta e trocar a posição das tabelas na consulta. Nesta consulta, temos a tabela Departamento na posição esquerda, de modo que a Junção Externa Esquerda deve verificar os valores para esta tabela e retornar um valor NULL em caso de incompatibilidade.

Na imagem a seguir, você pode veja que apenas um valor NULL para EmpID 11. É porque EmpID 11 não está disponível na tabela Employee.

Como Em resumo, podemos representar o SQL Left Outer Join usando o seguinte diagrama de Venn. Obtemos a área destacada na saída de SQL Left OUTER JOIN.

SQL Right OUTER JOIN

Em SQL Right Outer Join, obtemos as seguintes linhas em nossa saída.

  • Ela fornece a saída da linha correspondente entre as duas tabelas
  • Se nenhum registro corresponder de a tabela certa, ela também mostra os registros com valores NULL

Execute a consulta a seguir para obter a saída de Right Outer Join

1
2
3

SELECT *
FROM Employee
RIGHT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID

Na imagem a seguir, você pode ver que obtemos todas as linhas correspondentes junto com uma linha com valores NULL. A linha de valor nulo possui EmpID 11 porque não existe na tabela Employee. Você também pode notar que a posição da tabela Departamento está na posição correta em Participar. Devido a isso, não obtemos valores da tabela Employee (posição à esquerda) que não correspondam à tabela Department (lado direito).

Conforme destacado anteriormente, a posição da tabela é importante na instrução JOIN. Se mudarmos as posições da mesa, obteremos resultados diferentes. Na consulta a seguir, temos a tabela Departments (Left) e Employee table (Right).

1
2
3
4

SELECT *
DE Departamentos
RIGHT OUTER JOIN Employee ON Departments.EmpID = Employee.EmpID

Você pode notar a diferença em Right Outer Join depois de trocar as posições das tabelas na consulta acima.

Como um resumo, podemos representar o SQL Right Outer Join usando o seguinte diagrama de Venn. Obtemos a área destacada na saída do SQL Right Outer Join.

A união entre o SQL Left Outer Join e o SQL Right Outer Join

Nos exemplos anteriores, exploramos o SQL Left Outer Join e o SQL Right Outer Join com diferentes exemplos. Podemos fazer uma união do resultado de SQL Left Outer Join e SQL Right Outer Join. Ele fornece a saída de SQL Full Outer Join.

Execute a seguinte consulta como uma alternativa para SQL Full Outer Join.

1
2
3
4
5
6
7

SELECT *
FROM Employee
LEFT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID
UNION ALL
SELECT *
FROM Employee
RIGHT OUTER JOIN Departments ON Employee.EmpID = Departments.EmpID

Na seguinte saída, obtemos todos registros correspondentes, registros não correspondentes da tabela da esquerda e registros não correspondentes da tabela direita. É semelhante a uma saída de SQL Full Outer Join.

Conclusão

Neste artigo, exploramos o SQL Outer Join e seus tipos junto com exemplos. Espero que você tenha achado este artigo útil. Sinta-se à vontade para fornecer feedback nos comentários abaixo.

  • Autor
  • Postagens recentes
Como um MCSA Certified e Microsoft Certified Trainer em Gurgaon, Índia, com 13 anos de experiência, Rajendra trabalha para uma variedade de grandes empresas com foco em otimização de desempenho, monitoramento, alta disponibilidade e estratégias e implementação de recuperação de desastres. Ele é autor de centenas de artigos oficiais sobre SQL Server, Azure, MySQL, Linux, Power BI, Ajuste de desempenho, AWS / Amazon RDS, Git e tecnologias relacionadas que foram visualizadas por mais de 10 milhões de leitores até o momento.
Ele é o criador de uma das maiores coleções online gratuitas de artigos sobre um único tópico, com sua série de 50 partes sobre Grupos de Disponibilidade AlwaysOn do SQL Server. Com base em sua contribuição para a comunidade do SQL Server, ele foi reconhecido com vários prêmios, incluindo o prestigioso “Melhor autor do ano” continuamente em 2020 e 2021 na SQLShack.
Raj está sempre interessado em novos desafios, então se você precisar de consultoria ajuda em qualquer assunto abordado em seus escritos, ele pode ser contatado em [email protected]
Veja todas as postagens de Rajendra Gupta

Postagens mais recentes de Rajendra Gupta (ver todos)
  • Tempos limite de sessão no SQL Server sempre disponível Grupos – 8 de fevereiro de 2021
  • Executando atualizações de versões secundárias e principais para AWS RDS SQL Server – 29 de janeiro de 2021
  • Implementando instâncias AWS RDS PostgreSQL – 27 de janeiro de 2021

Write a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *