Podcast
Questions and Answers
Ce tip de JOIN este folosit pentru a returna toate liniile din ambele tabele, indiferent dacă există sau nu o potrivire?
Ce tip de JOIN este folosit pentru a returna toate liniile din ambele tabele, indiferent dacă există sau nu o potrivire?
- INNER JOIN
- FULL OUTER JOIN (correct)
- LEFT JOIN
- RIGHT JOIN
În ce situație este potrivit un SELF JOIN
?
În ce situație este potrivit un SELF JOIN
?
- Când dorești să combini date din tabele diferite.
- Când vrei să calculezi agregări pe grupuri de date.
- Când dorești să compari date din aceeași tabelă. (correct)
- Când vrei să excluzi anumite rânduri din rezultat.
Care este rezultatul unui PRODUS CARTEZIAN
între două tabele?
Care este rezultatul unui PRODUS CARTEZIAN
între două tabele?
- O tabelă cu rândurile comune ambelor tabele.
- O tabelă cu rândurile care se potrivesc între cele două tabele bazat pe o condiție specifică.
- O tabelă cu rândurile din prima tabelă care nu au o potrivire în a doua tabelă.
- O tabelă cu toate combinațiile posibile de rânduri din cele două tabele. (correct)
Ce operatori sunt utilizați în JOIN-uri verticale?
Ce operatori sunt utilizați în JOIN-uri verticale?
Ce se întâmplă dacă omitem clauza WHERE
într-o interogare cu JOIN
clasic (fără OUTER
)?
Ce se întâmplă dacă omitem clauza WHERE
într-o interogare cu JOIN
clasic (fără OUTER
)?
Care dintre următoarele afirmații este adevărată despre un EQUI-JOIN
?
Care dintre următoarele afirmații este adevărată despre un EQUI-JOIN
?
Ce tip de JOIN
ar trebui folosit pentru a lista angajații și, de asemenea, departamentele care nu au angajați?
Ce tip de JOIN
ar trebui folosit pentru a lista angajații și, de asemenea, departamentele care nu au angajați?
Care este funcția clauzei USING
în sintaxa JOIN
din SQL-3?
Care este funcția clauzei USING
în sintaxa JOIN
din SQL-3?
Ce reprezintă aliasurile de tabel (table aliases) într-o interogare SQL cu JOIN
?
Ce reprezintă aliasurile de tabel (table aliases) într-o interogare SQL cu JOIN
?
Ce restricție importantă există în utilizarea clauzei NATURAL JOIN
?
Ce restricție importantă există în utilizarea clauzei NATURAL JOIN
?
Într-un LEFT OUTER JOIN
, ce se întâmplă cu rândurile din tabelul din stânga care nu au corespondent în tabelul din dreapta?
Într-un LEFT OUTER JOIN
, ce se întâmplă cu rândurile din tabelul din stânga care nu au corespondent în tabelul din dreapta?
Care este diferența principală dintre un JOIN
implicit (cel cu virgule în clauza FROM
și condiția în WHERE
) și un JOIN
explicit (folosind cuvintele cheie JOIN
, ON
, USING
)?
Care este diferența principală dintre un JOIN
implicit (cel cu virgule în clauza FROM
și condiția în WHERE
) și un JOIN
explicit (folosind cuvintele cheie JOIN
, ON
, USING
)?
În ce situație utilizarea unui FULL OUTER JOIN
este deosebit de utilă?
În ce situație utilizarea unui FULL OUTER JOIN
este deosebit de utilă?
Ce înseamnă că tabela A
este "mai săracă dpdv al JOIN-ului" față de tabela B
într-un context de OUTER JOIN
?
Ce înseamnă că tabela A
este "mai săracă dpdv al JOIN-ului" față de tabela B
într-un context de OUTER JOIN
?
Care este scopul folosirii NVL(A.COMM, 0)
în exemplul cu SELF JOIN
pentru calculul venitului angajaților versus cel al șefilor?
Care este scopul folosirii NVL(A.COMM, 0)
în exemplul cu SELF JOIN
pentru calculul venitului angajaților versus cel al șefilor?
Cum se realizează un JOIN folosind sintaxa SQL-3 pentru a obține toate rândurile din tabela A
și numai rândurile corespunzătoare din tabela B
, dar folosind sintaxa specifica OUTER JOIN (nu cea cu (+)
)?
Cum se realizează un JOIN folosind sintaxa SQL-3 pentru a obține toate rândurile din tabela A
și numai rândurile corespunzătoare din tabela B
, dar folosind sintaxa specifica OUTER JOIN (nu cea cu (+)
)?
Cum se pot combina rezultatele a două interogări SELECT
care returnează coloane cu tipuri de date diferite, folosind UNION
?
Cum se pot combina rezultatele a două interogări SELECT
care returnează coloane cu tipuri de date diferite, folosind UNION
?
Care este implicația utilizării incorecte a unui PRODUS CARTEZIAN
într-o bază de date mare?
Care este implicația utilizării incorecte a unui PRODUS CARTEZIAN
într-o bază de date mare?
Care este semnificația marcajului (+)
într-o clauză WHERE
dintr-un OUTER JOIN
(ex: a.id_dep = b.id_dep(+
)?
Care este semnificația marcajului (+)
într-o clauză WHERE
dintr-un OUTER JOIN
(ex: a.id_dep = b.id_dep(+
)?
Cum ai scrie o interogare echivalentă celei de mai jos, dar folosind sintaxa JOIN implicita? SELECT c.den_dep, a.nume FROM angajati a JOIN departamente c ON a.id_dep=c.id_dep
Cum ai scrie o interogare echivalentă celei de mai jos, dar folosind sintaxa JOIN implicita? SELECT c.den_dep, a.nume FROM angajati a JOIN departamente c ON a.id_dep=c.id_dep
Flashcards
Metode de JOIN
Metode de JOIN
Extragerea datelor din mai multe tabele folosind SELECT
.
Ce este un EQUI-JOIN?
Ce este un EQUI-JOIN?
Într-un EQUI-JOIN
, condiția de JOIN
folosește doar egalități.
Ce este un NON EQUI-JOIN?
Ce este un NON EQUI-JOIN?
Permite JOIN
-ul chiar și fără coloane comune utilizând operatori, nu doar egalități.
Ce este un SELF JOIN?
Ce este un SELF JOIN?
Signup and view all the flashcards
Ce este Produsul Cartezian sau CROSS JOIN?
Ce este Produsul Cartezian sau CROSS JOIN?
Signup and view all the flashcards
Ce este un JOIN EXTERN (OUTER JOIN)?
Ce este un JOIN EXTERN (OUTER JOIN)?
Signup and view all the flashcards
Ce este LEFT OUTER JOIN?
Ce este LEFT OUTER JOIN?
Signup and view all the flashcards
Ce este RIGHT OUTER JOIN?
Ce este RIGHT OUTER JOIN?
Signup and view all the flashcards
Ce este un JOIN VERTICAL?
Ce este un JOIN VERTICAL?
Signup and view all the flashcards
Reguli de JOIN
Reguli de JOIN
Signup and view all the flashcards
Lipsa conditiei de JOIN
Lipsa conditiei de JOIN
Signup and view all the flashcards
Ce rol are SQL-3
?
Ce rol are SQL-3
?
Signup and view all the flashcards
Ce face USING
în SQL-3
?
Ce face USING
în SQL-3
?
Signup and view all the flashcards
Ce face ON
în SQL-3
?
Ce face ON
în SQL-3
?
Signup and view all the flashcards
Ce este un 'NATURAL JOIN' ?
Ce este un 'NATURAL JOIN' ?
Signup and view all the flashcards
La ce folosește OUTER JOIN
?
La ce folosește OUTER JOIN
?
Signup and view all the flashcards
Study Notes
Introducere
- Acest curs practic se concentrează pe metodele JOIN în bazele de date.
- Sunt incluse metodele Equi JOIN, Non Equi JOIN, Self JOIN, produsul cartezian (CROSS JOIN), reguli de JOIN și metode de JOIN în SQL-3.
- Cursul se va termina cu o listă de referințe bibliografice.
Anunț Școala de Vară VLDB 2025
- VLDB Summer School 2025 va avea loc între 28-31 iulie 2025 la Universitatea din Wrocław, Polonia.
- Tema este "Trustworthy Processing of Very Large Databases: Foundational Topics, Systems, Reliability & Security, Applications".
- Scopul este de a reuni studenți cercetători și experți internaționali în Database Management Systems.
- Școala de vară va oferi educație privind subiecte de actualitate și va facilita schimbul de experiență între participanți și experți.
- Mai multe informații pot fi găsite la https://vldb-sc25.cs.uni.wroc.pl/.
Metode de Join: Sintaxă și Parametri
- Pentru a extrage date din mai multe tabele, se utilizează metode de JOIN cu comanda SELECT.
- Sintaxa generală pentru un join simplu este:
SELECT [DISTINCT,ALL] [table].expresion expr_alias FROM [schema.table1] table1_alias, [schema.table2] table2_alias, WHERE table1_alias.column=table2_alias.column ORDER BY expresion(position)] [ASC,DESC]
Parametrii comenzii SELECT
DISTINCT
returnează o linie dacă cererea are linii duplicateALL
returnează toate liniile simple și duplicateschema.table
reprezintă schema de identificare tabelară specificată prin user.table_nameexpresion
reprezintă un nume de coloană sau o expresie (* selectează toate coloanele tabelelor din clauza FROM)expr_alias
este un nume alocat unei expresii folosită în formatarea coloaneitable_alias
este un nume alocat unei tabele folosit în cereri corelateWHERE
reprezintă o clauză care trebuie îndeplinită pentru criteriul de selecțieORDER BY expresion(position)
ordonează liniile selectate după coloanele indicate în expresie
EQUI-JOIN
- Un equi-join apare când condiția de join include doar egalități între tabele/entități.
- Pentru a realiza un join pe mai multe tabele, acestea trebuie să aibă coloane de același tip, cu date comune sau corelate.
- Exemplu: Selectarea id-ului și denumirii departamentului, a numelui, a funcției din tabelele
angajati
șidepartamente
SELECT a.id_dep, b.den_dep depart, a.nume, a.functie FROM angajati a, departamente b WHERE a.id_dep=b.id_dep and a.id_dep=10;
- Aliasurile sunt folosite pentru a evita ambiguitatea referirii coloanelor cu același nume.
NON EQUI-JOIN
- Un Non Equi-Join este folosit atunci când în condiția de join sunt utilizați alți operatori decât cel de egalitate sau două tabele fără coloane comune trebuie relationate.
- Exemplu: Relația dintre tabelele angajati și grila_salariu este un non-equi-join.
- Pentru a evalua gradul de salarizare al unui angajat, trebuie sa consultam grila de salarizare pentru a identifica in ce plaja de salariu se incadreaza salariul.
- Exemplu:
SELECT a.nume, a.salariu, b.grad FROM angajati a, grila_salariu b WHERE a.salariu BETWEEN b.nivel_inf AND b.nivel_sup AND a.id_dep=20;
Utilizare Equi-Join și Non Equi-Join Combinat
- Sunt situatie in care trebuie sa folosim si equi-join si non equi-join intr-o cerere
- In exemplul anterior, daca dorim sa listam si departamentul, va trebui sa facem join intre trei tabele:
- SQL> SELECT c.den_dep,a.nume, a.salariu, b.grad FROM angajati a, grila_salariu b, departamente c WHERE a.salariu BETWEEN b.nivel_inf AND b.nivel_sup AND a.id_dep=c.id_dep AND a.id_dep=20;
SELF JOIN
- Self Join reprezintă joinul unei tabele cu ea însăși.
- Se folosește când trebuie extrase date corelate din aceeași tabelă.
- Exemplu: Afișarea sefilor angajatilor
- SQL> SELECT a.nume nume_ang, a.functie functie_ang, b.nume nume_sef, b.functie functie_sef FROM angajati a, angajati b WHERE a.id_sef=b.id_ang AND a.id_dep=10;
CROSS JOIN (Produsul Cartezian)
- Produsul cartezian se obține prin concatenarea fiecărei linii a unei tabele cu fiecare linie din cealaltă, rezultând un număr de linii egal cu produsul numărului de linii din fiecare tabelă.
- SQL> SELECT nume ,functie ,den_dep FROM angajati , departamente WHERE functie='DIRECTOR';
- Această situație apare când sunt puse greșit condiții în clauza WHERE.
- Poate aduce în același SELECT date din mai multe instanțe separate ale tabelelor.
JOIN EXTERN (OUTER JOIN)
- Permite selectarea liniilor care îndeplinesc condițiile din clauza WHERE, dar și a liniilor care nu îndeplinesc toate condițiile.
- Se realizează un OUTER JOIN pentru a aduce în setul de date întors de SELECT și înregistrarea aferentă departamentului OPPERATIONS (DEPTNO=40)
- SQL> SELECT a.id_dep, a.den_dep, b.nume, b.functie FROM departamente a, angajati b WHERE a.id_dep=b.id_dep(+);
Variante Outer Join
- Variantă cu operatorul (+), care se pune în dreptul coloanei tabelei mai sărace dpdv al JOIN-ului și variantă cu sintaxă specifică LEFT OUTER JOIN, LEFT INDICÂND TABELA MAI BOGATĂ.
- SQL> SELECT b.id_dep departament, a.nume nume_ang, a.data_ang, a.salariu FROM angajati a , departamente b WHERE a.id_dep(+)=b.id_dep;
- Semnul (+) se pune în dreptul tabelei deficitare ca informații.
- Se poate folosi și operatorul BETWEEN într-un join extern (SELECT c.den_dep, a.nume, a.salariu3 salariu_nou, a.comision, b.grad FROM angajati a, grila_salariu b, departamente c WHERE a.salariu3+ nvl(a.comision,0) BETWEEN b.nivel_inf(+) AND b.nivel_sup(+) AND a.id_dep=c.id_dep ;)
JOIN VERTICAL
- Join-ul vertical este folosit pentru prelucrarea liniilor returnate de mai multe cereri SELECT și folosește operatorii UNION (reuniune), INTERSECT (intersectie), MINUS (diferenta).
- Join-ul se face după coloane de același tip.
Reuniune(UNION)
- Trebuie retinut ca reuniunea se poate face pe coloane declarate de acelasi tip (number,varchar, date), chiar daca au semnificatii diferite.
- Exemple:
- SQL> SELECT id_dep,nume,functie,salariu FROM angajati WHERE id_dep=10 UNION SELECT id_dep,nume,functie,salariu FROM angajati WHERE id_dep=30;
- SQL> SELECT A.ENAME ANGAJAT, NVL(A.COMM, 0) COMISION, A.SAL+ NVL(A.COMM, 0) VENIT, 'FOARTE BUN' "CALIFICATIV VENIT" FROM EMP A WHERE NVL(A.COMM, 0) >0 AND A.SAL+ NVL(A.COMM, 0)>2500 UNION SELECT A.ENAME ANGAJAT, NVL(A.COMM, 0) COMISION, A.SAL+ NVL(A.COMM, 0) VENIT, 'BUN' "CALIFICATIV VENIT" FROM EMP A WHERE NVL(A.COMM, 0) >0 AND A.SAL+ NVL(A.COMM, 0)<=2500
Diferenta(MINUS)
- Pentru a afla care sunt functiile din departamentul 10 care nu se regasesc in departamentul 30, folosim operatorul MINUS:
- SQL> SELECT functie FROM angajati WHERE id_dep = 10 MINUS SELECT functie FROM angajati WHERE id_dep = 30;
Reguli de JOIN
Atunci cand conditia de join lipseste, fiecare linie a unei tabele din lista FROM este asociata cu fiecare linie a celorlalte tabele, obtinandu-se de fapt produsul cartezian al acestora.
Daca in conditia de join apar numai egalitati operatia este numita si equi-join. In celelalte cazuri avem un non-equi-join.
In lista de tabele care participa la join o tabela poate sa apara repetat. O astfel de operatie este numita si joinul unei tabele cu ea insasi (self-join).
In cazul in care o linie a unei tabele nu se coreleaza prin conditia de join cu nicio linie din celelalte tabele ea nu va participa la formarea rezultatului. Se poate insa obtine ca aceasta sa fie luata in considerare pentru rezultat, folosind un join extern (outer join).
In cazul general al unui join pe N tabele, conditia de join este compusa din N - 1 subconditii conectate prin AND care relationeaza intreg ansamblul de tabele. Altfel spus, daca se construieste un graf al conditiei in care nodurile sunt tabele si arcele subconditii de join care leaga doua tabele, atunci acest graf trebuie sa fie conex.
Marcajul de join extern se poate folosi si atunci cand conditia de join este compusa, cu exceptia cazului in care se foloseste OR sau operatorul de incluziune IN urmat de o lista care contine mai mult de o valoare.
Joinul extern se poate folosi si in conjunctie cu operatorii specifici SQL.
Metode de JOIN în SQL-3
Pana la versiunea Oracle 9i sintaxa joinului in Oracle era diferita de standardul ANSI (American National Standards Institute).
Incepand cu aceasta versiune au fost introduse in limbaj si tipurile de join din standardul SQL-3(anul 1999) printre care cross-join, natural join si mai multe variante de outer join:
CROSS JOIN – join pe produs cartezian
[INNER] JOIN … USING – join pe coloane comune
[INNER] JOIN … ON – join general
NATURAL JOIN – join natural
OUTER JOIN … ON – join extern
In clauza FROM avem perechi de tabele care participa la join.
CROSS JOIN
- CROSS JOIN este folosit pentru otinerea produsul cartezian si are sintaxa:
- SELECT [DISTINCT|ALL] [[table|table_alias].]{column|expression} [column_alias] FROM [schema.]table1 [table1_alias] CROSS JOIN [schema.]table2 [table2_alias] [other clauses]
Join cu USING
- Utilizarea USING specifică coloanele comune pe care se bazează joinul.
- SQL> SELECT id_dep, den_dep, nume, data_ang, sediu FROM angajati INNER JOIN departamente USING (id_dep);
Join general(JOIN..ON)
- Conditia de join se pune in clauza ON. Sintaxa este:
- SELECT [DISTINCT|ALL] {{table|table_alias}.}{column|expression} [column_alias] FROM [schema.]table1 [table1_alias] [INNER] JOIN [schema.]table2 [table2_alias] ON {{table1|table1_alias}.}column_fromTable1 = {{table2|table2_alias}.}column_fromTable2 [other clauses]
NATURAL JOIN
In cazul folosirii clauzei NATURAL JOIN coloanele din cele doua tabele, pe care se face JOIN-ul, trebuie sa aiba aceeasi denumire.
Nu se accepta aliasuri pentru coloanele comune (cele pe care se face NATURAL JOIN-ul).
Daca coloanele au acelasi nume, nu se tine cont de tipul si semnificatia coloanelor si rezultatele pot fi eronate
OUTER JOIN
Join-ul extern se foloseste cand se doreste ca in rezultat sa apara si liniile cu valori nule pe coloanele corespondente din tabelele relationate:
LEFT In cazul join-ului extern stanga (LEFT OUTER JOIN), valorile nule provin din tabela2 (cea deficitara - săracă ca date). Sintaxa este:
SELECT [DISTINCT|ALL] {{table|table_alias}.}{column|expression} [column_alias]
FROM [schema.]table1 [table1_alias]
LEFT [OUTER ] JOIN [schema.]table2 [table2_alias]
ON {{table1|table1_alias}.}column_fromTable1 = {{table2|table2_alias}.}column_fromTable2
[other clauses]
Join-ului extern dreapta
- In cazul join-ului extern dreapta (RIGHT OUTER JOIN), valorile nule provin din tabela1 (cea deficitara ca date).
- Sintaxa este similara cu join extern stanga.
Recomandari bibliografice
- Florin Radulescu, Alexandru Boicea, Baze de date online, Editura Oamenilor de Stiinta din Romania, 2011
- Alexandru Boicea, Baze de date – Note de curs practic, Universitatea Politehnica din Bucuresti
- Alexandru Boicea, Oracle SQL, SQLPlus*, Editura Printech, 2007
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.