Overblog Suivre ce blog
Administration Créer mon blog
5 juin 2012 2 05 /06 /juin /2012 17:09

 

JOINTURES SQL.

Comment écrire une jointure sql sous Oracle.
Comment faire une jointure sql entre 2 tables.

Une jointure sql permet de mettre en relation plusieurs tables afin d'en extraire des données conditionnées par des comparaisons de colonnes.
Les jointures sql sont obligatoires si plusieurs tables apparaissent dans la clause FROM d’une requête.

 Structure des tables A et B avec les données pour la démonstration en image des jointures sql dans Oracle. SQL> SELECT * FROM A; KEY COL_1 ---------- -------------------- 1 Jointure avec B 2 Jointure avec B 5 Absent dans B SQL> SELECT * FROM B; KEY COL_1 ---------- -------------------- 1 Jointure avec A 2 Jointure avec A Absent dans A 3 Absent dans A 

 

JOINTURE LEFT JOIN.

JOINTURE LEFT JOIN

 SQL> SELECT A.*,B.* FROM A LEFT JOIN B ON (A.KEY = B.KEY); KEY COL_1 KEY COL_1 ---------- -------------------- ---------- --------------- 1 Jointure avec B 1 Jointure avec A 2 Jointure avec B 2 Jointure avec A 5 Absent dans B SQL> 

JOINTURE LEFT JOIN

 SQL> SELECT A.*,B.* FROM A LEFT JOIN B ON (A.KEY = B.KEY) WHERE B.KEY IS NULL; KEY COL_1 KEY COL_1 ---------- -------------------- ---------- ----------------- 5 Absent dans B SQL> 

 


 

JOINTURE RIGHT JOIN.

JOINTURE RIGHT JOIN

 SQL> SELECT A.*,B.* FROM A RIGHT JOIN B ON (A.KEY = B.KEY); KEY COL_1 KEY COL_1 ---------- -------------------- ---------- ---------------- 1 Jointure avec B 1 Jointure avec A 2 Jointure avec B 2 Jointure avec A Absent dans A 3 Absent dans A SQL> 

JOINTURE RIGHT JOIN

 SQL> SELECT A.*,B.* FROM A RIGHT JOIN B ON (A.KEY=B.KEY) WHERE A.KEY IS NULL; KEY COL_1 KEY COL_1 ---------- -------------------- ---------- -------------- Absent dans A 3 Absent dans A SQL> 

 


 

JOINTURE INNER JOIN.

JOINTURE INNER JOIN

 SQL> SELECT A.*,B.* FROM A INNER JOIN B ON (A.KEY = B.KEY); KEY COL_1 KEY COL_1 ---------- -------------------- ---------- ---------------- 1 Jointure avec B 1 Jointure avec A 2 Jointure avec B 2 Jointure avec A SQL> 

 


 

JOINTURE FULL OUTER JOIN.

JOINTURE FULL OUTER JOIN

 SQL> SELECT A.*,B.* FROM A FULL OUTER JOIN B ON (A.KEY = B.KEY); KEY COL_1 KEY COL_1 ---------- -------------------- ---------- ---------------- 1 Jointure avec B 1 Jointure avec A 2 Jointure avec B 2 Jointure avec A 5 Absent dans B Absent dans A 3 Absent dans A SQL> 

JOINTURE FULL OUTER JOIN

 SQL> SELECT A.*,B.* FROM A FULL OUTER JOIN B ON (A.KEY = B.KEY) WHERE A.KEY IS NULL OR B.KEY IS NULL; KEY COL_1 KEY COL_1 ---------- -------------------- ---------- -------------- 5 Absent dans B Absent dans A 3 Absent dans A SQL> 

 

Haut de Page www.dba-ora.fr

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Les types de JOINTURES dans Oracle
• Jointure SQL OUTER JOIN
Repost 0
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
Repost 0
Published by Daniel Roesch - dans JOINTURES SQL - SQL JOINS
commenter cet article
26 juin 2011 7 26 /06 /juin /2011 11:19

 

Requête SQL SEMI JOINS / ANTI JOINS. (IN, EXISTS, NOT IN, NOT EXISTS)

C’est quoi un SEMI JOIN et un ANTI JOIN. ? Comment ça marche. ?

 

Exemple de Syntaxe Requêtes SEMI et ANTI JOINS.

 
 SELECT t1.column1, t1.column2 FROM table1 t1 WHERE [ NOT | [EXISTS (SELECT NULL FROM table2 t2 WHERE t1.column_name = t2.column_name)]]; 

 

