Samedi 25 juin 2011 6 25 /06 /Juin /2011 12:03

 

Requête SQL JOINTURES EXTERNES / OUTER JOINS.

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

Exemple de Syntaxe Requêtes OUTER JOINS.

 
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.

Exemple jointure interne INNER JOIN.

 
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.

Exemple jointure externe RIGHT 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.

Exemple jointure externe 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
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