Differences

This shows you the differences between two versions of the page.

Link to this comparison view

bd:laboratoare:09 [2021/04/27 12:38]
ciprian.truica [Noțiuni teoretice]
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**. ​
Line 111: Line 111:
  
 ==== Exerciții individuale ==== ==== Exerciții individuale ====
 +<color blue>​1.</​color>​ Să se calculeze și afișeze funcția și venitul mediu lunar pentru fiecare funcție. Să se folosească o subcerere în clauza select.
  
 +<color blue>​2.</​color>​ Să se facă o listă cu  funcție, gradul salarial, salariul mediu angajați calculat după funcție și grad unde salariul mediu angajați este mai mare sau egal cu salariu mediu pentru grad.
  
  
  
 +<color blue>​3.</​color>​ Să se selecteze angajatul/​angajații cu cel mai mare venit lunar din departamentul în care lucrează.
 +Afișați
 +  * numele angajatului
 +  * numele departamentului în care lucrează angajatul
 +  * funcția angajatului
 +  * venitul lunar
 +
 +Ordonați după numele departamentului.
 +
 +Să se rezolve fără a folosi funcții agregate (de grup).
 +
 +Rezolvati in 3 metode, folosind:
 +  * operatorul some/any
 +  * operatorul all
 +  * operatorul exists
bd/laboratoare/09.1619516314.txt.gz · Last modified: 2021/04/27 12:38 by ciprian.truica
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0