Sunteți pe pagina 1din 2

În Oracle avem două moduri de a scrie legăturile (join-urile)

Prima metodă foloseşte sintaxa specifică Oracle. În acest caz condiţiile de join sunt incluse în clauza
WHERE. Această metodă este mai uşor de înţeles, însă are dezavantajul că în aceeaşi clauză WHERE se
includ atât condiţiile de filtrare a înregistrărilor afişate cât şi condiţiile de join.
A doua variantă foloseşte sintaxa ANSI/ISO, care este puţin mai greoaie, însă comenzile scrise
folosind această sintaxă sunt portabile şi în alte SGBD-uri care folosesc limbajul SQL.
1. JOIN-urile proprietate ORACLE
2. JOIN-urile ANSI/ISO SQL99
Interogari din mai multe tabele (JOIN-uri)
JOIN-urile proprietatea ORACLE JOIN-urile ANSI/ISO SQL99
1. Cartesian Product 1. Cross join
2. Equijoin 2. Natural join
3. Non-equijoin 3. Using clause
4. Outer join 4. Full (two sided) outer joins
5. Self join 5. Arbitrary join conditions for outer joins

Indiferent de sintaxa folosită există mai multe moduri de legare a tabelelor şi anume:
• Produsul cartezian – leagă fiecare înregistrare dintr-o tabelă cu toate înregistrările din cealaltă
tabelă.
• Equijoin – sunt legate două tabele cu ajutorul unei condiţii de egalitate.
• NonEquijoin - în acest caz condiţia de join foloseşte alt operator decât operatorul de egalitate.
• SelfJoin – este legată o tabelă cu ea însăşi, e folosită de obicei în conjuncţie cu relaţiile recursive.
• OuterJoin – sunt o extensie a equijoin-ului, când pentru unele înregistrări dintr-o tabelă nu există
corespondent în cealaltă tabelă, şi dorim ca aceste înregistrări fără corespondent să fie totuşi afişate.
Pe parcursul Join-urilor ne vom referi la acestă imagine.

orchestre Muzicieni
codorchestra Numeric (3) PK codmuzician Numeric(3) PK
nume Varchar2(100) nume Varchar2(100)
oras Varchar2(100) nationalitate Varchar2(100)
tara Varchar2(100) instrument Varchar2(100)
buget Numeric(10) salariu Numeric (6)
create table orchestre(codorchestra codorchestra Numeric(3) FK
numeric(3) ,denumire varchar2(100),oras
varchar2(100),tara varchar2(100),buget numeric(6), create table muzicieni(codmuzician numeric(3)
primary key (codorchestra)) primary key, codorchestra number(3), nume
varchar2(100),nationalitate
varchar2(100),instrument varchar2(100),salariu
numeric(6), foreign key (codorchestra)
references orchestre(codorchestra))

Join pe aceeași tabelă (SelfJoin). Se folosește pe tabele cu relație pe ele însele. Exemplu tabela
Angajați care este în relație cu ea însăși pe câmpul manager_id
select a.first_name as "angajat",b.first_name as În sintaxa ANSI
"manager" select a.first_name as "angajat",b.first_name as
from employees a,employees b "manager"
where a.manager_id=b.manager_id from employees a join employees b
on(a.manager_id=b.manager_id)
Outer join
A.În cazul în care dorim să afișăm toți muzicienii, chiar dacă aceștia nu aparțin unei orchestre
trebuie să folosim un tip de legătură pe tabele. Pentru acest aspect vom folosi secvența(+).
select m.nume,m.instrument,o.nume, o.oras
from muzicieni m, orchestre o
where m.codorchestra=o.codorchestra(+)

Obs.
Secvența (+) apare după coloana codorchestra a tabelei orchestre. Tabela orchestre este a doua în
clauza from. Este cazul Left Outer Join = sunt afișate toate înregistrările din tabela din stânga din clauza
From care au sau nu corespondent în tabela a doua.
În sintaxa ANSI avem echivalența:
select m.nume,m.instrument,o.nume, o.oras
from muzicieni m left outer join orchestre o
on(m.codorchestra=o.codorchestra)

B.Dacă dorim să afișăm orchestrele cu sau fără muzicieni înscriși vom folosi secvența (+) în dreptul
coloanei codorchestra a tabelei muzicieni. Vom afișa astfel toate înregistrările din tabela din dreapta a
clauzei FROM.
select m.nume,m.instrument,o.nume, o.oras
from muzicieni m, orchestre o
where m.codorchestra(+)=o.codorchestra

Această abordare este Right Outer Join. Prin urmare în sintaxa ANSI vom avea:
select m.nume,m.instrument,o.nume, o.oras
from muzicieni m Right Outer Join orchestre o
ON(m.codorchestra=o.codorchestra)
Obs. este importantă ordinea tabelelor în clauza FROM, nu ordinea în care sunt scrise în clauza
WHERE sau ON
Ce va afișa? A.
select m.nume,m.instrument,o.nume, o.oras
from muzicieni m, orchestre o
where o.codorchestra(+)=m.codorchestra

În cazul în care dorim să afișăm atât toate orchestrele cu sau fără muzicieni angajați, dar și
muzicienii angajați sau nu unor orchestre nu avem sintaxă în Oracle.
În sintaxa ANSI avem Full Outer Join:
select m.nume,m.instrument,o.nume, o.oras
from muzicieni m Full Outer Join orchestre o
ON(o.codorchestra=m.codorchestra)

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