Cependant, il existe un type de jointure dans SQL qui a tendance à passer inaperçu, appelé auto-jointure.
En SQL, une auto-jointure est une technique puissante qui nous permet de combiner les lignes d'une même table en fonction d'une colonne associée au sein de la même table.
Contrairement aux autres types de jointures en SQL où nous récupérons les données de plusieurs tables, une auto-jointure fonctionne sur une seule table.
Vous vous demandez peut-être pourquoi ai-je besoin d’une auto-jointure alors que je peux rechercher les données à partir de la table elle-même ? Bien que cela puisse être vrai, une auto-jointure peut vous aider dans les tâches lorsque vous devez effectuer des requêtes de données récursives ou trouver des données hiérarchiques.
Essentiellement, une auto-jointure joue un rôle fondamental lorsque vous devez comparer les lignes d’une même table.
Rejoignez-nous dans cet article pour explorer ce que sont les auto-jointures, comment elles fonctionnent et comment nous pouvons les utiliser dans une table SQL.
REMARQUE : Avant de plonger dans le vif du sujet, nous allons configurer un tableau de base à des fins de démonstration. Cependant, vous avez envie d'utiliser n'importe quel ensemble de données pris en charge.
Exemples de données
Les requêtes suivantes créent une table de base contenant des informations sur le produit et insèrent les exemples d'enregistrements dans la table. Cela nous permet de démontrer comment travailler avec les auto-jointures en SQL.
CRÉER UNE TABLE Produits (product_id INT CLÉ PRIMAIRE,
nom_produit VARCHAR(255) NON NULL,
parent_id INT
);
Ajoutez 10 exemples d’enregistrements dans le tableau.
INSERT INTO Produits (product_id, product_name, parent_id) VALEURS(1, 'Électronique', NULL),
(2, 'Smartphones', 1),
(3, 'Ordinateurs portables', 1),
(4, 'iPhone 13', 2),
(5, « Samsung Galaxy S21 », 2),
(6, 'MacBook Pro', 3),
(7, « Dell XPS 15 », 3),
(8, 'Accessoires', NULL),
(9, 'Cas de téléphone', 8),
(10, « Sacs pour ordinateurs portables », 8 );
Le tableau résultant est le suivant :
Exemple 1 : auto-adhésion de base
Commençons par une auto-adhésion de base. Par exemple, nous pouvons utiliser une simple auto-jointure pour récupérer la relation parent-enfant de la même table.
Par exemple, nous pouvons l'utiliser pour rechercher tous les produits et leurs produits parents correspondants. Nous pouvons exécuter une requête comme suit :
SELECT c.product_name AS enfant_product, p.product_name AS parent_productDE Produits c
LEFT JOIN Produits p ON c.parent_id = p.product_id;
Dans l'exemple de requête donné, nous utilisons « c » comme alias pour la table de produits qui représente les produits enfants.
Nous créons également l'alias « p » pour la table des produits afin de représenter les produits parents.
Dans l'étape suivante, nous utilisons un SQL LEFT JOIN de base pour garantir que les produits de niveau supérieur sont inclus dans le résultat.
Enfin, nous utilisons la clause ON pour créer une relation entre les enregistrements enfant et parent à l'aide des colonnes « parent_id » et « product_id ».
Le tableau résultant est le suivant :
Vous remarquerez que les produits parents n'ont pas de lien supérieur car ils se situent au sommet de la hiérarchie, également appelés éléments racine.
Exemple 2 : Récupérer une donnée hiérarchique
L'un des rôles les plus fondamentaux d'une auto-jointure est de récupérer des données hiérarchiques. Par exemple, supposons que nous souhaitions récupérer tous les produits enfants dont le produit est égal à « Accessoires ». Nous pouvons exécuter la requête en utilisant une auto-jointure comme suit :
SELECT c.nom_produit AS produit_enfantDE Produits c
REJOINDRE Produits p ON c.parent_id = p.product_id
OÙ p.product_name = 'Accessoires';
Dans ce cas, nous utilisons un JOIN pour combiner la table products avec elle-même, puis utilisons la clause WHERE pour filtrer les résultats souhaités.
Conclusion
Dans ce didacticiel, nous avons exploré ce qu'est une auto-jointure, comment elle fonctionne et comment l'utiliser dans la table SQL pour récupérer des données hiérarchiques ou effectuer des requêtes récursives.