C’est quoi un OUTER JOIN. ? Comment ça marche une jointure externe. ?
● JOINTURES EXTERNES = OUTER JOINS. Une jointure externe élargie le résultat d’une jointure simple (INNER
JOINS) et permet en plus d’extraire des enregistrements qui ne répondent pas aux critères de jointure.
Une jointure externe renvoie toutes les lignes qui satisfont la condition de jointure et retourne également une partie de ces lignes de la table pour laquelle aucune des lignes
de l’autre ne satisfait la condition de jointure.
Le sens de la jointure externe LEFT ou RIGHT de la clause OUTER JOIN désigne la table dominante.
● FROM table1 t1 LEFT OUTER JOIN table2 t2
ON (t1.column_name = t2.column_name);
● FROM table1 t1 RIGHT OUTER JOIN table2 t2 ON
(t1.column_name = t2.column_name);
SELECT t1.column, t2.column FROM table1 t1 [ LEFT | RIGHT | FULL [OUTER JOIN table2 t2 ON (t1.column_name = t2.column_name)]]; |
Imaginons, vous devez lister tous les départements de la société avec le nombre de salarié. Par défaut, on va utiliser une jointure interne simple (INNER JOIN), et voyons le résultat.
SQL> SELECT d.loc, COUNT(e.deptno) "Nbr Salarie" 2 FROM emp e INNER JOIN dept d 3 ON (e.deptno = d.deptno) 4 GROUP BY d.loc; LOC Nbr Salarie ------------- ----------- NEW YORK 3 CHICAGO 6 DALLAS 5 SQL> |
A priori, vous êtes fier de vous, mais le DRH vous appelle et vous dit, je vous ai demandé la liste de tous les départements....
Il a raison effectivement il vous manque 1 département car dans cette jointure avec un opérateur d'égalité, il y a un département qui ne possède aucun salarié mais la condition de jointure l'a
exclu. Nous allons alors remplacer notre INNER JOIN par un OUTER JOIN.
SQL> SELECT d.loc,count(e.deptno) "Nbr Salarie" 2 FROM emp e RIGHT OUTER JOIN dept d 3 ON (e.deptno = d.deptno) 4 GROUP BY d.loc; LOC Nbr Salarie ------------- ----------- NEW YORK 3 CHICAGO 6 BOSTON 0 DALLAS 5 SQL> SELECT d.loc,count(e.deptno) "Nbr Salarie" 2 FROM emp e, dept d 3 WHERE e.deptno(+) = d.deptno 4 GROUP BY d.loc; LOC Nbr Salarie ------------- ----------- NEW YORK 3 CHICAGO 6 BOSTON 0 DALLAS 5 SQL> |
Nous avons maintenant le département BOSTON qui apparaît.
Ci-dessous le même résultat mais en inversant l’écriture de la clause de jointure afin de faire un LEFT OUTER JOIN.
SQL> SELECT d.loc,count(e.deptno) "Nbr Salarie" 2 FROM dept d LEFT OUTER JOIN emp e 3 ON (e.deptno = d.deptno) 4 GROUP BY d.loc; LOC Nbr Salarie ------------- ----------- NEW YORK 3 CHICAGO 6 BOSTON 0 DALLAS 5 SQL> |
| 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 • Jointure SQL SELF JOINS |