Sous-Interrogations - sql oracle

1,262 views

Published on

Sous-Interrogations - sql oracle

Published in: Education
  • Be the first to comment

Sous-Interrogations - sql oracle

  1. 1. Copyright © Oracle Corporation, 1997. Tous droits réservés. 77 Sous-Interrogations www.TelechargerCours.com
  2. 2. 7-2 Copyright © Oracle Corporation, 1997. 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 que les sous-interrogations peuvent résoudre • Définir des sous-interrogations • Enumérer les types de sous- interrogations • Ecrire des sous-interrogations mono- ligne et multi-ligne www.TelechargerCours.com
  3. 3. 7-3 Copyright © Oracle Corporation, 1997. Tous droits réservés. Définition Une Sous-interrogation est un ordre SELECTUne Sous-interrogation est un ordre SELECT imbriqué dans une clause d’un autre ordreimbriqué dans une clause d’un autre ordre SELECT .SELECT . Elles permettent de sélectionner des lignes d’uneElles permettent de sélectionner des lignes d’une table lorsque la condition dépend des donnéestable lorsque la condition dépend des données de la table elle-même .de la table elle-même . Peuvent être placées dans les clauses SQLPeuvent être placées dans les clauses SQL suivantes :suivantes : WHEREWHERE HAVINGHAVING FROMFROM www.TelechargerCours.com
  4. 4. 7-4 Copyright © Oracle Corporation, 1997. Tous droits réservés. Utilisation d'une Sous-Interrogation pour Résoudre un Problème "Qui a un salaire supérieur à celui de Jones ?""Qui a un salaire supérieur à celui de Jones ?" "Quel employé a un salaire supérieur à celui de Jones ?" Requête principale ?? "Quel est le salaire de Jones ?" ?? sous-interrogation www.TelechargerCours.com
  5. 5. 7-5 Copyright © Oracle Corporation, 1997. Tous droits réservés. Sous-Interrogations • La sous-interrogation (requête interne) est exécutée une fois avant la requête principale. • Le résultat de la sous-interrogation est utilisé par la requête principale (externe). SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table); www.TelechargerCours.com
  6. 6. 7-6 Copyright © Oracle Corporation, 1997. Tous droits réservés. 2975 SQL> SELECT ename 2 FROM emp 3 WHERE sal > 4 (SELECT sal 5 FROM emp 6 WHERE empno=7566); Utilisation d'une Sous-Interrogation ENAME ---------- KING FORD SCOTT ENAME ---------- KING FORD SCOTT www.TelechargerCours.com
  7. 7. 7-7 Copyright © Oracle Corporation, 1997. Tous droits réservés. Conventions d'Utilisation des Sous-Interrogations • Placez les sous-interrogations entre parenthèses. • Placez les sous-interrogations à droite de l'opérateur de comparaison. • N'ajoutez jamais de clause ORDER BY à une sous-interrogation. • Utilisez les opérateurs mono-ligne avec les sous-interrogations mono-ligne. • Utilisez les opérateurs multi-ligne avec les sous-interrogations multi-ligne.
  8. 8. 7-8 Copyright © Oracle Corporation, 1997. Tous droits réservés. Types de Sous-Interrogations • Sous-interrogation mono-ligne Requête principale sous-interrogation ramèneramène CLERKCLERK • Sous-interrogation multi-ligne CLERKCLERK MANAGERMANAGER Requête principale ramèneramène • Sous-interrogation multi-colonne CLERK 7900CLERK 7900 MANAGER 7698MANAGER 7698 Requête principale ramèneramène sous-interrogation sous-interrogation
  9. 9. 7-9 Copyright © Oracle Corporation, 1997. Tous droits réservés. Sous-Interrogations Mono-ligne • Ne ramènent qu'une seule ligne • Utilisent des opérateurs de comparaison mono-ligne Opérateur = > >= < <= <> Signification Egal à Supérieur à Supérieur ou égal à Inférieur à Inférieur ou égal à Différent de
  10. 10. 7-10 Copyright © Oracle Corporation, 1997. Tous droits réservés. Sous-Interrogations Mono-ligne Afficher les employés occupant le même poste que l’employé No. 7369 ? SELECT ename, job FROM emp WHERE job = ( SELECT job FROM emp WHERE empno=7369 );
  11. 11. 7-11 Copyright © Oracle Corporation, 1997. Tous droits réservés. Exécution de Sous-Interrogations Mono-ligne CLERK 1100 ENAME JOB ---------- --------- MILLER CLERK ENAME JOB ---------- --------- MILLER CLERK SQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4 (SELECT job 5 FROM emp 6 WHERE empno = 7369) 7 AND sal > 8 (SELECT sal 9 FROM emp 10 WHERE empno = 7876);
  12. 12. 7-12 Copyright © Oracle Corporation, 1997. Tous droits réservés. Utilisation de Fonctions de Groupe dans une Sous- Interrogation 800 ENAME JOB SAL ---------- --------- --------- SMITH CLERK 800 ENAME JOB SAL ---------- --------- --------- SMITH CLERK 800 SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp); www.TelechargerCours.com
  13. 13. 7-13 Copyright © Oracle Corporation, 1997. Tous droits réservés. Clause HAVING avec Sous- Interrogations • Oracle Server exécute les sous- interrogations en premier. • Oracle Server ramène les résultats dans la clause HAVING de la requête principale. 800 SQL> SELECT deptno, MIN(sal) 2 FROM emp 3 GROUP BY deptno 4 HAVING MIN(sal) > 5 (SELECT MIN(sal) 6 FROM emp 7 WHERE deptno = 20);
  14. 14. 7-14 Copyright © Oracle Corporation, 1997. Tous droits réservés. Exemple • Trouver le poste ayant le salaire moyen le moins élevé . SELECT job, AVG(sal) FROM emp GROUP BY job HAVING AVG(sal) = ( SELECT MIN(AVG(sal)) FROM emp GROUP B job ) www.TelechargerCours.com
  15. 15. 7-15 Copyright © Oracle Corporation, 1997. Tous droits réservés. Qu'est-ce Qui ne Va pas dans cet Ordre ? ERROR: ORA-01427: single-row sub-query returns more than one row no rows selected ERROR: ORA-01427: single-row sub-query returns more than one row no rows selected SQL> SELECT empno, ename 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp 6 GROUP BY deptno); O pérateur m ono-ligne avec sous-interrogation m ulti-ligne O pérateur m ono-ligne avec sous-interrogation m ulti-ligne www.TelechargerCours.com
  16. 16. 7-16 Copyright © Oracle Corporation, 1997. Tous droits réservés. Cet Ordre Va-t-il Fonctionner ? no rows selectedno rows selected La sous-interrogation ne ram ène aucune valeur La sous-interrogation ne ram ène aucune valeur SQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4 (SELECT job 5 FROM emp 6 WHERE ename='SMYTHE'); www.TelechargerCours.com
  17. 17. 7-17 Copyright © Oracle Corporation, 1997. Tous droits réservés. Sous-Interrogation Multi-ligne • Ramène plusieurs lignes • Utilise des opérateurs de comparaison multi-ligne Opérateur IN ANY ALL Signification Egal à un élément quelconque de la liste Compare la valeur à chaque valeur ramenée par la sous-interrogation Compare la valeur à toutes les valeurs ramenées par la sous-interrogation www.TelechargerCours.com
  18. 18. 7-18 Copyright © Oracle Corporation, 1997. Tous droits réservés. Exemple • Trouver les employés qui gagnent l’équivalent d’un salaire minimum de département . SELECT ename, sal, deptno FROM emp WHERE sal ( SELECT MIN(sal) FROM emp GROUP B deptno ) IN www.TelechargerCours.com
  19. 19. 7-19 Copyright © Oracle Corporation, 1997. Tous droits réservés. Utilisation de l'Opérateur ANY dans les Sous-Interrogations Multi- ligne 950 800 1100 1300 EMPNO ENAME JOB --------- ---------- --------- 7654 MARTIN SALESMAN 7521 WARD SALESMAN EMPNO ENAME JOB --------- ---------- --------- 7654 MARTIN SALESMAN 7521 WARD SALESMAN SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal < ANY 4 (SELECT sal 5 FROM emp 6 WHERE job = 'CLERK') 7 AND job <> 'CLERK'; www.TelechargerCours.com
  20. 20. 7-20 Copyright © Oracle Corporation, 1997. Tous droits réservés. Utilisation de l'Opérateur ALL dans les Sous-Interrogations Multi-ligne 2916.6667 2175 1566.6667 EMPNO ENAME JOB --------- ---------- --------- 7839 KING PRESIDENT 7566 JONES MANAGER 7902 FORD ANALYST 7788 SCOTT ANALYST EMPNO ENAME JOB --------- ---------- --------- 7839 KING PRESIDENT 7566 JONES MANAGER 7902 FORD ANALYST 7788 SCOTT ANALYST SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal > ALL 4 (SELECT avg(sal) 5 FROM emp 6 GROUP BY deptno)
  21. 21. 7-21 Copyright © Oracle Corporation, 1997. Tous droits réservés. Résumé Les sous-interrogations sont utilesLes sous-interrogations sont utiles lorsqu'une requête fait appel à des valeurslorsqu'une requête fait appel à des valeurs inconnues.inconnues. SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table); www.TelechargerCours.com

×