Documente Academic
Documente Profesional
Documente Cultură
Lectia 06
Lectia 06
SUBINTEROGARI
Obiective
Dupa parcurgerea acestei lectii, veti avea cunostintele
necesare pentru a realiza urmatoarele:
Descrierea tipurilor de probleme pe care le pot rezolva
subinterogarile;
Definirea subinterogarilor;
Listarea tipurilor de subinterogari;
Scrierea subinterogarilor single-row si multiple-row.
Scopul lectiei
n aceasta lectie se vor studia caracteristici mai avansate ale instructiunii
SELECT. Se pot scrie subinterogari n clauza WHERE a altei instructiuni SQL n
scopul obtinerii de valori bazate pe o valoare necunoscuta a unei conditii. Aceasta
lectie acopera att subinterogarile single-row, ct si cele multiple-row.
Subinterogare
?
Subinterogari
SELECT
FROM
WHERE
select_list
table
expr operator
(SELECT
FROM
select_list
table);
ENAME
---------KING
FORD
SCOTT
Tipuri de subinterogari
Subinterogari single-row
Cerere principala
Subinterogare
FUNCTIONAR (CLERK)
Subinterogari multiple-row
Cerere principala
Subinterogare
FUNCTIONAR (CLERK)
MANAGER
Subinterogari multiple-column
Cerere principala
Subinterogare
Tipuri de subinterogari
Subinterogari single-row
Returneaza doar un rnd
Folosesc operatori de comparare single-row
Operator
=
>
>=
<
<=
<>
Semnificatie
Egal cu
Mai mare dect
Mai mare sau egal cu
Mai mic dect
Mai mic sau egal cu
Diferit de
4
Subinterogari single-row
O subinterogare single-row este acea subinterogare care returneaza un singur
rnd din instructiunea SELECT interna. Acest tip de subinterogare foloseste un
operator single-row. Figura anterioara prezinta lista operatorilor single-row.
Exemplu:
Afisarea angajatilor care lucreaza pe acelasi post ca si angajatul ce are
numarul 7369.
SQL> SELECT ename, job
2
FROM emp
3
WHERE job=
4
(SELECT job
5
FROM emp
6
WHERE empno=7369);
ENAME
--------------JAMES
SMITH
ADAMS
MILLER
JOB
-----------FUNCTIONAR (CLERK)
FUNCTIONAR (CLERK)
FUNCTIONAR (CLERK)
FUNCTIONAR (CLERK)
ENAME
---------MILLER
JOB
--------CLERK
800
MIN(sal)
emp);
SAL
--------800
10
30
MIN(SAL)
----------------
1300
950
Exemplu: Se cere sa se gaseasca postul avnd cel mai scazut salariu mediu:
SQL> SELECT job, AVG(sal)
2
FROM emp
3
GROUP BY job
4
HAVING AVG(sal) = (SELECT MIN(AVG(sal))
5
FROM emp
6
GROUP BY job);
Subinterogari multiple-row
Selecteaza mai mult de un rnd
Folosesc operatori multiple-row de comparare
Operator
IN
Semnificatie
Egal cu oricare din elementele listei
Exemplu:
Se cere sa se selecteze angajatii care cstiga un salariu egal cu salariul minim
la nivel de departament.
Interogarea interna va fi prima executata producnd ca raspuns la cerere trei
rnduri: 800, 950, 1300. Blocul cererii externe este apoi procesat si foloseste valorile
returnate de catre interogarea inclusa pentru a-si finaliza propria conditie de cautare.
De fapt, interogarea principala este privita din perspectiva server-ului Oracle astfel:
SQL> SELECT ename, sal, deptno
2 FROM emp
3 WHERE sal IN (800, 950, 1300);
1300
1100
EMPNO
ENAME JOB
--------- ---------- --------7654 MARTIN SALESMAN
7521 WARD
SALESMAN
10
EMPNO
--------7839
7566
7902
7788
ENAME
---------KING
JONES
FORD
SCOTT
1566.6667
2175
JOB
--------PRESIDENT
MANAGER
ANALYST
ANALYST
REZUMAT
Subinterogarile snt folositoare atunci cnd o cerere se
bazeaza pe valori necunoscute.
SELECT
FROM
WHERE
select_list
table
expr operator
(SELECT select_list
FROM table);
10
11
Rezumat
O subinterogare este o instructiune SELECT inclusa ntr-o clauza a altei
instructiuni SQL. Subinterogarile snt folositoare atunci cnd interogarea se
bazeaza pe criterii necunoscute.
Subinterogarile au urmatoarele caracteristici:
Pot transmite un rnd de date instructiunii principale care contine un
operator single-row, precum: =, <>, >, >=, < sau <=;
Pot transmite rnduri multiple de date instructiunii principale care
contine un operator multiple-row, precum: IN, ANY sau ALL;
Snt primele procesate de catre server-ul Oracle, iar clauzele WHERE
si HAVING folosesc rezultatele;
Pot contine functii de grup.
Exercitii:
Sa se scrie o interogare care sa afiseze numele angajatului si data angajarii pentru
toti angajatii din acelasi departament ca Blake. Sa se exclude Blake.
Sa se creeze o cerere pentru a afisa numarul angajatului si numele sau pemtru toti
angajatii care cstiga mai mult dect salariul mediu. Sa se sorteze rezultatele n
ordinea descrescatoare a salariului.
Sa se scrie o cerere care va afisa numarul si numele angajatului pentru toti cei care
lucreaza ntr-un departament care detine cel putin un angajat al carui nume contine
litera T . Salvati instructiunea ntr-un fisier denumit p6q3.sql.
Afisati numele angajatului, numarul departamentului si postul pe care lucreaza
acesta pentru toti angajatii al caror departament este situat n Dallas.
Afisati numele si salariul tuturor angajatilor subordonati lui King.
Afisati numarul departamentului, numele si postul tuturor angajatilor din
departamentul de vnzari (sales).
11
12
12