SEMI JOINTURES = SEMI JOINS.
Une semi jointure est une jointure entre deux tables, où seulement une ligne de la première table gauche sera retourné au plus une fois pour laquelle une correspondance est trouvée même si dans la deuxième table droite il existe plusieurs correspondances. (EXISTS, IN).

L'opérateur EXISTS est toujours suivie par une sous-requête entre parenthèses.
EXISTS est évalué à TRUE si la requête renvoie au moins une ligne.

 

Exemple SEMI JOIN avec Opérateur EXISTS et IN.

 
 SQL> SELECT d.dname, d.loc 2 FROM dept d 3 WHERE EXISTS (SELECT 1 4 FROM emp e 5 WHERE e.deptno = d.deptno); DNAME LOC -------------- ------------- ACCOUNTING NEW YORK RESEARCH DALLAS SALES CHICAGO SQL> SELECT d.dname, d.loc 2 FROM dept d 3 WHERE d.deptno IN (SELECT e.deptno 4 FROM emp e 5 WHERE e.deptno = d.deptno); DNAME LOC -------------- ------------- ACCOUNTING NEW YORK RESEARCH DALLAS SALES CHICAGO SQL> 

Départements pour lesquels il existe au moins un salarié.

 

ANTI JOINTURES = ANTI JOINS
Une anti jointure est une jointure entre deux tables, où seulement une ligne de la première table gauche sera retourné au plus une fois pour laquelle aucune correspondance n’est trouvée dans la deuxième table droite (NOT EXISTS, NOT IN).

L'opérateur NOT EXISTS est toujours suivie par une sous-requête entre parenthèses.
NOT EXISTS est évalué à TRUE si la requête renvoie au moins une ligne.

 

Exemple ANTI JOIN avec Opérateur NOT EXISTS et NOT IN.

 
 SQL> SELECT d.dname, d.loc 2 FROM dept d 3 WHERE NOT EXISTS (SELECT 1 4 FROM emp e 5 WHERE e.deptno = d.deptno); DNAME LOC -------------- ------------- OPERATIONS BOSTON SQL> SELECT d.dname, d.loc 2 FROM dept d 3 WHERE d.deptno NOT IN (SELECT e.deptno 4 FROM emp e 5 WHERE e.deptno = d.deptno); DNAME LOC -------------- ------------- OPERATIONS BOSTON SQL> 

Départements pour lesquels il n'existe pas de salarié.

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
Repost 0
Published by Daniel Roesch - dans JOINTURES SQL - SQL JOINS
commenter cet article
25 juin 2011 6 25 /06 /juin /2011 19:00

 

Requête SQL CROSS JOIN / Produit CARTESIEN.

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

PRODUIT CARTESIEN = CROSS JOIN.

Un produit cartésien ou CROSS JOIN est une jointure entre plusieurs tables où il n’existe aucune condition de jointure. Chaque ligne d’une table est associée à chaque ligne de l’autre table.
Un produit cartésien est obtenu aussi si la clause WHERE est oubliée.

Exemple de Syntaxe Requêtes CROSS JOINS.

 
 SELECT t1.column, t2.column FROM table1 t1 [ CROSS JOIN table2 t2 ]; 

