Differences

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

Link to this comparison view

bd:laboratoare:09 [2019/03/22 13:32]
fbratiloveanu
bd:laboratoare:09 [2023/11/16 17:38] (current)
sorin.ciolofan [Noțiuni teoretice]
Line 2: Line 2:
  
 ==== Obiective ==== ==== Obiective ====
 +  * Subcereri pe clauza HAVING
 +  * Subcereri pe clauza SELECT
 +  * Subcereri pe clauza ORDER BY
 +  * Operatori în subcereri
 +
 ==== Materiale ajutătoare ==== ==== Materiale ajutătoare ====
 +[[bd:​resurse:​tables|Resurse BD]]
 +
 ==== Noțiuni teoretice ==== ==== Noțiuni teoretice ====
  
Line 34: Line 41:
 <color red> Ex. 3. </​color>​ Să se afle ce angajat are salariul maxim în firmă <color red> Ex. 3. </​color>​ Să se afle ce angajat are salariul maxim în firmă
  
-{{:​bd:​laboratoare:​bd_carbon_lab9_ex3.png?​nolink&​500|}}+{{:​bd:​laboratoare:​bd_carbon_lab9_ex3.png?​nolink&​460|}}
  
 === Subcereri pe clauza SELECT === === Subcereri pe clauza SELECT ===
-Aceste subcereri pot fi necorelate ​sau corelate ​ dar trebuie să returneze întotdeauna o singură valoare. Sintaxa este următoarea:​+Aceste subcereri pot fi necorelate sau corelate dar trebuie să returneze întotdeauna o singură valoare. Sintaxa este următoarea:​
 <code sql> <code sql>
 SELECT ​ expressions_select,​ SELECT ​ expressions_select,​
Line 51: Line 58:
 <color red>Ex. 4. </​color>​ Să se afișeze șefii angajaților din departamentul 20. <color red>Ex. 4. </​color>​ Să se afișeze șefii angajaților din departamentul 20.
  
-{{:​bd:​laboratoare:​bd_carbon_lab9_ex4.png?​nolink&​400|}}+{{:​bd:​laboratoare:​bd_carbon_lab9_ex4.png?​nolink&​450|}}
  
 === Subcereri pe clauza ORDER BY === === Subcereri pe clauza ORDER BY ===
Line 67: Line 74:
 <color red>Ex. 5. </​color>​ Să se facă o listă cu angajații din departamentele 10 și 20,  ordonați descrescător după numărul de angajați din fiecare departament. <color red>Ex. 5. </​color>​ Să se facă o listă cu angajații din departamentele 10 și 20,  ordonați descrescător după numărul de angajați din fiecare departament.
  
-{{:​bd:​laboratoare:​bd_carbon_lab9_ex5.png?​nolink&​400|}}+{{:​bd:​laboratoare:​bd_carbon_lab9_ex5.png?​nolink&​450|}}
  
 === 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ă ​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 returneaza ​o valoare ​booleana, respectiv TRUE daca exista cel putin valoare returnata de subcerere ​care respecta conditia impusa ​de operatorul logic 
-  * 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 minim**, iar cu operatorul logic **%%<​(=)%%** are semnificația de **mai mic(sau egal) decât maxim**;
-  * 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 95: 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 103: Line 110:
 {{:​bd:​laboratoare:​bd_carbon_lab9_ex10.png?​nolink&​450|}} {{:​bd:​laboratoare:​bd_carbon_lab9_ex10.png?​nolink&​450|}}
  
 +==== 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.1553254320.txt.gz · Last modified: 2019/03/22 13:32 by fbratiloveanu
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