Jeudi 23 juin 2011 4 23 /06 /Juin /2011 23:04

 

Requête SQL AUTO JOINTURE - SELF JOINS dans Oracle.

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.

Exemple de Syntaxe Requêtes SELF JOINS.

 
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)]];

 

Exemple jointure SELF JOIN.

 
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

SQL> SELECT e1.ename || ' son superieur est ' || e2.ename AS "Hierarchie" 2 FROM emp e1 INNER JOIN emp e2 3 ON (e1.mgr = e2.empno) 4 WHERE e1.deptno = 10; Hierarchie ----------------------------------------- CLARK son superieur est KING MILLER son superieur est CLARK SQL>

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é.

Exemple jointure SELF JOIN avec un OUTER-JOIN.

 
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

SQL> SELECT e1.ename 2 || ' son superieur est ' 3 || DECODE (e2.ename, NULL, ' IS NULL', e2.ename) 4 AS "Hierarchie" 5 FROM emp e1 LEFT OUTER JOIN emp e2 6 ON (e1.mgr = e2.empno) 7 WHERE e1.deptno = 10; Hierarchie ----------------------------------------- CLARK son superieur est KING KING son superieur est IS NULL MILLER son superieur est CLARK SQL>

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
Par Daniel Roesch - Publié dans : JOINTURES SQL - SQL JOINS
Ecrire un commentaire - Voir les 0 commentaires
Retour à l'accueil

Rechercher Articles Oracle SQL sur ce Site.

Loading

À lire aussi…

Download PDF Oracle

Rechercher sur le site

Oracle 10G - DBA -

Syndication

  • Flux RSS des articles
Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus - Articles les plus commentés