Imaginons une table CARTE (13 lignes du 2,3,4,... à l'AS) et une table COULEUR ( 4 lignes, Coeur, Pique, Trèfle, Carreau).
Le produit cartésien = Un jeu de 52 cartes  = CROSS JOIN.

Exemple Jointure CROSS JOIN.

 
 SQL> SQL> SELECT c.carte_id, cl.coul_carte 2 FROM carte c, couleur cl; SQL> SQL> SELECT c.carte_id, cl.coul_carte 2 FROM carte c CROSS JOIN couleur cl ; CARTE_ID COUL_CARTE ------------- ---------- 2 Coeur 2 Pique 2 Carreau 2 Trèfle 3 Coeur ...... .......... ROI Trèfle AS Coeur AS Pique AS Carreau AS Trèfle 52 rows selected. 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 LEFT / RIGHT OUTER JOIN
• Jointure SQL FULL OUTER JOIN
Repost 0
Published by Daniel Roesch - dans JOINTURES SQL - SQL JOINS
commenter cet article
25 juin 2011 6 25 /06 /juin /2011 17:03

 

Requête SQL JOINTURES EXTERNES FULL OUTER JOIN.

C’est quoi un FULL OUTER JOIN. ? Comment ça marche une jointure externe. ?

JOINTURES EXTERNES = FULL 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 FULL renvoie toutes les lignes qui satisfont la condition de jointure et retourne également une partie de ces lignes de la table 1 pour laquelle aucune des lignes de la table 2 ne satisfait la condition de jointure et vice versa.

RIGHT OUTER JOIN -UNION- LEFT OUTER JOIN = FULL OUTER JOIN.

Le sens de la jointure externe  FULL de la clause OUTER JOIN ignore l'ordre des tables.

FROM table1 t1 FULL OUTER JOIN table2 t2 ON (t1.column_name = t2.column_name);
FROM table2 t2 FULL OUTER JOIN table1 t1 ON (t1.column_name = t2.column_name);

Exemple de Syntaxe Requêtes FULL OUTER JOINS.

 
 SELECT t1.column, t2.column FROM table1 t1 [ FULL [OUTER JOIN table2 t2 ON (t1.column_name = t2.column_name)]]; 

 

Exemple jointure externe FULL OUTER JOIN.

 
 SQL> SELECT e.ename, e.job, e.deptno 2 ,d.loc, d.deptno "Dept" 3 FROM emp e FULL OUTER JOIN dept d 4 ON (e.deptno = d.deptno); ENAME JOB DEPTNO LOC Dept ---------- --------- ---------- ------------- ---------- SMITH CLERK 20 DALLAS 20 ALLEN SALESMAN 30 CHICAGO 30 WARD SALESMAN 30 CHICAGO 30 JONES MANAGER 20 DALLAS 20 MARTIN SALESMAN 30 CHICAGO 30 BLAKE MANAGER 30 CHICAGO 30 CLARK MANAGER 10 NEW YORK 10 SCOTT ANALYST 20 DALLAS 20 KING PRESIDENT 10 NEW YORK 10 TURNER SALESMAN 30 CHICAGO 30 ADAMS CLERK 20 DALLAS 20 JAMES CLERK 30 CHICAGO 30 FORD ANALYST 20 DALLAS 20 MILLER CLERK 10 NEW YORK 10 DAN DBA BOSTON 40 16 rows selected. SQL> SELECT e.ename, e.job, e.deptno 2 ,d.loc, d.deptno "Dept" 3 FROM emp e, dept d 4 WHERE e.deptno(+) = d.deptno 5 UNION 6 SELECT e.ename, e.job, e.deptno 7 ,d.loc, d.deptno "Dept" 8 FROM emp e, dept d 9 WHERE e.deptno = d.deptno(+); ENAME JOB DEPTNO LOC Dept ---------- --------- ---------- ------------- ---------- ADAMS CLERK 20 DALLAS 20 ALLEN SALESMAN 30 CHICAGO 30 BLAKE MANAGER 30 CHICAGO 30 CLARK MANAGER 10 NEW YORK 10 DAN DBA FORD ANALYST 20 DALLAS 20 JAMES CLERK 30 CHICAGO 30 JONES MANAGER 20 DALLAS 20 KING PRESIDENT 10 NEW YORK 10 MARTIN SALESMAN 30 CHICAGO 30 MILLER CLERK 10 NEW YORK 10 SCOTT ANALYST 20 DALLAS 20 SMITH CLERK 20 DALLAS 20 TURNER SALESMAN 30 CHICAGO 30 WARD SALESMAN 30 CHICAGO 30 BOSTON 40 16 rows selected. 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 LEFT / RIGHT OUTER JOIN
Repost 0
Published by Daniel Roesch - dans JOINTURES SQL - SQL JOINS
commenter cet article
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
Repost 0
Published by Daniel Roesch - dans JOINTURES SQL - SQL JOINS
commenter cet article
23 juin 2011 4 23 /06 /juin /2011 23:04

 

Requête SQL AUTO JOINTURE - SELF JOINS dans Oracle.

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

AUTO JOINTURES = SELF JOINS. Une auto jointure est une jointure d’une table sur elle même. La table apparait 2 fois dans la clause FROM car la même table sera parcourue deux fois. Des alias de tables seront utilisés afin de pouvoir qualifier les colonnes dans la condition de jointure.

Un SELF JOINS peut etre composé soit d'un INNER-JOIN /EQUI-JOIN / OUTER-JOIN.

Généralement dans ce type de jointure, ce sont les Primary Key ou Foreign Key qui sont utilisées.

Exemple de Syntaxe Requêtes SELF JOINS.

 
 SELECT t1.column, t2.column FROM table1 t1 [ INNER JOIN table1 t2 ON (t1.column_name = t2.column_name) ] | [ LEFT | RIGHT | FULL [OUTER JOIN table1 t2 ON (t1.column_name = t2.column_name)]]; 

 

Exemple jointure SELF JOIN.

 
 SQL> SELECT e1.ename || ' son superieur est ' || e2.ename AS "Hierarchie" 2 FROM emp e1, emp e2 3 WHERE e1.mgr = e2.empno 4 AND e1.deptno = 10; Hierarchie ----------------------------------------- CLARK son superieur est KING MILLER son superieur est CLARK 
SQL> SELECT e1.ename || ' son superieur est ' || e2.ename AS "Hierarchie" 2 FROM emp e1 INNER JOIN emp e2 3 ON (e1.mgr = e2.empno) 4 WHERE e1.deptno = 10; Hierarchie ----------------------------------------- CLARK son superieur est KING MILLER son superieur est CLARK SQL>

Ici la colonne MGR de la table EMP contient l'ID du supérieur hiérarchique et la colonne EMPNO de la table EMP contient l'ID du salarié. Nous avons listés tous les employés qui ont un supérieur dans le département N° 10.

Maintenant si on nous demande de sortir la liste de tous les employés avec leur supérieurs dans le département N° 10, nous allons devoir faire une jointure externe (OUTER-JOIN). Pourquoi ? Simplement parce que l'employé KING n'a pas de supérieur hiérarchique, la colonne MGR (ID du supérieur) est à null, normal c'est le grand chef...donc il n'apparaîtra pas sur cette liste avec une simple jointure interne (INNER JOIN) basée sur un opérateur d'egalité.

Exemple jointure SELF JOIN avec un OUTER-JOIN.

 
 SQL> SELECT e1.ename 2 || ' son superieur est ' 3 || DECODE (e2.ename, NULL, ' IS NULL', e2.ename) 4 AS "Hierarchie" 5 FROM emp e1, emp e2 6 WHERE e1.mgr = e2.empno(+) 7 AND e1.deptno = 10; Hierarchie ----------------------------------------- CLARK son superieur est KING KING son superieur est IS NULL MILLER son superieur est CLARK 
SQL> SELECT e1.ename 2 || ' son superieur est ' 3 || DECODE (e2.ename, NULL, ' IS NULL', e2.ename) 4 AS "Hierarchie" 5 FROM emp e1 LEFT OUTER JOIN emp e2 6 ON (e1.mgr = e2.empno) 7 WHERE e1.deptno = 10; Hierarchie ----------------------------------------- CLARK son superieur est KING KING son superieur est IS NULL MILLER son superieur est CLARK SQL>

Ici, l'utilisation de la fonction DECODE est uniquement présente pour formater la colonne de la liste avec une valeur..

 

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
Repost 0
Published by Daniel Roesch - dans JOINTURES SQL - SQL JOINS
commenter cet article
22 juin 2011 3 22 /06 /juin /2011 18:59

 

Requete SQL INNER JOINS / EQUI JOINS.

C’est quoi un INNER JOINS ? Comment ça marche. ?

JOINTURES INTERNES = INNER JOINS.EQUIJOINTURES = EQUI JOINS.

Une jointure interne ou équijointure est une jointure avec une condition de jointure contenant un opérateur d‘égalité.
C’est la plus répandue, elle combine les lignes qui ont des valeurs équivalentes pour les colonnes de la jointure.

Généralement dans ce type de jointure, ce sont les Primary Key et Foreign Key qui sont utilisées.

Syntaxe Requêtes INNER JOINS / EQUI JOINS.

 
 SELECT table1.column, table2.column FROM table1 [ JOIN table2 USING (column_name) ] | [ JOIN table2 ON (table1.column_name = table2.column_name) ]; 

 

Exemple jointure INNER JOINS / EQUI JOINS.

 
 SQL> SELECT e.ename, e.job, d.loc 2 FROM EMP e, DEPT d 3 WHERE e.deptno = d.deptno 4 AND e.deptno = 10; ENAME JOB LOC ---------- --------- ------------- CLARK MANAGER NEW YORK KING PRESIDENT NEW YORK MILLER CLERK NEW YORK 
 SQL> SELECT e.ename, e.job, d.loc 2 FROM EMP e INNER JOIN DEPT d 3 ON (e.deptno = d.deptno) 4 WHERE e.deptno = 10; ENAME JOB LOC ---------- --------- ------------- CLARK MANAGER NEW YORK KING PRESIDENT NEW YORK MILLER CLERK NEW YORK 
 SQL> SELECT e.ename, e.job, d.loc 2 FROM EMP e JOIN DEPT d USING (deptno) 3 WHERE deptno = 10; ENAME JOB LOC ---------- --------- ------------- CLARK MANAGER NEW YORK KING PRESIDENT NEW YORK MILLER CLERK NEW YORK SQL> 

La directive INNER devant JOIN est optionnelle.
La directive USING(deptno) de la clause JOIN programme une jointure naturelle (même nom de colonne) restreinte sur la colonne deptno des deux tables.
Pas d’alias de tables dans la directive USING.

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Les types de JOINTURES dans ORACLE
Repost 0
Published by Daniel Roesch - dans JOINTURES SQL - SQL JOINS
commenter cet article
22 juin 2011 3 22 /06 /juin /2011 13:19

 

LES JOINTURES DANS ORACLE.

C’est quoi une jointure ? A quoi sert une jointure ? Comment ça marche ?

Une jointure permet d’extraire des données issues de plusieurs tables.
Une jointure met en relation deux tables à partir d’une condition de jointure.
La condition de jointure compare deux colonnes de deux tables différentes.

Les conditions de jointures sont soit dans la clause :
FROM (SQL2 - SQL92)
WHERE (SQL89 ou Procédurales)

La majorité des requêtes utilisent des jointures car elles sont nécessaires pour pouvoir extraire des données de tables distinctes.
On parle de jointure lorsque plusieurs tables apparaissent dans la clause FROM d’une requête.

La clause SELECT permet de sélectionner les colonnes des tables, les colonnes présentes dans les conditions de jointure des clauses FROM / WHERE ne sont pas obligatoires dans la clause SELECT.

Si dans ces tables, des colonnes possèdent le même nom, alors il faut faire précéder les noms de colonnes par le nom de la table en question afin de supprimer toute ambiguïté ou par un Alias de table ce qui de plus, augmente les performances d’exécutions.
Pour exécuter une jointure sur plusieurs tables, Oracle joint d’abord 2 tables sur la base des conditions de jointure en comparant les colonnes et ensuite rejoint le résultat à une autre table en fonction des conditions de jointures, et ainsi de suite tout en s’appuyant évidemment sur les index et différentes statistiques des tables.

Il existe différents types de jointure suivant l’operateur de comparaison, la clause de jointure et les tables.

LES TYPES DE JOINTURES

JOINTURES INTERNES = INNER JOINS ou EQUIJOINTURES = EQUI JOINS.
Une jointure interne ou équijointure est une jointure avec une condition de jointure contenant un opérateur d‘égalité.
C’est la plus répandue, elle combine les lignes qui ont des valeurs équivalentes pour les colonnes de la jointure.

 

NON EQUIJOINTURES = NON EQUIJOINS.
Une non équijointure est une jointure avec une condition de jointure contenant un opérateur d‘inégalité.
Elle combine les lignes qui ont des valeurs d’inégalités pour les colonnes de la jointure.

 

AUTO JOINTURES = SELF JOINS.
Une auto jointure est une jointure d’une table sur elle même.
La table apparait 2 fois dans la clause FROM avec des alias de tables afin de pouvoir qualifier les colonnes dans la condition de jointure.

 

JOINTURES EXTERNES = OUTER JOINS.
Une jointure externe élargie le résultat d’une jointure simple (INNER JOINS) et permet 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.

 

SEMI JOINTURES = SEMI JOINS.
Une semi jointure est une jointure entre deux tables, où seulement une ligne de la première table gauche sera retourné au plus une fois pour laquelle une correspondance est trouvée même si dans la deuxième table droite il existe plusieurs correspondances. (EXISTS, IN).

 

ANTI JOINTURES = ANTI JOINS
Une anti jointure est une jointure entre deux tables, où seulement une ligne de la première table gauche sera retourné au plus une fois pour laquelle aucune correspondance n’est trouvée dans la deuxième table droite (NOT EXISTS, NOT IN).

 

PRODUITS CARTESIENS = CARTESIAN PRODUCTS.
Un produit cartésien est une jointure entre plusieurs tables où il n’existe aucune condition de jointure.
Chaque ligne d’une table est associée à chaque ligne de l’autre table. (CROSS JOIN)

 

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
 
Repost 0
Published by Daniel Roesch - dans JOINTURES SQL - SQL JOINS
commenter cet article