Extras din curs
Metode de selecţie a datelor din tabele multiple
Obiective
După parcurgerea acestei secţiuni, studentul va avea cunoştinţele necesare:
• scrierii unei expresii SELECT pentru a accesa date din mai multe tabele folosind legături
(joncţiuni) de egalitate si nonegalitate;
• vizualizării datelor care nu îndeplinesc o condiţie de joncţiune folosind condiţii de joncţiune
externă;
• efectuării unei joncţiuni între un tabel şi el însuşi;
EMP DEPT
Există situaţii când trebuie să accesăm date din mai multe tabele. În exemplul de mai sus, rezultatul
afişat conţine date din două tabele separate.
• atributul EMPNO există în tabelul EMP;
• atributul DEPTNO există în ambele tabele EMP şi DEPT;
• atributul LOC există în tabelul DEPT.
Pentru a obţine rezultatul dorit trebuie realizată o legătură între tabelele EMP şi DEPT.
Definirea joncţiunilor
Vom folosi o condiţie de joncţiune ori de câte ori trebuie să accesăm date din mai multe tablele din
baza de date. Se poate crea o corespondenţă între liniile unui tabel şi liniile altui tabel pe baza
valorilor comune existente în coloanele corespondente, care sunt de obicei chei primare şi străine.
Pentru afişarea datelor din două sau mai multe tabele aflate în relaţie se va scrie o simplă condiţie
de joncţiune în clauza WHERE:
SELECT tabel1.coloana1, tabel1.coloana2, tabel2.coloana3
FROM tabel1, tabel2
WHERE tabel1.coloana1 = tabel2.coloana3;
EMPNO ENAME … DEPTNO
7893 KING … 10
7698 BLAKE … 30
… …
7934 MILLER … 10
DEPTNO DNAME LOC
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
EMPNO DEPTNO LOC
7893 10 NEW YORK
7698 30 CHICAGO
7782 10 NEW YORK
7566 20 DALLAS
7654 30 CHICAGO
7499 30 CHICAGO
…
14 rows selected
2
unde:
tabel.coloana indică tabelul şi coloana de unde este extrasă data
tabel1.coloana1 = este condiţia care leagă
tabel2.coloana2 cele două tabele
Observaţii:
• în momentul scrierii unei expresii SELECT care conţine o condiţie de joncţiune, este indicat ca
numele coloanelor să fie precedate de numele tabelului de care aparţin; în acest fel este mărită
claritatea codului SQL şi se îmbunătăţeşte accesul la baza de date.
• dacă un acelaşi nume de coloană apare în mai multe tabele, numele coloanei trebuie prefixat cu
numele tabelului de care aparţine.
• pentru a realiza o legătură între n tabele este nevoie de minim n-1 condiţii de joncţiune (e.g.
pentru a lega 4 tabele sunt necesare 3 joncţiuni). Această regula s-ar putea să nu se aplice dacă
tabelul are o cheie primară formată din mai multe atribute şi astfel este necesară mai mult de o
coloană pentru a identifica în mod unic fiecare linie.
Produsul Cartezian
Atunci când o condiţie de joncţiune este invalidă sau complet omisă, rezultatul este un produs
cartezian în care vor fi afişate toate combinaţiile de linii din tabelele implicate. Un produs cartezian
tinde să genereze un număr mare de linii, iar rezultatul său este în general nefolositor. De aceea
trebuie inclusă întotdeauna o condiţie de joncţiune validă în clauza WHERE, cu excepţia cazului
când se doreşte în mod explicit combinarea tuturor liniilor din tabele implicate în relaţie.
Exemplul următor afişează numele fiecărui angajat şi numele departamentului în care lucrează din
tabelele EMP şi DEPT. Deoarece nu a fost specificată clauza WHERE, toate liniile (14) din tabelul
EMP sunt combinate cu toate liniile (4) din tabelul DEPT, generând astfel 56 de linii în tabelul
rezultat.
SQL> SELECT emp.ename, dept.dname
2 FROM emp, dept;
ENAME DNAME
------ -----------
KING ACCOUNTING
BLAKE ACCOUNTING
...
KING RESEARCH
BLAKE RESEARCH
...
56 rows selected.
Tipuri de condiţii de joncţiune
Principalele tipuri de condiţii de joncţiune sunt:
1. echi-joncţiune;
2. non-echi-joncţiune.
Pe lângă acestea mai există şi alte tipuri de condiţii de joncţiune:
3. joncţiune externă;
4. joncţiune între un tabel şi el însuşi.
5.
1. Echi-joncţiuni
Pentru a determina numele departamentului unui angajat trebuie comparată valoarea din coloana
DEPTNO din tabelul EMP cu valorile DEPTNO din tabelul DEPT. Legătura astfel creată între
tabelele EMP şi DEPT este o echi-joncţiune - valorile din coloana DEPTNO din ambele tabele
trebuie să coincidă.
Preview document
Conținut arhivă zip
- Limbaj de Programare.pdf