Selectarea datelor din mai multe tabele (JOIN)
Destul de des trebuie să selectați date din mai multe tabele. Pentru a afișa date din mai multe tabele din aceeași interogare, Oracle vă permite să efectuați așa-numitele îmbinări de tabelă. Există două reguli legate de îmbinarea tabelelor pe care trebuie să le țineți cont. Datele din două (sau mai multe) tabele pot fi combinate dacă ambele tabele au o coloană de potrivire (cu același nume sau cu un nume diferit), iar această coloană într-unul din tabele este cheia primară (sau o parte a acelei chei).
SELECT ename, deptno FROM COMP ORDER BY deptno;
SELECT deptno, dname FROM DEPT ORDER BY deptno;
Să aruncăm o privire asupra unui exemplu de operator care să se alăture folosind sintaxa tradițională Oracle, în care combinăm conținutul tabelelor emp și dept împreună pentru a obține o listă a tuturor angajaților și a denumirilor departamentelor în care lucrează:
Rețineți multe componente importante ale conexiunii de masă. Utilizarea celor două tabele din clauza FROM indică în mod clar că masa se alătură. Rețineți, de asemenea, că înainte de numele fiecărui tabel există o literă: e pentru tabelul emp sau d pentru tabelul dept. Acest lucru servește ca o ilustrare a unui concept interesant - coloanele pot avea aliasuri la fel ca tabelele. Aliasurile servesc unui scop important - ei nu lasă Oracle să se confunde cu privire la ce masă să folosească la transmiterea datelor în coloana deptno. Reamintim că în ambele tabele (emp și dept) există coloane numite deptno.
Ambiguirile la îmbinarea tabelelor pot fi de asemenea evitate dacă specificați numele tabelului ca prefix înaintea numelui coloanei.
Rețineți că clauza noastră WHERE include o comparație pe câmpul deptno, care conectează datele în emp cu datele din departament. În absența acestei legături în ieșire, ați inclus toate datele de la emp și dept.
Sintaxă pentru conexiunea ANSI / ISO
În conformitate cu sintaxa ANSI / ISO, pentru a îmbina conținutul a două tabele pentru a obține un singur rezultat, trebuie să includeți expresia JOIN table_name ON ON join-condition în instrucțiunea SQL. Dacă doriți să utilizați aceeași sintaxă pentru a efectua aceeași conexiune de masă pe care am făcut-o înainte, declarația noastră va arăta astfel:
Rețineți diferențele dintre această sintaxă și sintaxa Oracle. În primul rând, în sintaxa ANSI / ISO, comparațiile utilizate pentru conexiune sunt separate de toate celelalte comparații folosind un cuvânt special ON care indică faptul că această comparație particulară este utilizată pentru conexiune. Încă puteți include clauza WHERE în cererile de conectare ANSI / ISO corespunzătoare. Singura diferență este că clauza WHERE va conține acum doar operatorii de comparație suplimentari utilizați pentru a filtra în continuare datele. În plus, nu ar trebui să specificați acum în clauza FROM numele tuturor tabelelor care urmează să fie îmbinate. În schimb, imediat după clauza FROM, trebuie să utilizați clauza JOIN, în care vor fi definite numele tuturor tabelelor care urmează să fie integrate.
Conexiuni naturale (NATURAL JOIN)
O conexiune naturală este o conexiune între două tabele, în care Oracle se alătură tabelelor din aceeași coloană din ambele tabele (în mod natural!). O conexiune naturală se face dacă se specifică cuvântul cheie NATURAL.
Singura coloană potrivită pentru tabele emp și dept este coloana depnto,
Este ușor să înlocuiți conexiunile naturale care fac posibilă o simplificare foarte mare a solicitărilor de conectare prin eliminarea aliaselor de masă și a comparațiilor pentru o conexiune.
Codul sursă pentru proiect este stocat pe bitbucket.
Dacă sunteți dispus să vă adăugați cunoștințele sau să corectați erorile și inexactitățile, scrieți în chat.