Essenciais do SQL Server: Usando Auto-Junções SQL

A self join in SQL Server is a useful statement to use for demonstrating relationships within a single SQL Server table database. In this tutorial, I’ll show you when and how to use an SQL self join. To do that, I’ll be detailing an sql self join example where I’ll list the supervisors for all employees in the Northwind Employees sample table. 

Para que serve o auto join SQL?

O auto join é um tipo especial e um tanto incomum de join SQL. Enquanto a maioria dos joins como o INNER JOIN ligam duas ou mais tabelas diferentes por suas colunas comuns, um auto join liga uma tabela a si mesma. Ao contrário das operações de join regulares, a mesma tabela é usada como ambas as tabelas esquerda e direita na operação de join.

Publicidade

Por exemplo, você pode usar um auto join para encontrar todos os funcionários que têm o mesmo gerente. Aqui você pode combinar o ID de um gerente com um ID de funcionário. Alternativamente, você poderia usar um auto join para encontrar todos os clientes que têm pedidos para os mesmos produtos.

Exemplo de auto join SQL

A consulta a seguir mostra um exemplo do código SQL para um auto join usando o banco de dados de exemplo Northwind. O nome da tabela é ‘Funcionários’ e como você pode imaginar, ela contém dados de funcionários.

USE Northwind
SELECT e1.EmployeeID, e1.FirstName, e1.LastName, e1.ReportsTo,
    e2.FirstName as ManagerFirstName, e2.LastName as ManagerLastName
FROM Employees e1 LEFT OUTER JOIN Employees e2 on e1.ReportsTo = e2.EmployeeID

Este exemplo de auto join SQL mostrará os nomes dos supervisores para cada funcionário.

  • Aqui, estamos unindo a tabela Funcionários a si mesma usando a coluna ‘ReportsTo’ e a coluna ‘EmployeeID’. Como os supervisores também são funcionários, eles estão listados na mesma tabela de Funcionários.
  • Neste caso, os valores na coluna ‘ReportsTo’ devem corresponder aos valores na coluna ‘EmployeeID’.
  • No conjunto de resultados, as colunas ‘FirstName’ e ‘LastName’ da tabela auto-unida serão renomeadas para ‘ManagerFirstName’ e ‘ManagerLastName’.
  • A tabela EmployeeID usa um alias de tabela ‘e1’ enquanto a tabela auto-unida usa um alias de tabela ‘e2’.
  • A sintaxe real do auto join SQL é um LEFT OUTER JOIN. A cláusula ON especifica as colunas que serão usadas na auto junção.

Você pode ver o resultado da consulta de auto junção na seguinte imagem:

Publicidade

SQL self join example (Image credit: Petri/Michael Otey)

Esta consulta retornará um conjunto de resultados que inclui o EmployeeID, o FirstName, o LastName, o ReportsTo (EmployeeID), o ManagerFirstName e os detalhes do ManagerLastName. Se você examinar o conjunto de resultados, verá que Andrew Fuller tem um EmployeeID de 2 e que ele também é o supervisor dos EmployeeID 1, 3, 4, 5 e 8. Andrew Fuller não se reporta a mais ninguém, portanto seu ReportTo e ManagerFirstName e ManagerLastName são todos NULL.

Quando você deve usar um auto join SQL?

Deve realmente usar uma autojunção quando uma tabela SQL faz referência a dados nela mesma. Como expliquei neste artigo, um ótimo caso de uso para uma autojunção SQL pode ser uma tabela com dados de funcionários onde cada linha contém informações sobre os funcionários e seus gerentes. Nesse caso, uma autojunção permite que você facilmente exponha informações relevantes sobre como uma organização funciona.

Source:
https://petri.com/sql-self-join/