1 / 20

Sous-Interrogations

Sous-Interrogations. Objectifs. 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. Définition.

Télécharger la présentation

Sous-Interrogations

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Sous-Interrogations

  2. Objectifs • 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

  3. Définition • Une Sous-interrogation est un ordre SELECT imbriqué dans une clause d’un autre ordre SELECT . • Elles permettent de sélectionner des lignes d’une table lorsque la condition dépend des données de la table elle-même . • Peuvent être placées dans les clauses SQL suivantes : • WHERE • HAVING • FROM

  4. Utilisation d'une Sous-Interrogation pour Résoudre un Problème • "Qui a un salaire supérieur à celui de Jones ?" Requête principale "Quel employé a un salaire supérieur à celui de Jones ?" ? sous-interrogation ? "Quel est le salaire de Jones ?"

  5. Sous-Interrogations SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table); • 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).

  6. 2975 Utilisation d'une Sous-Interrogation SQL> SELECT ename 2 FROM emp 3 WHERE sal > 4 (SELECT sal 5 FROM emp 6 WHERE empno=7566); ENAME ---------- KING FORD SCOTT

  7. 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. Types de Sous-Interrogations Requête principale • Sous-interrogation mono-ligne ramène CLERK sous-interrogation • Sous-interrogation multi-ligne Requête principale CLERK MANAGER ramène sous-interrogation • Sous-interrogation multi-colonne Requête principale ramène CLERK 7900MANAGER 7698 sous-interrogation

  9. 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. CLERK 1100 Exécution de Sous-Interrogations Mono-ligne 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); ENAME JOB ---------- --------- MILLER CLERK

  11. 800 Utilisation de Fonctions de Groupe dans une Sous-Interrogation SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp); ENAME JOB SAL ---------- --------- --------- SMITH CLERK 800

  12. 800 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. 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);

  13. 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 )

  14. Qu'est-ce Qui ne Va pas dans cet Ordre ? SQL> SELECT empno, ename 2 FROM emp 3 WHERE sal = 4 (SELECT MIN(sal) 5 FROM emp 6 GROUP BY deptno); Opérateur mono-ligne avec sous-interrogation multi-ligne ERROR: ORA-01427: single-row sub-query returns more thanone row no rows selected

  15. Cet Ordre Va-t-il Fonctionner ? SQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4 (SELECT job 5 FROM emp 6 WHERE ename='SMYTHE'); La sous-interrogation ne ramène aucune valeur no rows selected

  16. 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

  17. Exemple • Trouver les employés qui gagnent l’équivalent d’un salaire minimum de département .

  18. 1300 1100 800 950 Utilisation de l'Opérateur ANY dans les Sous-Interrogations Multi-ligne 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'; EMPNO ENAME JOB --------- ---------- --------- 7654 MARTIN SALESMAN 7521 WARD SALESMAN

  19. 1566.6667 2175 2916.6667 Utilisation de l'Opérateur ALL dans les Sous-Interrogations Multi-ligne SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal > ALL 4 (SELECT avg(sal) 5 FROM emp 6 GROUP BY deptno) EMPNO ENAME JOB --------- ---------- --------- 7839 KING PRESIDENT 7566 JONES MANAGER 7902 FORD ANALYST 7788 SCOTT ANALYST

  20. Résumé • Les sous-interrogations sont utiles lorsqu'une requête fait appel à des valeurs inconnues. SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table);

More Related