C’est quoi un SELF JOIN ? Comment ça marche. ?
● AUTO JOINTURES = SELF JOINS. Une auto jointure est une jointure d’une table sur elle même. La table apparait 2 fois dans la clause FROM car la même table sera parcourue deux fois. Des alias de tables seront utilisés afin de pouvoir qualifier les colonnes dans la condition de jointure.
Un SELF JOINS peut etre composé soit d'un INNER-JOIN /EQUI-JOIN / OUTER-JOIN.
Généralement dans ce type de jointure, ce sont les Primary Key ou Foreign Key qui sont utilisées.
SELECT t1.column, t2.column FROM table1 t1 [ INNER JOIN table1 t2 ON (t1.column_name = t2.column_name) ] | [ LEFT | RIGHT | FULL [OUTER JOIN table1 t2 ON (t1.column_name = t2.column_name)]]; |
SQL> SELECT e1.ename || ' son superieur est ' || e2.ename AS "Hierarchie" 2 FROM emp e1, emp e2 3 WHERE e1.mgr = e2.empno 4 AND e1.deptno = 10; Hierarchie ----------------------------------------- CLARK son superieur est KING MILLER son superieur est CLARK |
Ici la colonne MGR de la table EMP contient l'ID du supérieur hiérarchique et la colonne EMPNO de la table EMP contient l'ID du salarié. Nous avons listés tous les employés qui ont un supérieur
dans le département N° 10.
Maintenant si on nous demande de sortir la liste de tous les employés avec leur supérieurs dans le département N° 10, nous allons
devoir faire une jointure externe (OUTER-JOIN). Pourquoi ? Simplement parce que l'employé KING n'a pas de supérieur hiérarchique,
la colonne MGR (ID du supérieur) est à null, normal c'est le grand chef...donc il n'apparaîtra pas sur cette liste avec une simple jointure interne (INNER
JOIN) basée sur un opérateur d'egalité.
SQL> SELECT e1.ename 2 || ' son superieur est ' 3 || DECODE (e2.ename, NULL, ' IS NULL', e2.ename) 4 AS "Hierarchie" 5 FROM emp e1, emp e2 6 WHERE e1.mgr = e2.empno(+) 7 AND e1.deptno = 10; Hierarchie ----------------------------------------- CLARK son superieur est KING KING son superieur est IS NULL MILLER son superieur est CLARK |
Ici, l'utilisation de la fonction DECODE est uniquement présente pour formater la colonne de la liste avec une valeur..
| Liens en rapport avec l'article et qui sont susceptibles de vous intéresser |
|
• Les types de JOINTURES dans ORACLE • Jointure SQL INNER JOINS ou EQUI JOINS |