Differences

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

Link to this comparison view

bd:laboratoare:08 [2021/04/13 13:45]
ciprian.truica
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-comandă SQL și a modului de a face construcția comenzii, subcererile pot fi împărțite în:+Dacă există ​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 36: Line 39:
 <note important>​Această împărțire pe categorii (în funcție de numărul de coloane și linii pe care le întoarce subcererea) a subcererilor se aplică atât pentru subcererile necorelate cât și pentru cele corelate. <note important>​Această împărțire pe categorii (în funcție de numărul de coloane și linii pe care le întoarce subcererea) a subcererilor se aplică atât pentru subcererile necorelate cât și pentru cele corelate.
 </​note>​ </​note>​
 +
 +Subcererile pot fi împărțite în două categorii, în funcție de modul în care sunt corelate cu cererea principală (cerea care cuprinde subcererea):​
 +  * Subcereri necorelate: rezultatul subcererii **nu** este condiționat de valorile din cererea principală
 +  * Subcereri corelate: rezultatul subcererii este condiționat de valorile din cererea principală
  
 Când folosim subcereri, trebuie să respectăm câteva reguli: Când folosim subcereri, trebuie să respectăm câteva reguli:
Line 48: 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 142: 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 |}}
-==== Subcereri corelate ====+ 
 +==== Subcereri corelate ​în clauze WHERE ====
  
 Subcererile corelate se execută o singură dată pentru fiecare linie candidat prelucrată de cererea principală. O subcerere corelată se join-ează cu cererea exterioară prin folosirea unei coloane a cererii exterioare în clauza predicatului cererii interioare. Subcererile corelate se execută o singură dată pentru fiecare linie candidat prelucrată de cererea principală. O subcerere corelată se join-ează cu cererea exterioară prin folosirea unei coloane a cererii exterioare în clauza predicatului cererii interioare.
Line 168: 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 |}}
  
Line 201: Line 209:
  
 ==== Exerciții individuale ==== ==== Exerciții individuale ====
 +
 +Să se selecteze numele angajatului,​ numele departamentului si salariul pentru angajatii care au salariul egal cu salariul minim din departamentul in care lucreaza. Ordonati dupa nume.
 +
 +Rezolvati prin 4 metode:
 +  * o metoda care sa foloseasca o subcerere care intoarce o valoare
 +  * o metoda care sa foloseasca o subcerere care intoarce o linie cu mai multe coloane
 +  * o metoda care sa foloseasca o subcerere care intoarce mai multe linii cu mai multe coloane
 +  * o metoda care sa foloseasca o subcerere in clauza from
  
  
  
bd/laboratoare/08.1618310702.txt.gz · Last modified: 2021/04/13 13:45 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