CATEGORII DOCUMENTE |
Oare cum procedam daca dorim sa afisam pentru fiecare persoana, numele firmei la care lucreaza? Sa vedem de exemplu cum aflam numele firmei la care lucreaza Ionescu Gheorghe. Ne uitam in tabela persoane, la valoarea din coloana IdFirm. Aceasta valoare este . Apoi, in tabela firme cautam firma avand codul , si preluam numele acestei firme din coloana nume. Acest nume este Brasoveanca. Asadar Ionescu Gheorghe lucreaza la firma Brasoveanca. Deci a trebuit ca valoarea din coloana IdFirm din tabela Persoane sa coincida cu valoarea coloanei IdFirm din tabela Firme.
Cum realizam acest lucru folosind SQL? Simplu. Vom preciza conditia de egalitate dintre coloanele IdFirm din cele doua tabele in clauza WHERE ca mai jos:
SELECT p.nume, prenume, f.nume
FROM persoane p, firme f
WHERE p.idfirm = f.idfirm
Tabelul II.3.5. Equijoin intre tabelele Persoane si Firme
Nume |
Prenume |
Nume |
Ionescu |
Gheorghe |
Brasoveanca |
Vasilescu |
Vasile |
SC SoftCom |
Popescu |
Ioan |
SC Crisib SA |
Antonescu |
Elena |
SC Crisib SA |
Bischin |
Paraschin |
SC SoftCom |
Olaru |
Angela |
Brasoveanca |
Figura II.3.1. Equijoin
Bineinteles ca in conditia de equijoin pot fi precizate mai multe conditii. Daca de exemplu tabelele elevi si note ar contine urmatoarele coloane:
Elevi (#nume, #prenume, *adresa)
Note(#nume, #prenume, #disciplina, #data, *nota)
atunci pentru a afisa toate notele unui elev vom folosi comanda:
SELECT a.nume, a.prenume,
b.disciplina, b.data, b.nota
FROM elevi a, firme b
WHERE a.nume=b.nume AND a.prenume=b.prenume
In cazul sintaxei ANSI lucrurile se complica usor. In principal equijoinul se realizeaza folosind optiunea NATURAL JOIN in cadrul clauzei from astfel:
SELECT nume, prenume, nume
FROM persoane NATURAL JOIN firme
Insa daca rulam aceasta comanda vom fi surprinsi ca ea nu afiseaza nici o linie. De ce? Pentru ca NATURAL JOIN-ul leaga cele doua tabele pe toate coloanele cu nume comun din cele doua tabele. Adica, comanda anterioara este echivalenta cu urmatoarea comanda scrisa folosind sintaxa Oracle:
SELECT p.nume, prenume, f.nume
FROM persoane p, firme f
WHERE p.idfirm = f.idfirm AND p.nume=f.nume
ori nu are nici un sens sa punem conditia ca numele firmei (f.nume) sa coincida cu numele persoanei (p.nume
Reguli de folosire a optiunii NATURAL JOINtabelele sunt legate pe toate coloanele cu nume comun
coloanele cu nume comun trebuie sa aiba acelasi tip
in clauza SELECT coloanele comune celor doua tabele NU vor fi prefatate de aliasul tabelei.
Pentru a lega doua tabele folosind sintaxa ANSI dar conditia de egalitate sa fie pusa doar pe anumite coloane (nu pe toate coloanele cu nume comun ci doar pe o parte din acestea) se va folosi in loc de NATURAL JOIN clauza JOIN, iar coloanele pe care se face joinul se precizeaza in optiunea USING. Astfel comanda pentru afisarea firmelor la care lucreaza fiecare angajat se scrie astfel:
SELECT p.nume, prenume, f.nume
FROM personae p JOIN firme f
USING (IdFirm)
Restrictii la folosirea clauzei JOIN cu clauza USING
in clauza USING se trec in paranteza, separate prin virgula, numele coloanelor pe care se va face joinul
coloanele din clauza USING trebuie sa aiba acelasi tip in cele doua tabele
Daca in cele doua tabele exista nu exista coloane cu acelasi nume, sau coloanele cu nume comun au tipuri diferite in cele doua tabele, se va folosi clauza JOIN in conjunctie cu ON. In clauza ON pe poate trece orice conditie de join intre cele doua tabele.
SELECT p.nume, prenume,
f.nume
FROM persoane p JOIN firme f
ON (p.IdFirm=f.IdFirm)
Rezultatul obtinut este acelasi cu cel din tabelul II.3.5.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1211
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved