Sunteți pe pagina 1din 27

Saptamana 6

Sections 3, 4
Database Programming
Join-uri
Obtinerea de informatii din mai multe tabele

O baza de date contine


mai multe tabele intre
care exista relatii
Pentru a obtine date
din mai multe tabele
folosim JOIN-urile.
Tipuri de join-uri

Join-uri proprietate Oracle:


Produs cartezian
Join-uri ANSI SQL:
Equijoin
Cross join
Non-equijoin
Natural join
Outer join
Clauza USING
Self-join
Clauza ON
Left si Right Outer Join
Full Outer Join
Retineti!

OOcoloana
coloana
poate
poatefifi
prefixata
prefixatade
de
numele
numele
tabelului
tabeluluiin
in
care
carese
se
gaseste,
gaseste,
pentru
pentruaaevita
evita
confuziile.
confuziile.
Produsul cartezian

Daca 2 tabele nu au conditia de


join specificata in clauza
WHERE sau conditia nu este
valida atunci serverul Oracle
returneaza produsul cartezian al
celor 2 tabele.
Equijoin

Un equijoin
combina liniile
din 2 tabele,
care au valori
echivalente
pentru
coloanele
specificate.
Equijoin

Langa conditia de join pot fi


adaugate si alte conditii pentru
restrictionarea liniilor.
Utilizarea alias-urilor pentru tabele
Aliasurile de tabel se Am
Amfacut
facutun un
folosesc pentru a equijoin
equijoinpe pe
simplifica scrierea tabelele
tabelele
employees
employeessisi
Aliasul de tabel este departments
departmentssisi
valid numai pentru am
amutilizat
utilizat
instructiunea SELECT aliasuri
aliasuridedetabel.
tabel.
curenta
Precede numele
coloanelor
Daca a fost definit un
alias in clauza FROM,
atunci peste tot in
instructiunea curenta va
substitui numele
tabelului
Aliasurile de tabel pot
avea maxim 30 caractere
dar mai scurte este de
preferat
Equijoin pentru n tabele
De
Deobservat
observatordinea
ordineain incare
caresunt
sunt
scrise
scrisetabelele:
tabelele:tabelul
tabelulprecedent
precedent
Pentru a relationa n este
estein
inrelatie
relatiede
demulti
multila
launu
unucucu
tabele avem nevoie tabelul
tabelulanterior,
anterior,dedeasemenea
asemenea
conditiile
conditiilede
dejoin
joinse
sescriu
scriuinin
de n-1 conditii de aceiasi
aceiasiordine.
ordine.
join.
De exemplu, pentru
a uni 3 tabele avem
mevoie de 2 conditii
de join.
Nonequijoin
Relatia
Relatiadintre
dintreEmployees
Employeessisi
Se utilizeaza in cazul in care un Job_grades
Job_gradeseste
esteun
unexemplu
exemplu
tabel nu are o coloana de
denonequijoin.
nonequijoin.Coloana
Coloana
salary
salarytrebuie
trebuiesa
safie
fieintre
corespondenta cu un alt tabel. valorile
intre
valorilelowest_sal
lowest_salsisi
highest_sal
highest_saldin
dintabelul
Un nonequijoin nu contine Job_grades.
tabelul
Job_grades.
operatorul de egalitate.
Se foloseste operatorul
BETWEEN…AND.
Outer join

Se utilizeaza in cazul in care vrem sa


obtinem toate datele dintr-un tabel chiar
daca nu exista date corespondente in alt
tabel.
Operatorul pentru Outer join-uri este +.
De exemplu, angajatul Grant din tabela
Employees nu va fi afisat daca utilizam un
equijoin intre tabelele Employees si
Departments, pentru ca nu are atribuit un
departament.
Self-join
Se utilizeaza pentru a uni un tabel cu el insusi.
De exemplu pentru a gasi manager-ul fiecarui angajat
trebuie sa avem o relatie a tabelei Employees cu ea insasi:
pentru a gasi manager-ul angajatului Whalen trebuie sa:
Il cautam pe Whalen in Employees
Sa ne uitam in coloana Manager_id a lui Whalen, vom
gasi 101
Sa ne uitam inca o data in coloana last_name pentru
employee_id-ul 101.
In cadrul acestui proces ne-am uitat in tabela Employees de
2 ori.
Exemplu self-join

