This shows you the differences between two versions of the page.
bd:laboratoare:08 [2021/04/20 11:06] ciprian.truica [Exerciții individuale] |
bd:laboratoare:08 [2023/04/24 12:32] (current) sorin.ciolofan [Subcereri corelate în clauze WHERE] |
||
---|---|---|---|
Line 21: | Line 21: | ||
<note important>Subcererile pot fi imbricate, adică, o subcerere poate avea propriile ei subcereri. | <note important>Subcererile pot fi imbricate, adică, o subcerere poate avea propriile ei subcereri. | ||
</note> | </note> | ||
- | Din punct de vedere al rolului pe care îl au într-o comandă SQL și a modului de a face construcția comenzii, subcererile pot fi împărțite în: | + | Dacă există o legătură de asociere sau nu între subcere și cererea exterioară, subcererile pot fi de 2 tipuri: |
* Subcereri necorelate | * Subcereri necorelate | ||
- | * Subcereri corelate | + | * Subcereri corelate |
+ | |||
+ | Din punct de vedere al rolului pe care îl au într-o comandă SQL și a modului de a face construcția comenzii, subcererile pot fi împărțite în: | ||
* Subcereri în clauza WHERE | * Subcereri în clauza WHERE | ||
- | * Subcereri pe tabela temporală | + | * Subcereri în clauza FROM (Subcereri pe tabela temporală) |
* Subcereri în clauza HAVING | * Subcereri în clauza HAVING | ||
* Subcereri în clauza SELECT | * Subcereri în clauza SELECT | ||
* Subcereri în clauza ORDER BY | * Subcereri în clauza ORDER BY | ||
+ | |||
Subcererile pot fi împărțite pe mai multe categorii, în funcție de numărul de coloane sau linii pe care le returnează: | Subcererile pot fi împărțite pe mai multe categorii, în funcție de numărul de coloane sau linii pe care le returnează: | ||
* Subcereri care întorc o valoare | * Subcereri care întorc o valoare | ||
Line 52: | Line 55: | ||
* În subcereri se pot folosi operatori de mulțimi; | * În subcereri se pot folosi operatori de mulțimi; | ||
* Subcererile pot fi imbricate până la nivelul 255; | * Subcererile pot fi imbricate până la nivelul 255; | ||
- | * În clauza SELECT o subcerere trebuie să întoarcă o singură linie. | + | * În clauza SELECT o subcerere trebuie să întoarcă o singură valoare. |
==== Subcereri necorelate în clauza WHERE ==== | ==== Subcereri necorelate în clauza WHERE ==== | ||
Line 146: | Line 149: | ||
<color red>Ex. 6.</color> Să se afișeze angajatii care au venitul lunar minim pe fiecare departament. | <color red>Ex. 6.</color> Să se afișeze angajatii care au venitul lunar minim pe fiecare departament. | ||
{{ :bd:laboratoare:lab8_ex6_new.png?nolink&450 |}} | {{ :bd:laboratoare:lab8_ex6_new.png?nolink&450 |}} | ||
- | <color red>Ex. 7.</color> Să se afișeze angajații care au salariul mai mare decât salariul maxim din departamentul SALES. | + | <color red>Ex. 7.</color> Să se afișeze angajații care au salariul mai mare decât salariul maxim din departamentul SALES. Acesta este un exemplu de subcereri imbricate (in total 3 nivele), subcererile insa NU intorc mai multe linii in final, ci o singura valoare. |
{{ :bd:laboratoare:lab8_7_new.png?nolink&450 |}} | {{ :bd:laboratoare:lab8_7_new.png?nolink&450 |}} | ||
Line 173: | Line 176: | ||
Deși o subcerere corelată se execută de mai multe ori, acest lucru nu implică că subcererile corelate sunt mai ineficiente decât subcererile necorelate. | Deși o subcerere corelată se execută de mai multe ori, acest lucru nu implică că subcererile corelate sunt mai ineficiente decât subcererile necorelate. | ||
- | <color red>Ex. 8.</color> Să se afișeze angajații care au salariul peste valoare media a departamentului din care fac parte. | + | <color red>Ex. 8.</color> Să se afișeze angajații care au salariul peste valoarea medie a departamentului din care fac parte. |
{{ :bd:laboratoare:lab8_8_new.png?nolink&450 |}} | {{ :bd:laboratoare:lab8_8_new.png?nolink&450 |}} | ||
- | <color red>Ex. 9.</color> Să se mărească salariile angajaților cu 10% din salariul mediu și să se acorde tuturor angajaților un comision egal cu comisionul mediu pe fiecare departament, numai pentru persoanele angajate înainte de 1-JUN-1981. | + | <color red>Ex. 9.</color> Să se mărească salariile angajaților cu 10% din salariul mediu și să se acorde tuturor angajaților un comision egal cu comisionul mediu pe departamentul din care face parte angajatul, numai pentru persoanele angajate înainte de 1-JUN-1981. |
{{ :bd:laboratoare:lab8_9_new.png?nolink&450 |}} | {{ :bd:laboratoare:lab8_9_new.png?nolink&450 |}} | ||