Interogări SQL; peste mai multe mese
Legarea tabelelor - alăturați-vă
Bazele de date relaționale constau de obicei dintr-un număr mare de tabele. Pentru o interogare SQL, doriți adesea date care provin din diferite tabele. Pentru a face acest lucru, tabelele trebuie să fie legate. Astfel de legături sunt numite Se alătură.

Tabelele sunt legate prin specificarea tabelelor implicate în clauza FROM. Atributele care provin din diferite tabele au adesea nume identice. Dacă un astfel de atribut este utilizat în interogarea SQL, trebuie specificat și numele tabelului. Se scrie: nume tabel.nume atribut.
| Numele atributului Name este ambiguu. Descrie numele profesorului pe de o parte și clasa pe de altă parte. În exemplul nostru, numele clasei trebuie să fie adresat cu Class.Name și numele profesorului cu Teacher.Name. |
| cometariu | Dacă numele coloanei este unic, nu este necesar să puneți numele tabelului în față. |
Următoarea interogare arată principiul. Sensul clauzei WHERE este explicat mai detaliat mai jos.
Numele tabelelor pot fi redenumite în clauza FROM. Pentru aceasta, SQL furnizează cuvântul cheie LA FEL DE disponibile, dar nu neapărat utilizate. De exemplu, este posibilă următoarea formulare a cererii de mai sus:
| SELECTAȚI l.name, k.name DIN Profesor LA FEL DE eu, clasa LA FEL DE k UNDE l.PersNr = k. managementul clasei; |
| SELECTAȚI l.name, k.name DIN Profesor l, clasa k UNDE l.PersNr = k. managementul clasei; |
Deoarece PersNr și managementul clasei sunt nume de atribute unice, clauza WHERE poate fi, de asemenea:
| UNDE PersNr = lider de clasă |
Numele tabelelor pot fi redenumite în clauza FROM. Pentru aceasta, SQL furnizează cuvântul cheie LA FEL DE disponibile, dar nu neapărat utilizate. De exemplu, este posibilă următoarea formulare a cererii de mai sus:
| SELECTAȚI p. Numele camerei nr DIN Profesor LA FEL DE p, camera de serviciu LA FEL DE d UNDE p.PersNr = d.PersNr; |
| SELECTAȚI p.Nume, adică camera nr DIN profesor p, birou d UNDE p.PersNr = d.PersNr; |
Deoarece numele și RaumNr sunt nume de atribute unice, clauza SELECT poate fi, de asemenea:
| SELECT nume, camera nr |
Înțelesul clauzei WHERE
Omiterea clauzei WHERE din exemplul de mai sus duce la următorul rezultat:
Crearea acestui rezultat poate fi imaginată după cum urmează. Cu un join, fiecare înregistrare dintr-un tabel este legată de fiecare înregistrare din celălalt tabel. Rezultatul este „stocat” într-un tabel virtual care conține atât coloanele unuia, cât și ale celorlalte tabele.
Cu ajutorul clauzei WHERE, pot fi specificate condiții de egalitate care exclud combinații fără sens sau fără sens.
Auto-alăturați-vă
Uneori, un tabel este legat de el însuși. Această asociere specială se numește Auto-alăturați-vă.
| SELECTAȚI Nume, subiect DIN Profesor, are_calificare didactică UNDE PersNr = profesor; |
| Baza de date de exerciții |
| SELECTAȚI Nume de familie DIN Profesor, are supraveghere de specialitate UNDE PersNr = profesor ȘI Subiect = „germană”; |
| Baza de date de exerciții |
| SELECTAȚI l.nume DIN Profesor l, student s, ist_fachlehrkraft_von i UNDE în clasă = s.gehoert_zu ȘI i.teacher = persoana 1 nr ȘI s.Name = 'Falbala'; |
| Baza de date de exerciții |
| SELECTAȚI un profesor DIN ist_fachlehrkraft_von a, ist_fachlehrkraft_von b UNDE a.teacher = b.teacher ȘI a.class = b.class ȘI NU (a.Fach = b.Fach); |
| Baza de date de exerciții |
Aceasta este o auto-asociere, deoarece tabela is_teacher_of este unită la sine.
Ascunde