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

Partager cet article

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

commentaires