Differences

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

Link to this comparison view

bd:laboratoare:05 [2019/03/16 22:08]
iulia.radulescu
bd:laboratoare:05 [2021/03/30 13:17] (current)
ciprian.truica [Exerciții individuale]
Line 2: Line 2:
  
 ==== Obiective ==== ==== Obiective ====
 +
 +  * Cross Join
 +  * Inner Join
 +    * Equi Join
 +    * Natural Join
 +    * Theta Join
 +  * Left Outer Join
 +  * Right Outer Join
 +  * Full Outer Join
 +  * Vertical Join
  
 ==== Materiale ajutătoare ==== ==== Materiale ajutătoare ====
 +
 +[[bd:​resurse:​tables|Resurse BD]]
 +
  
 ==== Noțiuni teoretice ==== ==== Noțiuni teoretice ====
Line 13: Line 26:
   * FULL OUTER JOIN   * FULL OUTER JOIN
   * CROSS JOIN   * CROSS JOIN
-Un caz special este SELF JOIN care face JOIN pe o tabelă cu ea însăși.+ 
 + 
 +Un caz special este **SELF JOIN** care face JOIN **pe o tabelă cu ea însăși**. 
 + 
 +{{:​bd:​laboratoare:​join-types.png?​nolink&​500|}} 
 + 
 +Image source: http://​kirillpavlov.com/​blog/​2016/​04/​23/​beyond-traditional-join-with-apache-spark/​
  
 === JOIN === === JOIN ===
Line 22: Line 41:
   * **column_alias** – este un nume alocat unei coloane(expresii) care va fi folosit în formatarea coloanei (numele care apare în antetul listei);   * **column_alias** – este un nume alocat unei coloane(expresii) care va fi folosit în formatarea coloanei (numele care apare în antetul listei);
   * **WHERE condition** – reprezintă o clauză (înlănțuire de condiții) care trebuie să fie îndeplinită în criteriul de selecție a înregistrărilor;​   * **WHERE condition** – reprezintă o clauză (înlănțuire de condiții) care trebuie să fie îndeplinită în criteriul de selecție a înregistrărilor;​
-  * **ORDER BY {expresion|position} [ASC|DESC]** – ordonează înregistrările selectate după coloanele din expresie sau în ordinea coloanelor (selecterate ​în clauza SELECT) specificate prin poziție.+  * **ORDER BY {expresion|position} [ASC|DESC]** – ordonează înregistrările selectate după coloanele din expresie sau în ordinea coloanelor (selectate ​în clauza SELECT) specificate prin poziție.
  
 <code sql> <code sql>
Line 36: Line 55:
 === CROSS JOIN (Produsul Cartezian) === === CROSS JOIN (Produsul Cartezian) ===
   * Produsul cartezian (Cross Join) a două tabele se obține prin concatenarea fiecărei linii dintr-o tabelă cu fiecare linie din cealaltă tabelă;   * Produsul cartezian (Cross Join) a două tabele se obține prin concatenarea fiecărei linii dintr-o tabelă cu fiecare linie din cealaltă tabelă;
-  * Rezultatul este un număr de linii egal cu produsul cartezian dintre numărul de linii din fiecare tabela din cluaza ​FROM. Această situație este mai puțin practică și se întâlnește,​ de regulă, când sunt puse greșit condițiile.+  * Rezultatul este un număr de linii egal cu produsul cartezian dintre numărul de linii din fiecare tabela din clauza ​FROM. Această situație este mai puțin practică și se întâlnește,​ de regulă, când sunt puse greșit condițiile.
   * Sintaxa CROSS  JOIN este:   * Sintaxa CROSS  JOIN este:
 <code sql> <code sql>
Line 57: Line 76:
 <columns 50% 50%-> <columns 50% 50%->
 <​newcolumn>​ <​newcolumn>​
-{{ :​bd:​laboratoare:​lab5_1_1.png?​nolink&​350 |}}+{{:​bd:​laboratoare:​lab5_1_1.png?​nolink&​350|}}
 <​newcolumn>​ <​newcolumn>​
-{{ :​bd:​laboratoare:​lab5_1_2.png?​nolink&​350 |}}+{{:​bd:​laboratoare:​lab5_1_2.png?​nolink&​350|}}
 </​columns>​ </​columns>​
  
Line 107: Line 126:
 <columns 50% 50%-> <columns 50% 50%->
 <​newcolumn>​ <​newcolumn>​
