Documente Academic
Documente Profesional
Documente Cultură
C7 BD PDF
C7 BD PDF
Facultatea de Inginerie
Departamentul de Automatic, Energie i Mediu
BAZE DE DATE
LECTOR DR. ADRIAN RUNCEANU
10.05.2013
Curs 7
Limbajul SQL
10.05.2013
Limbajul SQL
7.2. JOIN-urile ANSI/ISO SQL99
7.2.1. Cross join
7.2.2. Natural join
7.2.3. Using clause
7.2.4. Full (two sided) outer joins
7.2.5. Arbitrary join conditions for outer
joins
7.3. Operatorii pe mulimi
10.05.2013
SELECT id_dept
FROM angajati NATURAL JOIN departamente
10.05.2013
10.05.2013
10.05.2013
10.05.2013
10.05.2013
10.05.2013
10
Limbajul SQL
7.2. JOIN-urile ANSI/ISO SQL9
7.2.1. Cross join
7.2.2. Natural join
7.2.3. Using clause
7.2.4. Full (two sided) outer joins
7.2.5. Arbitrary join conditions for outer
joins
7.3. Operatorii pe mulimi
10.05.2013
11
Join Clauses
n aceast parte vom studia:
1. folosirea clauzelor USING i ON
2. realizarea unui join cu 3 tabele
1. Clauza USING
ntr-un natural join, dac tabelele au coloane cu
acelai nume dar tipuri diferite, se produce eroare.
Pentru a evita aceast situaie, clauza JOIN se
nlocuiete cu clauza USING.
10.05.2013
12
Join Clauses
Clauza USING specific coloanele care ar
trebui folosite pentru pentru equijoin.
Coloana specificat n clauza USING nu
trebuie s aib nici un specificator (nume de
tabela sau alias), n nici o parte din
instruciunea SELECT.
10.05.2013
13
Join Clauses
Exemplu:
10.05.2013
14
Join Clauses
Clauza ON
Dac coloanele folosite pentru join au denumiri
diferite sau dac sunt folosii operatorii: <, > sau
BETWEEN, atunci nu putem folosi clauza USING.
n aceast situaie se folosete clauza ON.
Aceasta permite specificarea unei game variate
de condiii pentru join-uri.
De asemenea, clauza ON ne permite s
folosim WHERE pentru a restriciona linii dintr-o
tabel sau din ambele tabele.
10.05.2013
15
Join Clauses
Exemple:
10.05.2013
16
Join Clauses
2) folosirea clauzei WHERE
10.05.2013
17
Limbajul SQL
7.2. JOIN-urile ANSI/ISO SQL99
7.2.1. Cross join
7.2.2. Natural join
7.2.3. Using clause
7.2.4. Full (two sided) outer joins
7.2.5. Arbitrary join conditions for outer
joins
7.3. Operatorii pe mulimi
10.05.2013
18
Join Clauses
Realizarea unui join cu 3 tabele
Ambele clauze (ON si USING) se pot folosi
pentru un astfel de join.
SELECT id_angajat, oras, denumire
FROM angajati a JOIN departamente d
ON (d.id_dept = a.id_dept)
JOIN locatii l
ON (d.id_locatie = l.id_locatie)
10.05.2013
19
Join Clauses
Comparatie intre join-urile proprietate ORACLE si join-urile
ANSI/ISO SQL 1999
Join-uri proprietate
ORACLE
Produs cartezian
Equijoin
Non-equijoin
Cross Join
Natural Join (daca coloanele de join au
acelasi nume si acelasi tip de date)
Clauza USING (daca coloanele de join
au acelasi nume dar tipuri de date
diferite)
Clauza ON (daca coloanele au nume
diferite)
Clauza ON
10.05.2013
20
Join Clauses
APLICAII
1) Realizai un join ntre tabelele locatii i
departmente folosind coloana id_locatie. Limitai
rezultatele doar pentru locaia 1400.
2) Afiai: oraul, numele departamentului, id-ul
locaiei i id-ul departamentului pentru
departamentele 10, 20 i 30, pentru oraul TrguJiu.
10.05.2013
21
Join Clauses
1) Realizai un join ntre tabelele locatii i
departmente folosind coloana id_locatie. Limitai
rezultatele doar pentru locaia 1400.
10.05.2013
22
Join Clauses
2) Afiai: oraul, numele departamentului, id-ul
locaiei i id-ul departamentului pentru
departamentele 10, 20 i 30, pentru oraul TrguJiu.
SELECT l.oras, d.denumire, id_locatie, d.id_dept
FROM locatii l JOIN departamente d
USING (id_locate)
WHERE oras = Targu-Jiu'
AND id_dept IN (10, 20, 30);
10.05.2013
23
Limbajul SQL
7.2. JOIN-urile ANSI/ISO SQL99
7.2.1. Cross join
7.2.2. Natural join
7.2.3. Using clause
7.2.4. Full (two sided) outer joins
7.2.5. Arbitrary join conditions for outer
joins
7.3. Operatorii pe mulimi
10.05.2013
24
10.05.2013
25
10.05.2013
26
10.05.2013
27
10.05.2013
28
10.05.2013
29
Limbajul SQL
7.2. JOIN-urile ANSI/ISO SQL99
7.2.1. Cross join
7.2.2. Natural join
7.2.3. Using clause
7.2.4. Full (two sided) outer joins
7.2.5. Arbitrary join conditions for outer
joins
7.3. Operatorii pe mulimi
10.05.2013
30
10.05.2013
31
10.05.2013
32
10.05.2013
33
10.05.2013
34
10.05.2013
35
SELECT
w.nume AS Angajat",
w.id_angajat AS Ang#",
m.nume AS "Manager",
m. id_angajat AS "Mgr#"
FROM angajat w JOIN angajat m
ON (w.id_manager = m.id_angajat);
10.05.2013
36
SELECT
w.nume AS Angajat",
w.id_angajat AS Ang#",
m.nume AS "Manager",
m.id_angajat AS "Mgr#"
FROM angajati w
LEFT OUTER JOIN angajati m
ON (w.id_manager = m.id_angajati)
ORDER BY w. id_angajati;
10.05.2013
37
Limbajul SQL
7.2. JOIN-urile ANSI/ISO SQL99
7.2.1. Cross join
7.2.2. Natural join
7.2.3. Using clause
7.2.4. Full (two sided) outer joins
7.2.5. Arbitrary join conditions for outer
joins
7.3. Operatorii pe mulimi
10.05.2013
38
Operatorii pe mulimi
Operatorii pe mulimi combin rezultatele
obinute din dou sau mai multe interogri.
Cererile care conin operatori pe mulimi
se numesc cereri compuse.
Exist patru operatori pe mulimi:
1. UNION
2. UNION ALL
3. INTERSECT
4. MINUS
10.05.2013
39
Operatorii pe mulimi
Toi operatorii pe mulimi au aceeai
preceden.
Dac o instruciune SQL conine mai muli
operatori pe mulimi, server-ul Oracle evalueaz
cererea de la stnga la dreapta (sau de sus n jos).
Pentru a schimba aceast ordine de evaluare,
se pot utiliza paranteze.
10.05.2013
40
Operatorii pe mulimi
Operatorul UNION returneaz toate liniile
10.05.2013
41
Operatorii pe mulimi
Operatorul UNION ALL returneaz toate
10.05.2013
42
Operatorii pe mulimi
Operatorul INTERSECT returneaz toate
10.05.2013
43
Operatorii pe mulimi
Operatorul MINUS determin liniile
10.05.2013
44
Operatorii pe mulimi
Observaii:
1. n mod implicit, pentru toi operatorii cu
10.05.2013
45
Operatorii pe mulimi
1. n instruciunile SELECT asupra crora se
10.05.2013
46
Operatorii pe mulimi
APLICAII:
1. S se afieze: codurile departamentelor al cror nume conine
irul re sau n care lucreaz angajai avnd codul job-ului ing.
SELECT id_dept "Cod departament"
FROM angajati
WHERE UPPER(id_functie)='ing'
UNION
SELECT id_dept
FROM departamente
WHERE LOWER(denumire) LIKE '%re%';
10.05.2013
47
Operatorii pe mulimi
2. S se obin codurile departamentelor n care nu
lucreaz nimeni (nu este introdus nici un salariat n
tabelul angajati).
Se cer dou soluii.
Obs: Operatorii pe mulimi pot fi utilizai n subcereri.
Coloanele care apar n clauza WHERE a interogrii
trebuie s corespund, ca numr i tip de date, celor
din clauza SELECT a subcererii.
10.05.2013
Operatorii pe mulimi
Soluia 1
SELECT id_dept "Cod departament"
FROM departamente
MINUS
SELECT id_dept
FROM angajati;
48
10.05.2013
Operatorii pe mulimi
Soluia 2
SELECT id_dept
FROM departamente
WHERE id_dept NOT IN
(SELECT DISTINCT NVL(id_dept,0)
FROM angajati);
49
10.05.2013
ntrebri?
50