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
SELECT t1.column1, t1.column2 FROM table1 t1 [ INNER JOIN table2 t2 USING (column_name1, column_name2,...) ] | [ NATURAL INNER JOIN table2 ]; |
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> |
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 |