Overblog Suivre ce blog
Editer l'article Administration Créer mon blog
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

Partager cet article

Repost 0
Published by Daniel Roesch - dans JOINTURES SQL - SQL JOINS
commenter cet article

commentaires