Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Equijoin

sql



+ Font mai mare | - Font mai mic



Equijoin


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.



a) Sintaxa Oracle

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

b) Sintaxa ANSI

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 JOIN

tabelele 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



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1211
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved