Documente Academic
Documente Profesional
Documente Cultură
SUBINTEROGARI
Obiective
Scopul lectiei
Subinterogare
?
Subinterogari
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
Subinterogari
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
FUNCTIONAR (CLERK) 7900
MANAGER 7698
Tipuri de subinterogari
Subinterogari single-row
Operator Semnificatie
= Egal cu
<> Diferit de
5
Subinterogari single-row
ENAME JOB
--------------- ------------
JAMES FUNCTIONAR (CLERK)
SMITH FUNCTIONAR (CLERK)
ADAMS FUNCTIONAR (CLERK)
MILLER FUNCTIONAR (CLERK)
ENAME JOB
---------- ---------
MILLER CLERK
În interogarea principala pot fi afisate date prin utilizarea unei functii de grup
într-o subinterogare care sa returneze un singur rînd. Subinterogarea se va plasa între
paranteze si dupa operatorul de comparare.
Exemplul din figura precedenta afiseaza numele, postul si salariul tuturor
angajatilor al caror salariu este egal cu salariul minim. Functia MIN (functie de grup)
returneaza o singura valoare (si anume, 800), care este folosita de catre interogarea
principala.
Exemplu: Se cere sa se gaseasca postul avînd cel mai scazut salariu mediu:
Subinterogari multiple-row
Subinterogari multiple-row
Exemplu:
Se cere sa se selecteze angajatii care cîstiga un salariu egal cu salariul minim
la nivel de departament.
Interogarea interna va fi prima executata producînd ca raspuns la cerere trei
rînduri: 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);
REZUMAT
Rezumat
Exercitii:
1. Sa se scrie o interogare care sa afiseze numele angajatului si data angajarii pentru
toti angajatii din acelasi departament ca Blake. A se exclude Blake.
2. Sa se creeze o cerere pentru a afisa numarul angajatului si numele sau pemtru toti
angajatii care cîstiga mai mult decît salariul mediu. Sa se sorteze rezultatele în
ordinea descrescatoare a salariului.
3. 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.
4. Afisati numele angajatului, numarul departamentului si postul pe care lucreaza
acesta pentru toti angajatii al caror departament este situat în Dallas.
5. Afisati numele si salariul tuturor angajatilor subordonati lui King.
6. Afisati numarul departamentului, numele si postul tuturor angajatilor din
departamentul de vînzari (sales).
7. Modificati p6q3.sql pentru a afisa numarul, numele si salariul tuturor angajatilor
care cîstiga mai mult decît salariul mediu si, totodata, lucreaza într-un departament
care detine cel putin un angajat ce contine în numele sau litera ‘ T ‘. Salvati
fisierul ca p6q7.sql. Reexecutati interogarea.