-{{ :​bd:​laboratoare:​lab5_2_1.png?​nolink&​300}}+{{:​bd:​laboratoare:​lab5_2_1.png?​nolink&​300|}}
 <​newcolumn>​ <​newcolumn>​
-{{ :​bd:​laboratoare:​lab5_2_2.png?​nolink&​350}}+{{:​bd:​laboratoare:​lab5_2_2.png?​nolink&​350|}}
 </​columns>​ </​columns>​
  
 <columns 50% 50%-> <columns 50% 50%->
 <​newcolumn>​ <​newcolumn>​
-{{ :​bd:​laboratoare:​lab5_2_3.png?​nolink&​350}}+{{:​bd:​laboratoare:​lab5_2_3.png?​nolink&​350|}}
 <​newcolumn>​ <​newcolumn>​
-{{ :​bd:​laboratoare:​lab5_2_4.png?​nolink&​350}}+{{:​bd:​laboratoare:​lab5_2_4.png?​nolink&​350|}}
 </​columns>​ </​columns>​
  
 <columns 50% 50%-> <columns 50% 50%->
 <​newcolumn>​ <​newcolumn>​
-{{ :​bd:​laboratoare:​lab5_2_5.png?​nolink&​350}}+{{:​bd:​laboratoare:​lab5_2_5.png?​nolink&​350|}}
 <​newcolumn>​ <​newcolumn>​
-{{ :​bd:​laboratoare:​lab5_2_6.png?​nolink&​350}}+{{:​bd:​laboratoare:​lab5_2_6.png?​nolink&​350|}}
 </​columns>​ </​columns>​
  
Line 141: Line 160:
 </​code>​ </​code>​
 <color red> Ex. 3. </​color>​ Să se rezolve exercițiul **2** folosind Natural Join. <color red> Ex. 3. </​color>​ Să se rezolve exercițiul **2** folosind Natural Join.
-{{ :​bd:​laboratoare:​lab5_3.png?​nolink&​350 |}}+ 
 +{{:​bd:​laboratoare:​lab5_3.png?​nolink&​350|}}
  
 == Non Equi-join (Θ-Join) == == Non Equi-join (Θ-Join) ==
 <color red> Ex. 4. </​color>​ Să se listeze numele, salariul și gradul de salarizare pentru angajații din departamentul 20. <color red> Ex. 4. </​color>​ Să se listeze numele, salariul și gradul de salarizare pentru angajații din departamentul 20.
 Când una sau mai multe tabele care nu au coloane comune, sau  operatorul folosit nu este egal și trebuie să corelăm tabelele, avem un NON EQUI-JOIN. Când una sau mai multe tabele care nu au coloane comune, sau  operatorul folosit nu este egal și trebuie să corelăm tabelele, avem un NON EQUI-JOIN.
-{{ :​bd:​laboratoare:​lab5_4_1.png?​nolink&​450 |}} + 
-{{ :​bd:​laboratoare:​lab5_4_2.png?​nolink&​450 |}}+{{:​bd:​laboratoare:​lab5_4_1.png?​nolink&​450|}} 
 + 
 +{{:​bd:​laboratoare:​lab5_4_2.png?​nolink&​450|}} 
 <color red> Ex. 5. </​color>​ Să se listeze numele, salariul, gradul de salarizare și numele departamentului pentru angajații din departamentul 20. <color red> Ex. 5. </​color>​ Să se listeze numele, salariul, gradul de salarizare și numele departamentului pentru angajații din departamentul 20.
-{{ :​bd:​laboratoare:​lab5_5_1.png?​nolink&​450 |}} + 
-{{ :​bd:​laboratoare:​lab5_5_2.png?​nolink&​450 |}} +{{:​bd:​laboratoare:​lab5_5_1.png?​nolink&​450|}} 
-{{ :​bd:​laboratoare:​lab5_5_3.png?​nolink&​450 |}}+ 
 +{{:​bd:​laboratoare:​lab5_5_2.png?​nolink&​450|}} 
 + 
 +{{:​bd:​laboratoare:​lab5_5_3.png?​nolink&​450|}}
  
  
Line 159: Line 185:
  
 <color red> Ex. 6.</​color>​ Să se listeze numele, funcția, numele șefului și funcția sefului pentru angajații din departamentul 10. <color red> Ex. 6.</​color>​ Să se listeze numele, funcția, numele șefului și funcția sefului pentru angajații din departamentul 10.
