Your SlideShare is downloading. ×
0
Écriture de Sous-Interrogations Synchronisées | SQL Oracle
Écriture de Sous-Interrogations Synchronisées | SQL Oracle
Écriture de Sous-Interrogations Synchronisées | SQL Oracle
Écriture de Sous-Interrogations Synchronisées | SQL Oracle
Écriture de Sous-Interrogations Synchronisées | SQL Oracle
Écriture de Sous-Interrogations Synchronisées | SQL Oracle
Écriture de Sous-Interrogations Synchronisées | SQL Oracle
Écriture de Sous-Interrogations Synchronisées | SQL Oracle
Écriture de Sous-Interrogations Synchronisées | SQL Oracle
Écriture de Sous-Interrogations Synchronisées | SQL Oracle
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

414

Published on

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

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

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
414
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
29
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Objectifs Dans ce chapitre, vous allez apprendre à résoudre différents problèmes à l'aide de Sous-Interrogations Synchronisées.
  • Utilisation de Sous-Interrogations Synchronisées Dans l'exemple ci-dessus, nous recherchons les employés dont le salaire est supérieur au salaire moyen de leur département. Dans ce cas, la Sous-Interrogation Synchronisée calcule explicitement le salaire moyen de chaque département. Comme les requêtes externe et interne utilisent toutes les deux la table EMP dans la clause FROM, un alias est attribué à chaque ordre SELECT pour plus de clarté. Grâce aux alias, les ordres SELECT deviennent plus lisibles et la requête s'exécute correctement, car elle peut distinguer la colonne de la table interne de celle de la table externe, ce qui ne serait pas possible sans les alias.
  • Sous-Interrogations Synchronisées Une Sous-Interrogation Synchronisée ou Corrrélée est une sous-interrogation imbriquée qui est exécutée une seule fois pour chaque ligne traitée par la requête principale et qui, pendant son exécution, utilise une valeur d'une colonne de la requête externe. sous-interrogations Imbriquées et Sous-Interrogations Synchronisées Avec une sous-interrogation imbriquée normale, l'ordre SELECT interne est d'abord exécuté pour retourner des valeurs qui seront récupérées par la requête principale. Par contre, une Sous-Interrogation Synchronisée est exécutée une fois pour chaque ligne candidate prise en compte par la requête externe. Autrement dit, la requête interne est pilotée par la requête externe. Exécution d'une Sous-Interrogation Synchronisée 1. Récupérer une ligne candidate (extraite par la requête externe). 2. Exécuter la requête interne avec la valeur de la ligne candidate. 3. Utiliser la ou les valeurs résultant de la requête interne pour sélectionner ou ne pas sélectionner la ligne candidate. 4. Répéter ces étapes jusqu'à ce qu'il ne reste plus de lignes candidates. Même si cette description est centrée principalement sur les Sous-Interrogations Synchronisées des ordres SELECT, elle s'applique également aux ordres UPDATE et DELETE (voir chapitre concernant la Manipulation des Données).
  • Sous-Interrogations Synchronisées (suite) Une Sous-Interrogation Synchronisée permet de "lire" chaque ligne d'une table et de comparer les valeurs de chaque ligne aux données associées. Elle est utilisée chaque fois qu'une sous-interrogation doit retourner un résultat ou un ensemble de résultats différent pour chaque ligne candidate prise en compte par la requête principale. Autrement dit, une Sous-Interrogation Synchronisée permet de répondre à une question à plusieurs choix, dont la réponse dépend de la valeur de chaque ligne traitée par l'ordre maître. Oracle exécute une Sous-Interrogation Synchronisée lorsque la sous-interrogation fait référence à une colonne d'une table de la requête principale.
  • Utilisation de Sous-Interrogations Synchronisées Dans l'exemple ci-dessus, nous recherchons les employés dont le salaire est supérieur au salaire moyen de leur département. Dans ce cas, la Sous-Interrogation Synchronisée calcule explicitement le salaire moyen de chaque département. Comme les requêtes externe et interne utilisent toutes les deux la table EMP dans la clause FROM, un alias est attribué à chaque ordre SELECT pour plus de clarté. Grâce aux alias, les ordres SELECT deviennent plus lisibles et la requête s'exécute correctement, car elle peut distinguer la colonne de la table interne de celle de la table externe, ce qui ne serait pas possible sans les alias.
  • L'Opérateur EXISTS Avec des ordres SELECT imbriqués, tous les opérateurs logiques sont valides. De plus, vous pouvez recourir à l'opérateur EXISTS. Cet opérateur est souvent utilisé dans les Sous-Interrogations Synchronisées, car il permet de tester s'il existe une valeur. Si la valeur existe, il retourne la valeur TRUE (vrai) ; sinon, il retourne la valeur FALSE (faux). De la même façon, l'opérateur NOT EXISTS garantit qu'il n'existe aucune valeur.
  • Utilisation de l'Opérateur EXISTS Cet opérateur garantit que la recherche dans la requête interne ne se poursuivra pas s'il existe au moins une correspondance entre un responsable et des numéros d'employés.
  • Utilisation de l'Opérateur EXISTS (suite) Notez que l'ordre interne SELECT ne doit pas retourner nécessairement une valeur spécifique, étant donné qu'aucun littéral ne peut être sélectionné. Pour des raisons de performances, il est plus rapide de sélectionner une constante qu'une colonne. Autre solution Comme le montre cet exemple, il est possible d'utiliser une structure NOT IN à la place de l'opérateur NOT EXISTS. Cependant, vous devez l'utiliser avec prudence, car elle retourne la valeur FALSE si un membre du groupe a une valeur NULL. Dans ce cas, votre requête ne ramènera aucune ligne. SQL> SELECT deptno, dname 2 FROM dept 3 WHERE deptno NOT IN (SELECT deptno 4 FROM emp);
  • Même si cette description est centrée principalement sur les Sous-Interrogations Synchronisées des ordres SELECT, elle s'applique également aux ordres UPDATE et DELETE (voir chapitre concernant la Manipulation des Données).
  • Transcript

    • 1. Copyright © Oracle Corporation, 1998. Tous droits réservés. 99 Écriture de Sous- Interrogations Synchronisées www.TelechargerCours.com
    • 2. 9-2 Copyright © Oracle Corporation, 1998. Tous droits réservés. Objectifs A 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
    • 3. 9-3 Copyright © Oracle Corporation, 1998. Tous droits réservés. Exemple & Problème Supposons qu’on veut afficher tous lesSupposons qu’on veut afficher tous les employés ayant un salaire supérieur auemployé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.I2. Utiliser une S.I SynchroniséeSynchronisée www.TelechargerCours.com
    • 4. 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éechaque sous-interrogation est exécutée une seule fois pour chaque ligne de laune seule fois pour chaque ligne de la requête externe.requête externe. GET ligne candidate EXECUTE requête interne utilisant une valeur de la ligne candidate USE valeur(s) de la requête interne qualifiant la ligne candidate
    • 5. 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
    • 6. 9-6 Copyright © Oracle Corporation, 1998. Tous droits réservés. Utilisation de Sous- Interrogations Synchronisées Chaque fois que la requête externe 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 leRecherchez tous les employés dont le salaire est supérieur au salaire moyen desalaire 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);
    • 7. 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
    • 8. 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);
    • 9. 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érateur NOT 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
    • 10. 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

    ×