Écriture de Sous-Interrogations Synchronisées | SQL Oracle

10

Click here to load reader

Transcript of Écriture de Sous-Interrogations Synchronisées | SQL Oracle

Page 1: Écriture de Sous-Interrogations Synchronisées | SQL Oracle

Copyright Oracle Corporation, 1998. Tous droits réservés.

99

Écriture de Sous-Interrogations Synchronisées

www.TelechargerCours.com

Page 2: Écriture de Sous-Interrogations Synchronisées | SQL Oracle

9-2 Copyright Oracle Corporation, 1998. Tous droits réservés.

ObjectifsA la fin de ce chapitre, vous saurez :A la fin de ce chapitre, vous saurez :

• Décrire les types de problèmes qui peuvent être résolus à l'aide de Sous-Interrogations Synchronisées

• Écrire des Sous-Interrogations Synchronisées

• Utiliser les opérateurs EXISTS et NOT EXISTS

www.TelechargerCours.com

Page 3: Écriture de Sous-Interrogations Synchronisées | SQL Oracle

9-3 Copyright Oracle Corporation, 1998. Tous droits réservés.

Exemple & ProblèmeSupposons qu’on veut afficher tous les Supposons qu’on veut afficher tous les employés ayant un salaire supérieur au employés ayant un salaire supérieur au salaire moyen de leur département.salaire moyen de leur département.

Deux solutionsDeux solutions

1. Utiliser une S.I dans la clause FROM1. Utiliser une S.I dans la clause FROM

2. Utiliser une S.I 2. Utiliser une S.I SynchroniséeSynchronisée

www.TelechargerCours.com

Page 4: Écriture de Sous-Interrogations Synchronisées | SQL Oracle

9-4 Copyright Oracle Corporation, 1998. Tous droits réservés.

Sous-Interrogations Synchronisées

Conçue pour un traitement ligne à ligne, Conçue pour un traitement ligne à ligne, chaque sous-interrogation est exécutée chaque sous-interrogation est exécutée une seule fois pour chaque ligne de la une seule fois pour chaque ligne de la requête externe.requête externe.

GETligne candidate

EXECUTErequête interne utilisant une valeur de

la ligne candidate

USEvaleur(s) de la requête interne qualifiant la ligne candidate

Page 5: Écriture de Sous-Interrogations Synchronisées | SQL Oracle

9-5 Copyright Oracle Corporation, 1998. Tous droits réservés.

Sous-Interrogations Synchronisées

SyntaxeSyntaxe

SELECT outer1, outer2, ... FROM table1 alias1 WHERE outer1 operator (SELECT inner1 FROM table2 alias2 WHERE alias1.outer2 = alias2.inner1);

La sous-interrogation fait référence à une colonne d'une table de la requête principale.

www.TelechargerCours.com

Page 6: Écriture de Sous-Interrogations Synchronisées | SQL Oracle

9-6 Copyright Oracle Corporation, 1998. Tous droits réservés.

Utilisation de Sous-Interrogations Synchronisées

Chaque fois que la requêteexterne est traitée,

la requête interne est exécutée.

EMPNO SAL DEPTNO-------- --------- --------- 7839 5000 10 7698 2850 30 7566 2975 20 ... 6 rows selected.

EMPNO SAL DEPTNO-------- --------- --------- 7839 5000 10 7698 2850 30 7566 2975 20 ... 6 rows selected.

Recherchez tous les employés dont le Recherchez tous les employés dont le salaire est supérieur au salaire moyen de salaire est supérieur au salaire moyen de leur département.leur département.SQL> SELECT empno, sal, deptno 2 FROM emp e 3 WHERE sal > (SELECT AVG(sal) 4 FROM emp e1 5 WHERE e.deptno = e1.deptno);

Page 7: Écriture de Sous-Interrogations Synchronisées | SQL Oracle

9-7 Copyright Oracle Corporation, 1998. Tous droits réservés.

Utilisation de l'Opérateur EXISTS

Dès qu'il trouve une ligne par la sous-Dès qu'il trouve une ligne par la sous-interrogation :interrogation :

• La recherche dans la requête interne est interrompue.

• La condition est vraie (TRUE).

S'il ne trouve aucune ligne par la sous-S'il ne trouve aucune ligne par la sous-interrogation :interrogation :

• La condition est fausse (FALSE).

www.TelechargerCours.com

Page 8: Écriture de Sous-Interrogations Synchronisées | SQL Oracle

9-8 Copyright Oracle Corporation, 1998. Tous droits réservés.

Recherchez les employés ayant au moins une personne sous leur responsabilité.

Utilisation de l'Opérateur EXISTS

EMPNO ENAME JOB DEPTNO--------- ---------- --------- --------- 7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20...6 rows selected.

SQL> SELECT empno, ename, job, deptno 2 FROM emp outer 3 WHERE EXISTS (SELECT empno 4 FROM emp inner 5 WHERE inner.mgr = outer.empno);

Page 9: Écriture de Sous-Interrogations Synchronisées | SQL Oracle

9-9 Copyright Oracle Corporation, 1998. Tous droits réservés.

Recherchez tous les départements qui ne comprennent pas d'employés.

Utilisation de l'OpérateurNOT EXISTS

DEPTNO DNAME--------- ---------- 40 OPERATIONS

DEPTNO DNAME--------- ---------- 40 OPERATIONS

SQL> SELECT deptno, dname 2 FROM dept d 3 WHERE NOT EXISTS (SELECT '1' 4 FROM emp e 5 WHERE d.deptno = e.deptno);

www.TelechargerCours.com

Page 10: Écriture de Sous-Interrogations Synchronisées | SQL Oracle

9-10 Copyright Oracle Corporation, 1998. Tous droits réservés.

Résumé

• Les Sous-Interrogations Synchronisées s'avèrent très utiles chaque fois qu'une sous-interrogation doit retourner un résultat différent pour chaque ligne candidate.

• EXISTS est un opérateur booléen qui permet de tester l'existence d'une valeur.

• Il est possible d'utiliser des Sous-Interrogations Synchronisées avec les ordres SELECT, UPDATE et DELETE.

www.TelechargerCours.com