Presentation is loading. Please wait.

Presentation is loading. Please wait.

Subinterogari.

Similar presentations


Presentation on theme: "Subinterogari."— Presentation transcript:

1 Subinterogari

2 În această lecție veți învăța:
Să definiți o subinterogare Să explicați în ce situații se folosesc subinterogările Să clasificați subinterogările Să scrieți și să folosiți subinterogările simple Să scrieți și să folosiți subinterogările multiple

3 Dobândirea cunoștințelor
O interogare aflată în interiorul unei alte comenzi SQL se numeşte subinterogare. Subinterogările sunt întotdeauna rulate înaintea comenzii în care sunt incluse, doar pe baza rezultatelor returnate de subinterogări putându-se obţine rezultatele interogării exterioare subinterogării. Subinterogările sunt în general folosite atunci când dorim să afişăm informaţii dintr-o tabelă pe baza unor informaţii pe care le preluăm din aceeaşi tabelă sau din alte tabele

4 Tipuri de subinterogari
subinterogări simple care returnează o singură linie; subinterogări multiple care returnează mai multe linii şi/sau mai multe coloane. restricţii de utilizare a subinterogărilor: o subinterogare va fi întotdeauna inclusă în paranteze subinterogarea NU poate conţine clauza ORDER BY.

5 Subinterogări simple Subinterogările simple, vor returna întotdeauna o singură valoare. Ele pot să apară în clauza WHERE sau în clauza HAVING şi sunt folosite împreună cu operatorii <, >, <=, >=, <>, =. Exemplu Fie tabela employees, patronul dorește să afle care sunt persoanele cu salariul mai mare decât salariul lui Neena și care sunt salariile câștigate de aceștia. Cum faceți acest lucru?

6 Mai întâi veţi determina salariul angajatului Neena:
SELECT salary FROM employees WHERE first_name like ‘Neena’ Iar, acum afişăm angajaţii cu salariul mai mare decât al lui Neena: SELECT first_name, salary FROM employees WHERE salary >(SELECT salary WHERE first_name like ‘Neena’)

7 Afişaţi angajaţii care au acelaşi şef ca şi angajatul Neena.
SELECT first_name FROM employees WHERE manager_id=(SELECT manager_id FROM employees WHERE first_name like 'Cristi')

8 Afişaţi toţi angajaţii care au funcţia diferită de funcţia (job_id) angajatului Neena.
SELECT first_name FROM employees WHERE job_id<>(SELECT job_id WHERE first_name like ‘Neena')

9 Dobândirea cunoștințelor
Afișați angajații noi SELECT last_name FROM employees WHERE hire_date= (SELECT max(hire_date) FROM employees) Afişaţi id-ul departamentului care are numărul cel mai mare de angajati. SELECT department_id,count(*) FROM employees GROUP BY department_id HAVING count(*) = ( SELECT max(count(*)) FROM employees GROUP BY department_id )

10 Subinterogari din tabele diferite
Afişaţi numele departamentului care are numărul cel mai mare de angajati. SELECT department_name FROM DEPARTMENTS WHERE department_id = (SELECT department_id FROM employees GROUP BY department_id HAVING count(*) = ( SELECT max(count(*)) FROM EMPLOYEES GROUP BY department_id ) )

11 Subinterogari din tabele diferite
SELECT last_name, job_id, salary, department_id FROM employees WHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 141) AND department_id = (SELECT department_id FROM departments WHERE location_id =1500);

12 Subinterogări multiple
returnează mai multe linii. Când o subinterogare returnează mai mult de o linie, nu mai este posibil să folosim operatorii de comparaţie <, >, <=, >=, <>, = Va trebui să comparăm o valoare simplă cu fiecare valoare din setul de valori returnate de subinterogare. se folosesc cuvintele cheie IN sau ANY și ALL împreună cu operatorii de comparație.

13 Subinterogări multiple cu operatorul IN
Al cui salariu este egal cu cel al angajatilor din departamentul 20 ? SELECT * FROM employees WHERE salary IN ( SELECT salary FROM employees WHERE department_id=20) Afișați toate titlurile CD-urilor din d_cds care au acelasi an ca și CD-urile care au numarul mai mic ca 93 SELECT title, year FROM d_cds WHERE year IN (SELECT year FROM d_cds WHERE cd_number < 93);

14 Subinterogări multiple cu ALL
Afișați angajații care au salariul mai mare decât al toturor angajaților pentru care manager_id este 100: SELECT first_name,salary,job_id FROM employees WHERE salary > ALL ( SELECT salary FROM employees WHERE manager_id=100 )

15 Subinterogări multiple cu ALL
Afișați angajații care au salariul mai mic decât al tuturor angajaților pentru care manager_id este 100: SELECT first_name,salary,job_id FROM employees WHERE salary < ALL ( SELECT salary FROM employees WHERE manager_id=100 )

16 Concluzie… operatorul > ALL se poate interpreta ca mai mare decât valoarea maximă din mulţimea de valori returnată de către subinterogare. operatorul <ALL se poate interpreta ca mai mic decât valoarea minimă din mulţimea valorilor returnate de către subinterogare

17 Subinterogări multiple cu ANY
Afișați angajații care au salariul mai mic decât al oricarui angajat pentru care manager_id este 100: SELECT first_name,salary,job_id FROM employees WHERE salary < ANY ( SELECT salary FROM employees WHERE manager_id=100 )

18 Subinterogări multiple cu ANY
Afișați angajații care au salariul mai mare decât al oricarui angajat pentru care manager_id este 100: SELECT first_name,salary,job_id FROM employees WHERE salary > ANY ( SELECT salary FROM employees WHERE manager_id=100 )

19 Concluzie… operatorul >ANY poate fi interpretat ca mai mare decât valoarea minimă din mulţimea de valori returnată de către subinterogare. similar operatorul <ANY se poate interpreta ca mai mic decât valoarea maximă din mulţimea valorilor returnate către subinterogare

20 Valorile NULL Dacă una dintre valorile returnate de către subinterogarea interioară este nulă atunci interogarea exterioară … dacă este folosită opţiunea ALL => nu va afişa nicio linie SELECT last_name, employee_id FROM employees WHERE commission_pct >ALL (SELECT commission_pct FROM employees where manager_id=100) => No data found

21 NULL dacă este folosită opţiunea ANY sau IN => se vor afișa liniile corespunzătoare ignorând valoarea NULL. SELECT last_name, employee_id FROM employees WHERE commission_pct > ANY (SELECT commission_pct FROM employees where manager_id=100) SELECT last_name, employee_id,commission_pct FROM employees WHERE commission_pct IN (SELECT commission_pct FROM employees where manager_id=100)

22 In concluzie

23 Aplicații Folosind tabela d_play_list_items afisati toate song_id-urile care au acelasi event_id ca song_id=45 Care evenimente (events) din d_events costa mai mult decat pretul pentru event_id = 100? Aflați numărul melodiei care se găsește pe același CD ca și “Party Music for All Occasions.” Afișați toate evenimentele din d_events al caror cod este egal cu cel pentru “Tropical”. Care sunt numele membrilor din f_staffs al caror salariu e mai mare decat al membrului care are ID egal 12?

24 Aplicații Care sunt membrii din f_staffs al căror staff type este diferit de cel al lui Bob Miller? Care angajați din tabela employees au același department ID ca și departamentul IT? Care este numele departamentelor care au același location ID ca Seattle? Afișați toți angajații care au salariul mai mare decat Lorentz si sunt in același departament cu Abel. Afișați toți angajații care au același job id ca Raj și au fost angajați după Davies.


Download ppt "Subinterogari."

Similar presentations


Ads by Google