Sunteți pe pagina 1din 15

SQL-Joncțiuni

Curs

1
Joncţiuni
 Interogare care combină înregistrări din
mai multe surse;
 Apar când avem în clauza FROM cel
puţin două tabele;
 Dacă cel puţin două tabele au câmpuri
cu denumiri identice, referirea la aceste
câmpuri se face prin utilizarea notaţiei
cu punct, adică numetabel.numecamp,
pentru a evita diverse erori.
2
Joncţiuni-condiţii
 Interogările prin care se realizează joncţiuni –
au cel puţin o condiţie în clauza FROM sau
WHERE;
 Condiţia de joncţiune compară două coloane,
fiecare dintr-un alt tabel;
 Câmpurile ce apar în comparaţiile precizate mai
sus nu trebuie să apară, neapărat, în clauza
SELECT;
 În cazul joncţiunilor, clauza WHERE poate
conţine şi alte condiţii care nu sunt legate direct
de joncţiune.
3
Echi-joncţiuni
 Sunt acele joncţiuni a căror condiţie se
formează cu ajutorul operatorului ‘=‘;
 Combină înregistrări care au valori echivalente
pentru coloanele specificate în condiţie;
 SELECT last_name, job_id,
departments.department_id,
department_name FROM employees,
departments WHERE employees.department_id
= departments.department_id ORDER BY
last_name;

4
Echi-joncţiuni (self-joncţiune)
 Sunt acele joncţiuni dintre un tabel şi el însuşi;
 tabelul apare de două ori în clauza FROM, dar
este urmat de nişte aliasuri, denumiri ce vor fi
folosite pentru referirea la câmpuri în cadrul
celorlaltor părţi componente a instrucţiunii
SELECT;
 SELECT e1.last_name||' works for '||
e2.last_name “Employees and Their Managers”
FROM employees e1, employees e2 WHERE
e1.manager_id = e2.employee_id AND
e1.last_name LIKE 'R%';
5
Produs cartezian
 Când nu avem condiţie într-o joncţiune;
 Se combină fiecare înregistrare dintr-un tabel cu fiecare
înregistrare din alt tabel;
 De exemplu, dacă două tabele a câte 100 de înregistrări
se combină, vom obţine un rezultat de 10000 înregistrări;
 De cele mai multe ori, rezultatul unui produs cartezian nu
este de dorit.
Joncţiunea dintre două sau mai multe
tabele care returnează acele înregistrări
care satisfac o condiţie se numeşte
joncţiune simplă (internă)

6
Joncţiuni externe
 Acele joncţiuni care extind rezultatul
obţinut prin intermediul unei joncţiuni
simple;
 Returnează toate înregistrările care
satisfac condiţia de joncţiune, dar pe
lângă acestea returnează şi anumite
înregistrări din cadrul unui tabel, pentru
care nici o înregistrare din celălalt tabel
nu satisface condiţia de joncţiune.

7
Joncţiuni externe
 O joncţiune externă dintre A şi B care
returnează toate înregistrările din A
(joncţiune externă stânga), se crează
folosind LEFT [OUTER] JOIN în clauza
FROM(recomandată de Oracle), sau prin
aplicarea operatorului (+) tuturor
coloanelor din B în clauza WHERE;
 Identic se poate proceda şi pentru
RIGHT.

8
Joncţiuni externe
 Se vor afişa toate înregistrările care
îndeplinesc condiţia joncţiunii, dar pe
lângă acestea, în cazul joncţiunii stânga
vor fi afişate şi celelalte valori din A, iar
în dreptul coloanelor din B va fi trecut
NULL, fiind valabilă şi reciproca, în cazul
joncţiunii dreapta;
 FULL [OUTER] JOIN-joncţiune externă
completă.

9
Anti-joncţiuni
 Returnează înregistrările din stânga
predicatului, pentru care nu sunt
înregistrările corespondente în partea
dreapta a acestuia;
 SELECT * FROM employees WHERE
department_id NOT IN (SELECT
department_id FROM departments
WHERE location_id = 1700) ORDER BY
last_name;

10
Semi-joncţiuni
 Returnează înregistrările care corespund valorii de
adevăr returnate de clauza EXISTS aplicată unei
subinterogări, fără a multiplica înregistrările din
partea stângă a acestui predicat în momentul în
care mai multe înregistrări din partea dreaptă
satisfac condiţia;
 SELECT * FROM departments WHERE EXISTS
(SELECT * FROM employees WHERE
departments.department_id =
employees.department_id AND employees.salary >
2500) ORDER BY department_name;

11
Structuri de control alternative
 CASE…WHEN….THEN;
 ELSE;
 Căutarea se efectuează de la stânga la dreapta (de la
primul WHEN….);
 Dacă nici o condiție nu este adevărată, returnează
expresia din ELSE;
 Dacă nu există ELSE, iar nici o condiție nu e adevărată,
returnează NULL;
 Important: valorile care se compară trebuie să fie din
același domeniu;
 Maxim 255 argumente(expresia WHEN THEN constituie
2 argumente).

12
Structuri de control alternative
 Simplă:
 SELECT cust_last_name, CASE credit_limit WHEN 100
THEN 'Low‘ WHEN 5000 THEN 'High‘ ELSE 'Medium' END
FROM customers;
 Cu condiție inițială(searched case):
 SELECT AVG(CASE WHEN e.salary > 2000 THEN e.salary
ELSE 2000 END) "Average Salary" FROM employees e;
 SELECT status, CASE status WHEN 'i' THEN
'Inactive' WHEN 't' THEN 'Terminated‘ ELSE 'Active‘
END AS StatusText FROM stage

13
Structuri de control alternative
 SELECT ename, empno, deptno, (CASE deptno
WHEN 10 THEN 'Accounting‘ WHEN 20 THEN
'Research‘ WHEN 30 THEN 'Sales‘ WHEN 40 THEN
'Operations‘ ELSE 'Unknown‘ END) department
FROM emp ORDER BY ename;
 SELECT ename, empno, sal,(CASE WHEN sal <
1000 THEN 'Low‘ WHEN sal BETWEEN 1000 AND
3000 THEN 'Medium‘ WHEN sal > 3000 THEN 'High‘
ELSE 'N/A‘ END) salary FROM emp ORDER BY
ename;

14
Structuri de control alternative
 COALESCE
 COALESCE (expr1, expr2) echivalent cu:
 CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2
END
 COALESCE (expr1, expr2, ..., exprn), pentru n>=3
 CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE
COALESCE (expr2, ..., exprn) END
 SELECT product_id, list_price, min_price,
COALESCE(0.9*list_price, min_price, 5) ”Sale”
FROM product_information WHERE supplier_id =
102050;

15

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