-{{ :​bd:​laboratoare:​lab5_6_1.png?​nolink&​350 |}} + 
-{{ :​bd:​laboratoare:​lab5_6_2.png?​nolink&​350 |}}+{{:​bd:​laboratoare:​lab5_6_1.png?​nolink&​350|}} 
 + 
 +{{:​bd:​laboratoare:​lab5_6_2.png?​nolink&​350|}} 
  
 === Outer Join === === Outer Join ===
Line 193: Line 222:
 </​code>​ </​code>​
 <color red>Ex. 7.</​color>​ Să se selecteze toate departamentele și angajații care fac parte din fiecare departament. Să se ordoneze crescător după id-ul departamentului. <color red>Ex. 7.</​color>​ Să se selecteze toate departamentele și angajații care fac parte din fiecare departament. Să se ordoneze crescător după id-ul departamentului.
-{{ :​bd:​laboratoare:​lab5_7_1.png?​nolink&​350 |}} + 
-{{ :​bd:​laboratoare:​lab5_7_2.png?​nolink&​350 |}}+{{:​bd:​laboratoare:​lab5_7_1.png?​nolink&​350|}} 
 + 
 +{{:​bd:​laboratoare:​lab5_7_2.png?​nolink&​350|}}
  
 == Right Outer Join == == Right Outer Join ==
-Fie două tabele A și B. Operația de Left Outer Join (A Right Outer Join B) returnează toate înregistrările din tabela B și, în cazul în care nu găsește o corespondență în tabela A va întoarce NULL, altfel va întoarce valorile selectate din tabela A.+Fie două tabele A și B. Operația de Right Outer Join (A Right Outer Join B) returnează toate înregistrările din tabela B și, în cazul în care nu găsește o corespondență în tabela A va întoarce NULL, altfel va întoarce valorile selectate din tabela A.
   * Sintaxa Right Outer Join (merge doar în Oracle):   * Sintaxa Right Outer Join (merge doar în Oracle):
 <code sql> <code sql>
Line 218: Line 249:
 </​code>​ </​code>​
 == Full Outer Join == == Full Outer Join ==
-Fie două tabele A și B. Operația de Left Outer Join (A Right Outer Join B) returnează toate înregistrările din tabela A și B și, în cazul în care nu găsește o corespondență în tabela A sau B va întoarce NULL, altfel va întoarce valorile selectate din tabela A sau B.+Fie două tabele A și B. Operația de Full Outer Join (A Full Outer Join B) returnează toate înregistrările din tabela A și B și, în cazul în care nu găsește o corespondență în tabela A sau B va întoarce NULL, altfel va întoarce valorile selectate din tabela A sau B.
   * Sintaxa Full Outer Join (recomandată de ultimul standard SQL, merge în toate SGBD-urile) este:   * Sintaxa Full Outer Join (recomandată de ultimul standard SQL, merge în toate SGBD-urile) este:
 <code sql> <code sql>
Line 233: Line 264:
  
 <color red>Ex. 9. </​color>​ Să se afișeze numele, funcția, salariul si gradul de salarizare ​ pentru toți angajații , după ce se li se dublează salariul. <color red>Ex. 9. </​color>​ Să se afișeze numele, funcția, salariul si gradul de salarizare ​ pentru toți angajații , după ce se li se dublează salariul.
-{{ :​bd:​laboratoare:​lab5_9.png?​nolink&​500 |}}+ 
 +{{:​bd:​laboratoare:​lab5_9.png?​nolink&​500|}} 
 Observații:​ Observații:​
   * Totdeauna semnul (+) se pune în dreptul tabelei deficitare de informație;​   * Totdeauna semnul (+) se pune în dreptul tabelei deficitare de informație;​
Line 240: Line 273:
   * Se pot combina operațiile de Join între ele.   * Se pot combina operațiile de Join între ele.
 <color red>Ex. 10. </​color>​Să se selecteze numele de departament,​ numele, salariu si gradul de  salariu ​ pentru angajații din firmă, după ce salariile se dublează. Să se afișeze și numele departamentelor care nu au angajați și gradele care nu corespund niciunui salariu dublat. <color red>Ex. 10. </​color>​Să se selecteze numele de departament,​ numele, salariu si gradul de  salariu ​ pentru angajații din firmă, după ce salariile se dublează. Să se afișeze și numele departamentelor care nu au angajați și gradele care nu corespund niciunui salariu dublat.
