Jeudi 30 juin 2011 4 30 /06 /Juin /2011 10:21

 

Requête SQL Jointure Naturelle / NATURAL JOIN / JOIN USING. 

C’est quoi un NATURAL JOIN. ? Comment ça marche. ?

 

JOINTURE NATURELLE = NATURAL JOIN.
Une jointure naturelle est une jointure entre deux tables avec une clause NATURAL JOIN. La clause de jointure est automatiquement construite sur la base de toutes les colonnes portant le même nom entre les deux tables.

JOINTURE NATURELLE RESTREINTE= JOIN USING.
Une jointure naturelle restreinte est une jointure entre deux tables avec une clause JOIN USING. La clause JOIN programme une jointure naturelle restreinte à un ensemble de colonnes.

Il ne faut pas utiliser d’alias de tables dans la clause SELECT et WHERE pour les colonnes utilisées dans la jointure naturelle sinon error ORA-25155.
ORA-25155: column used in NATURAL join cannot have qualifier.
Cause: Columns that are used for a named-join (either a NATURAL join or a join with a USING clause) cannot have an explicit qualifier.

Pour une meilleure approche des exemples ci-dessous voici les colonnes des tables avec en couleur les colonnes où  des possibilités de jointures naturelles ou restreintes existent. Ces champs ne pourront pas avoir d'alias si ils sont utilisés dans la jointure.

Tables [ EMP ] | EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO
Tables [ DEPT ] | DEPTNO | DNAME | LOC
Tables [ BONUS ] | ENAME | JOB | SAL | COMM

 

Exemple de Syntaxe Requêtes NATURAL JOIN / JOIN USING.

 
SELECT  t1.column1, t1.column2
  FROM  table1 t1
 [ INNER JOIN table2 t2 USING (column_name1, column_name2,...) ] |
 [ NATURAL INNER JOIN table2 ];

 

Exemple Jointure naturelle - NATURAL JOIN.

 
Ici pas d'alias pour deptno car deptno est utilisé par le NATURAL JOIN.

SQL> SELECT   e.ename, e.job, d.loc, deptno
  2    FROM   emp e NATURAL INNER JOIN dept d
  3   WHERE   deptno = 10;

ENAME      JOB       LOC               DEPTNO
---------- --------- ------------- ----------
CLARK      MANAGER   NEW YORK              10
KING       PRESIDENT NEW YORK              10
MILLER     CLERK     NEW YORK              10



Ici pas d'alias pour ename, job et deptno car sont utilisés par les 2 NATURAL JOIN.

SQL> SELECT   ename, job, d.loc, deptno
  2    FROM   emp e NATURAL INNER JOIN dept d
  3                 NATURAL INNER JOIN bonus b
  4   WHERE   deptno = 10;

ENAME      JOB       LOC               DEPTNO
---------- --------- ------------- ----------
MILLER     CLERK     NEW YORK              10



Ici pas d'alias pour deptno car il est utilisé par le NATURAL JOIN.

SQL> SELECT   e.ename, b.job, d.loc, deptno
  2    FROM   emp e NATURAL INNER JOIN dept d
  3                 INNER JOIN bonus b ON (e.ename = b.ename)
  4   WHERE   deptno = 10;

ENAME      JOB       LOC               DEPTNO
---------- --------- ------------- ----------
MILLER     CLERK     NEW YORK              10

SQL>

 

Exemple Jointure naturelle restreinte - JOIN USING.

 
Ici pas d'alias pour deptno car deptno est utilisé par le JOIN USING.

SQL> SELECT   e.ename, e.job, d.loc, deptno
  2    FROM   emp e INNER JOIN dept d USING (deptno)
  3   WHERE   deptno = 10;

ENAME      JOB       LOC               DEPTNO
---------- --------- ------------- ----------
CLARK      MANAGER   NEW YORK              10
KING       PRESIDENT NEW YORK              10
MILLER     CLERK     NEW YORK              10


Ici pas d'alias pour job et deptno car sont utilisés par les 2 JOIN USING.

SQL> SELECT   e.ename, job, d.loc, deptno
  2    FROM   emp e INNER JOIN dept d USING (deptno)
  3                 INNER JOIN bonus b USING (job)
  4   WHERE   deptno = 10;

ENAME      JOB       LOC               DEPTNO
---------- --------- ------------- ----------
MILLER     CLERK     NEW YORK              10

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
• Jointure SQL CROSS JOIN / CARTESIAN PRODUCT
• Jointure SQL FULL OUTER JOIN
• Jointure SQL LEFT / RIGHT OUTER JOIN
• SEMI JOINS et ANTI JOINS avec NOT IN / NOT EXISTS
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