Pentru a face un self-join, tabelului respectiv i se dau doua aliasuri


sugestive, pentru a crea impresia ca sunt doua tabele distincte.
Join-uri proprietate ANSI SQL: Cross join

Se utilizeaza clauza
CROSS JOIN
Join-uri proprietate ANSI SQL: Natural Join
Un NATURAL JOIN se bazeaza pe toate coloanele din cele doua tabele care au acelasi nume.
Selecteaza liniile din cele doua tabele care au valori egale in coloanele implicate in join.
Daca avem coloane cu acelasi nume dar tipuri de date diferite, obtinem eroare
Natural
NaturalJoin-ul
Join-ul
se
seface
facedupa
dupa
coloana
coloana
comuna
comuna
Location_id.
Location_id.
Natural join cu clauza WHERE

Se pot adauga restrictii aditionale la un Natural Join utilizand o clauza


WHERE.

Exemplul
Exemplularata arata
cum
cumse sepot
pot
restrictiona
restrictiona
liniile
liniileobtinute
obtinute
doar
doarla la
departamentel
departamentel
ee20
20sisi50.
50.
Natural Join cu clauza USING
Daca mai multe coloane au acelasi nume dar nu au acelasi tip de date, clauza NATURAL JOIN poate fi
modificata utilizand clauza USING.
Utilizam clauza USING pentru a specifica coloana dupa care se va face join cand mai multe coloane ar putea
fi utilizate.
Nu se utilizeaza nume sau alias de tabel pentru coloana specificata in clauza USING, in orice loc din
instructiunea SELECT.
Clauzele NATURAL JOIN si USING se exclud reciproc.

Clauza ON permite
utilizarea clauzei
WHERE pentru a
restrictiona liniile
obtinute.

Coloana
Coloana
location_id
location_idnunu
are nume sau
are nume sau
alias
aliasde
detabel,
tabel,
nici
nici chiarin
chiar in
clauza SELECT.
clauza SELECT.
Join-uri cu clauza ON

Se utilizeaza daca:
coloanele dupa care facem
join nu au acelasi nume
join-ul se bazeaza pe
altceva decat o conditie de
egalitate
 vrem sa avem codul mai
usor de inteles.
Clauza ON permite utilizarea
clauzei WHERE pentru a
restrictiona liniile obtinute.
Exemplu join cu clauza ON

Am
Amfolosit
folosit
clauza
clauzaONON
pentru a
pentru a
specifica
specifica
coloanele
coloaneledupa
dupa
care
care se facejoin,
se face join,
acestea avand
acestea avand
nume
numediferite
diferite
Exemplu de join cu clauza ON si operator BETWEEN

Pentru
Pentrufiecare
fiecare
angajat
angajatseseafiseaza
afiseaza
salariul si gradul
salariul si gradul
acestuia
acestuia(A,(A,B,
B,C…)
C…)
JOIN cu 3 tabele si clauza ON

Clauza ON poate fi utilizata la


un join pe 3 sau mai multe
tabele.
JOIN cu 3 tabele si clauza USING

Clauza USING poate fi


utilizata la un join pe 3
sau mai multe tabele.
OUTER JOIN LEFT OUTER JOIN
RIGHT OUTER JOIN
Outer join

Este un join in care se returneaza in afara de liniile care satisfac


conditia de join si liniile care nu o satisfac.
Outer-join pot fi:
RIGHT OUTER JOIN – tabela de la dreapta (prima) deficitara
LEFT OUTER JOIN – tabela de la stanga (ultima) deficitara
FULL OUTER JOIN – se returneaza toate liniile din cele 2 tabele
chiar daca nu exista valoare corespondenta in celalalt tabel.
Pentru FULL OUTER JOIN nu exista
corespondent in sintaxa Oracle.
LEFT OUTER JOIN cu clauza ON

S-ar putea să vă placă și