Top Banner
Copyright Oracle Corporation, 1997. Tous droits réservés. 7 7 Sous-Interrogations www.TelechargerCours.com
21

Sous-Interrogations - sql oracle

Jul 11, 2015

Download

Education

webreaker
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Sous-Interrogations - sql oracle

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

77

Sous-Interrogations

www.TelechargerCours.com

Page 2: Sous-Interrogations - sql oracle

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

Page 3: Sous-Interrogations - sql oracle

7-3 Copyright Oracle Corporation, 1997. Tous droits réservés.

DéfinitionUne Sous-interrogation est un ordre SELECT Une Sous-interrogation est un ordre SELECT imbriqué dans une clause d’un autre ordre imbriqué dans une clause d’un autre ordre SELECT .SELECT .

Elles permettent de sélectionner des lignes d’une Elles permettent de sélectionner des lignes d’une table lorsque la condition dépend des données table 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 SQL Peuvent être placées dans les clauses SQL suivantes :suivantes :

WHEREWHERE

HAVINGHAVING

FROMFROM

www.TelechargerCours.com

Page 4: Sous-Interrogations - sql oracle

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

Page 5: Sous-Interrogations - sql oracle

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_listFROM tableWHERE expr operator

(SELECT select_list FROM table);

www.TelechargerCours.com

Page 6: Sous-Interrogations - sql oracle

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----------KINGFORDSCOTT

ENAME----------KINGFORDSCOTT

www.TelechargerCours.com

Page 7: Sous-Interrogations - sql oracle

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.

Page 8: Sous-Interrogations - sql oracle

7-8 Copyright Oracle Corporation, 1997. Tous droits réservés.

Types de Sous-Interrogations

• Sous-interrogation mono-ligneRequête principale

sous-interrogation ramèneramène

CLERKCLERK

• Sous-interrogation multi-ligne

CLERKCLERKMANAGERMANAGER

Requête principale

ramèneramène

• Sous-interrogation multi-colonne

CLERK 7900CLERK 7900MANAGER 7698MANAGER 7698

Requête principale

ramèneramène

sous-interrogation

sous-interrogation

Page 9: Sous-Interrogations - sql oracle

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

Page 10: Sous-Interrogations - sql oracle

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 );

Page 11: Sous-Interrogations - sql oracle

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);

Page 12: Sous-Interrogations - sql oracle

7-12 Copyright Oracle Corporation, 1997. Tous droits réservés.

Utilisation de Fonctions de Groupe dans une Sous-

Interrogation800

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

Page 13: Sous-Interrogations - sql oracle

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);

Page 14: Sous-Interrogations - sql oracle

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

Page 15: Sous-Interrogations - sql oracle

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 thanone row

no rows selected

ERROR:ORA-01427: single-row sub-query returns more thanone 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);

Opérat

eur m

ono-ligne

avec

sous-

inte

rrogat

ion m

ulti-li

gne

Opérat

eur m

ono-ligne

avec

sous-

inte

rrogat

ion m

ulti-li

gnewww.TelechargerCours.com

Page 16: Sous-Interrogations - sql oracle

7-16 Copyright Oracle Corporation, 1997. Tous droits réservés.

Cet Ordre Va-t-il Fonctionner ?

no rows selectedno rows selected

La so

us-in

terro

gatio

n ne

ram

ène

aucu

ne va

leur

La so

us-in

terro

gatio

n ne

ram

ène

aucu

ne va

leur

SQL> SELECT ename, job 2 FROM emp 3 WHERE job = 4 (SELECT job 5 FROM emp 6 WHERE ename='SMYTHE');

www.TelechargerCours.com

Page 17: Sous-Interrogations - sql oracle

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

Page 18: Sous-Interrogations - sql oracle

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 empGROUP B deptno )

IN

www.TelechargerCours.com

Page 19: Sous-Interrogations - sql oracle

7-19 Copyright Oracle Corporation, 1997. Tous droits réservés.

Utilisation de l'Opérateur ANY dans les Sous-Interrogations Multi-

ligne

9508001100

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

Page 20: Sous-Interrogations - sql oracle

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

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

Page 21: Sous-Interrogations - sql oracle

7-21 Copyright Oracle Corporation, 1997. Tous droits réservés.

Résumé

Les sous-interrogations sont utiles Les sous-interrogations sont utiles lorsqu'une requête fait appel à des valeurs lorsqu'une requête fait appel à des valeurs inconnues.inconnues.SELECT select_listFROM tableWHERE expr operator

(SELECT select_list FROM table);

www.TelechargerCours.com