This shows you the differences between two versions of the page.
bd:laboratoare:09 [2021/04/27 12:47] ciprian.truica [Exerciții individuale] |
bd:laboratoare:09 [2025/04/30 18:44] (current) sorin.ciolofan [Noțiuni teoretice] |
||
---|---|---|---|
Line 78: | Line 78: | ||
=== Operatori în subcereri === | === Operatori în subcereri === | ||
* Operatorii prezentați pentru cereri sunt valabili și pentru subcereri; | * Operatorii prezentați pentru cereri sunt valabili și pentru subcereri; | ||
- | * Operatorii **SOME(ANY)** și **ALL** sunt folosiți în subcereri care întorc mai multe linii și sunt folosiți împreună cu operatorii logici în clauzele **WHERE** și **HAVING**; | + | * Operatorii **SOME(ANY)** și **ALL** sunt folosiți în subcereri care întorc mai multe linii și sunt folosiți împreună cu operatorii logici (de comparatie) în clauzele **WHERE** și **HAVING**; |
- | * Operatorul **SOME** (sau sinoninul lui **ANY**) compară o expresie cu fiecare valoare returnată de o subcerere și păstrează înregistrările unde expresia îndeplinește condiția impusă de operatorul logic; | + | * Operatorul **SOME (sau sinonimul lui ANY)** este un operator care compară o valoare cu oricare dintre valorile returnate de subinterogare, și returnează TRUE dacă cel puțin o comparație este adevărată. |
- | * Acești operatori pot fi folosiți cu toate operațiile de comparație; | + | * Operatorul **ALL** este un operator care returneaza o valoare booleana, respectiv TRUE daca TOATE valorile returnate de subcerere respecta conditia impusa de operatorul logic |
- | * Dacă se folosește operatorul **SOME(ANY)** împreună cu operatorul logic **%%>(=)%%** atunci are semnificația de **mai mare(sau egal) decât minim**, iar cu operatorul logic **%%<(=)%%** are semnificația de **mai mic(sau egal) decât maxim**; | + | * Dacă se folosește operatorul **SOME(ANY)** împreună cu operatorul logic **%%>(=)%%** atunci are semnificația de **mai mare (sau egal) decât cel puțin un element din rezultatul subinterogării**, iar cu operatorul logic **%%<(=)%%** are semnificația de **mai mic(sau egal) decât cel puțin un element din rezultatul subinterogării**; |
- | * Operatorul **ALL** lucrează similar cu operatorii **SOME(ANY)**, iar dacă este folosit cu operatorul logic **%%>(=)%%** atunci are semnificația **mai mare(sau egal) decât maxim**, iar cu operatorul logic **%%<(=)%%** are semnificația **mai mic(sau egal) decât minim**. | + | * Operatorul **ALL** folosit cu operatorul logic **%%>(=)%%** are semnificația **mai mare(sau egal) decât maxim**, iar cu operatorul logic **%%<(=)%%** are semnificația **mai mic(sau egal) decât minim**. |
<color red>Ex. 6.</color> Să se afle care sunt angajații care au salariul mai mare decât salariul cel mai mic pentru funcția de SALESMAN. | <color red>Ex. 6.</color> Să se afle care sunt angajații care au salariul mai mare decât salariul cel mai mic pentru funcția de SALESMAN. | ||
Line 102: | Line 102: | ||
{{:bd:laboratoare:bd_carbon_lab9_ex9.png?nolink&450|}} | {{:bd:laboratoare:bd_carbon_lab9_ex9.png?nolink&450|}} | ||
- | * O construcție cu **[NOT] EXISTS** este mult mai performantă decât o construcție cu **IN**, **SOME(ANY)** sau **ALL**, deoarece, în cazul în care folosim tabele temporale, acestea nu sunt indexate, ducând la scăderea considerabilă a performanțelor. | + | * O construcție cu **[NOT] EXISTS** este mult mai performantă decât o construcție cu **IN**, **SOME(ANY)** sau **ALL**, deoarece, în cazul în care folosim tabele temporare, acestea nu sunt indexate, ducând la scăderea considerabilă a performanțelor. |
* Performațele depind de folosirea indexărilor, de dimensiunea tabelelor din baza de date, de numărul de linii returnate de subcere și dacă sunt necesare tabele temporare pentru a evalua rezultatele returnate. | * Performațele depind de folosirea indexărilor, de dimensiunea tabelelor din baza de date, de numărul de linii returnate de subcere și dacă sunt necesare tabele temporare pentru a evalua rezultatele returnate. | ||
* Deși o subcerere cu o construcție pe operatorul **NOT IN** poate fi la fel de eficient ca și în cazul unei construcții pe **NOT EXISTS**, cea din urmă este totuși mult mai sigură, dacă cererea întoarce și valori **NULL**. | * Deși o subcerere cu o construcție pe operatorul **NOT IN** poate fi la fel de eficient ca și în cazul unei construcții pe **NOT EXISTS**, cea din urmă este totuși mult mai sigură, dacă cererea întoarce și valori **NULL**. |