SQL Server Essentials: Utilisation des auto-jointures 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. 

À quoi sert la jointure auto SQL?

La jointure auto est un type spécial et quelque peu rare de jointure SQL. Alors que la plupart des jointures comme la jointure INTERNE relient deux tables différentes ou plus par leurs colonnes communes, une jointure auto relie une table à elle-même. Contrairement aux opérations de jointure régulières, la même table est utilisée à la fois comme table de gauche et de droite dans l’opération de jointure.

Publicité

Par exemple, vous pourriez utiliser une jointure auto pour trouver tous les employés qui ont le même manager. Ici, vous pourriez faire correspondre l’ID d’un manager avec l’ID d’un employé. Alternativement, vous pourriez utiliser une jointure auto pour trouver tous les clients qui ont des commandes pour les mêmes produits.

Exemple de jointure auto SQL

La requête suivante montre un exemple du code SQL pour une jointure auto en utilisant la base de données d’exemple Northwind. Le nom de la table est ‘Employees’ et comme vous pourriez le deviner, elle contient des données d’employés.

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

Cet exemple de jointure auto SQL affichera les noms des superviseurs pour chaque employé.

  • Ici, nous joignons la table Employés à elle-même en utilisant la colonne « ReportsTo » et la colonne « EmployeeID ». Comme les superviseurs sont également des employés, ils sont répertoriés dans la même table Employés.
  • Dans ce cas, les valeurs de la colonne « ReportsTo » doivent correspondre aux valeurs de la colonne « EmployeeID ».
  • Dans l’ensemble des résultats, les colonnes « FirstName » et « LastName » de la table auto-rejointe seront renommées « ManagerFirstName » et « ManagerLastName ».
  • La table EmployeeID utilise un alias de table ‘e1’ tandis que la table auto-rejointe utilise un alias de table ‘e2’.
  • La syntaxe de jointure self SQL réelle est une JOIN EXTERNE GAUCHE. La clause ON spécifie les colonnes qui seront utilisées dans la jointure self.

Vous pouvez voir le résultat de la requête de jointure self dans l’image suivante:

Publicité

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

Cette requête renverra un ensemble de résultats comprenant l’EmployeeID, le prénom, le nom de famille, ReportsTo (EmployeeID), les détails de ManagerFirstName et ManagerLastName. Si vous examinez l’ensemble de résultats, vous verrez qu’Andrew Fuller a un EmployeeID de 2 et qu’il est également le superviseur pour EmployeeID 1, 3, 4, 5 et 8. Andrew Fuller ne rend compte à personne d’autre, donc son ReportTo ainsi que ManagerFirstName et ManagerLastName sont tous NULL.

Quand devriez-vous utiliser une jointure self SQL?

Vous devriez vraiment utiliser une autojointure lorsqu’une table SQL fait référence à des données en elle-même. Comme je l’ai expliqué dans cet article, un excellent cas d’utilisation pour une autojointure SQL peut être une table avec des données d’employés où chaque ligne contient des informations sur les employés et leurs gestionnaires. Dans ce cas, une autojointure vous permet de mettre en évidence facilement des informations pertinentes sur le fonctionnement d’une organisation.

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