Dimanche 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
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