-{{ :​bd:​laboratoare:​lab5_10_1.png?​nolink&​500 |}} + 
-{{ :​bd:​laboratoare:​lab5_10_2.png?​nolink&​500 |}}+{{:​bd:​laboratoare:​lab5_10_1.png?​nolink&​500|}} 
 + 
 +{{:​bd:​laboratoare:​lab5_10_2.png?​nolink&​500|}} 
 === Join Vertical === === Join Vertical ===
   * Join-ul vertical este folosit pentru concatenarea rezultatelor mai multor comenzi SELECT și folosește operatorii UNION [ALL] (reuniune), INTERSECT (intersecția),​ MINUS (diferența);​   * Join-ul vertical este folosit pentru concatenarea rezultatelor mai multor comenzi SELECT și folosește operatorii UNION [ALL] (reuniune), INTERSECT (intersecția),​ MINUS (diferența);​
Line 249: Line 285:
   * Operatorul INTERSECT se folosește pentru a selecta înregistrările comune;   * Operatorul INTERSECT se folosește pentru a selecta înregistrările comune;
   * Operatorul MINUS se folosește pentru a selecta doar înregistrările care nu se regăsesc în al doilea select.   * Operatorul MINUS se folosește pentru a selecta doar înregistrările care nu se regăsesc în al doilea select.
 +
 <color red>Ex. 11.</​color>​ Să se listeze angajații din departamentele 10 și 30. <color red>Ex. 11.</​color>​ Să se listeze angajații din departamentele 10 și 30.
  
-{{ :​bd:​laboratoare:​lab5_11.png?​nolink&​350|}}+{{:​bd:​laboratoare:​lab5_11.png?​nolink&​350|}}
  
 <color red>Ex. 12.</​color>​ Să se construiască o cerere care reunește pe aceeași coloană salariile angajațiilor din departamentul 10 și comisionale celor din departamentul 30. <color red>Ex. 12.</​color>​ Să se construiască o cerere care reunește pe aceeași coloană salariile angajațiilor din departamentul 10 și comisionale celor din departamentul 30.
  
-{{ :​bd:​laboratoare:​lab5_12.png?​nolink&​400|}}+{{:​bd:​laboratoare:​lab5_12.png?​nolink&​400|}}
  
 <color red>Ex. 13.</​color>​ Să se selecteze toate funcțiile din departamentul 10 și 20. <color red>Ex. 13.</​color>​ Să se selecteze toate funcțiile din departamentul 10 și 20.
  
-{{ :​bd:​laboratoare:​lab5_13.png?​nolink&​350|}}+{{:​bd:​laboratoare:​lab5_13.png?​nolink&​350|}}
  
 <color red>Ex. 14.</​color>​ Să se selecteze funcțiile care au primit același comision și se regăsesc în departamentele 10, 20,30. <color red>Ex. 14.</​color>​ Să se selecteze funcțiile care au primit același comision și se regăsesc în departamentele 10, 20,30.
  
-{{ :​bd:​laboratoare:​lab5_14.png?​nolink&​350|}}+{{:​bd:​laboratoare:​lab5_14.png?​nolink&​350|}}
  
 <color red>Ex. 15.</​color>​ Să se selecteze funcțiile care se găsesc în departamentul 10 dar nu se regăsesc în departamentul 30. <color red>Ex. 15.</​color>​ Să se selecteze funcțiile care se găsesc în departamentul 10 dar nu se regăsesc în departamentul 30.
  
-{{ :​bd:​laboratoare:​lab5_15.png?​nolink&​350|}}+{{:​bd:​laboratoare:​lab5_15.png?​nolink&​250|}} 
 + 
 +====Exerciții individuale==== 
 +  - Să se facă o listă cu: 
 +    * Nume Angajat 
 +    * Departament Angajat 
 +    * Grad Angajat 
 +    * Nume Sef 
 +    * Departament Sef 
 +    * Grad Sef 
 + 
 +Sa se afiseze toate rezutlatele,​ chiar daca nu se gasesc legaturi de JOIN intre intregistrarile din diferitele tabele.
  
  
bd/laboratoare/05.1552766886.txt.gz · Last modified: 2019/03/16 22:08 by iulia.radulescu
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