Auto-jointure
Fait partie de la section Les fondamentaux du Journey SQL de Coddy. Leçon 46 sur 72.
Les jointures réflexives sont un type de jointure différent. Jusqu’à présent, nous avons parlé de jointures entre plusieurs tables, mais les jointures réflexives s’effectuent sur une même table. Un exemple classique serait une table d’employés.
| employee_id | employee_name | manager_id |
| 1 | Minke | 2 |
| 2 | Temur | 3 |
| 3 | Tatjana | 4 |
| 4 | Marinela |
Chaque employé a un responsable, sauf le responsable le plus haut placé, et chaque responsable est également un employé.
Le problème : pour chaque employé, nous voulons connaître le nom de son responsable.
SELECT e2.employee_id, e2.employee_name, e1.employee_name as manager_name
FROM employees as e1
JOIN employees as e2 ON e1.employee_id = e2.manager_idNous effectuons une jointure sur la même table, sauf que nous l'appelons e1 une première fois et e2 une seconde fois. La jointure se fait entre les champs employee_id et manager_id.
Le résultat :
| employee_id | employee_name | manager_name |
|---|---|---|
| 1 | Minke | Temur |
| 2 | Temur | Tatjana |
| 3 | Tatjana | Marinela |
Défi
MoyenTables et colonnes disponibles :
friends:id,name,friend_id
Trouvez les paires d’amis qui sont amis réciproques (une amitié réciproque existe lorsque le friend_id de la personne A pointe vers la personne B ET que le friend_id de la personne B pointe vers la personne A). Affichez les noms des deux amis sur une seule ligne. Nommez les colonnes friend1 et friend2.
Remarque : incluez dans la clause WHERE le critère f1.id < f2.id (f1 et f2 sont les alias des deux copies de la table) afin de ne pas inclure de paires en double
Essayez vous-même
-- Joignez la table à elle-même pour qu’une ligne puisse afficher deux personnes différentes
SELECT ____ AS friend1, ____ AS friend2
FROM friends f1
JOIN friends f2 ON ____
-- Ne conservez que les paires dont les membres se référencent mutuellement
WHERE ____ AND f1.id < f2.id;Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Les fondamentaux
1Introduction
IntroductionQu’est-ce qu’une base de donnéesConcepts des bases de donnéesValeurs uniques4D’autres mots-clés
Le mot-clé INLe mot-clé BETWEENLe mot-clé LIKELe mot-clé ASRécapitulatif - Modèles de téléphones portables2Conditions
Bases des conditionsLe mot-clé ANDLe mot-clé ORLe mot-clé NOTCombinaison de plusieurs conditionsParenthèsesBooléens5Opérations arithmétiques
Opérateurs mathématiquesColonnes mathématiquesL’opération moduloLa fonction ROUND()3Format de retour spécifique
Valeurs NULLTrier les résultats, partie 1Trier les résultats, partie 2Récapitulatif - Entreprise de cybersécuritéLimiter le nombre d’enregistrementsRécapitulatif - Usine de véhicules6Défis d’introduction
Récapitulatif - Élection parlementaireRécapitulatif - Arrestation criminelle par la policeRécapitulatif - Récipient de boisson au barRécapitulatif - Ingénieur de nouvelles colonnes9Tables multiples
Jointure de base, partie 1Jointure de base, partie 2Récapitulatif - JointureAuto-jointureRécapitulatif - Auto-jointureUnionSimplifier les requêtes, mot-clé WITHRécapitulatif - Requêtes WITHRécapitulatif - Entrepreneur immobilier12Fonctions de fenêtre – partie 2
Fonctions RANK & DENSE_RANKRécapitulatif – RANK & DENSE_RANKFonction NTILEFonctions d’agrégationCritère ROWS & RANGEEntraînez-vous par vous-même : Playground SQL