Päringud mitmest tabelist
Siiani oleme vaadanud näiteid, kus on päringud ühe tabeli põhjal, kuid erinevatest tabelite andmeid on võimalik kombineerida. Võimalik on kombineerida ükskõik kui palju tabeleid seostades need päringus. Nii saab luua palju kasulikke päringuid, kui tabelite vahel on mingi seos. Näiteks kui teame, et lemmikloomad on seotud omanikuga välisvõtme omanik_id abil, siis saame päringuga vaadata, millised loomad kuuluvad millisele omanikule.
SELECT omanikud.eesnimi, omanikud.perenimi, lemmikloomad.nimi FROM lemmikloomad, omanikud WHERE lemmikloomad.omanik_id=omanikud.id;
SELECT lause esimeses osas täpsustame, milliseid veerge tahame pärida. Näites näed, et veergude juures on täpsustatud ka, millisest tabelist veerg pärit on (kirjapilt tabelinimi.veerunimi
). Üldiselt ei ole vaja seda märkida, vaid saab ka lihtsalt veeru nime välja kirjutada, aga mõnikord on seda selguse mõttes hea teha, kui kahel tabelil on näiteks sama nimega veerg. Lause FROM osas täpsustame, millistest tabelitest me infot soovime saada. Lõpuks tuleb WHERE osas märkida, kuidas need tabelid omavahel seotud on, mille tulemusena ühendati kõik lemmikloomad omanikega. Siin on alamtabelil tunnus omanik_id ning ülemtabelil tunnus id. Kuna aga id on igas tabelis, siis omanikud.id peab olema kindlasti kirjutatud kasutades nii tabeli- kui ka veerunime.
Kõiki eelpoolvaadatud SELECT lauseosi, funktsioone ja piiranguid saab ka selliste päringute juures kasutada. Näiteks
SELECT eesnimi, perenimi, COUNT(nimi) AS arv FROM omanikud, lemmikloomad WHERE lemmikloomad.omaniku_id=omanikud.id GROUP BY eesnimi, perenimi HAVING COUNT(nimi)>2 ORDER BY 3 DESC;
Selle lausega me siis väljastame omanike eesnimed ja perenimed ning nende loomade arvu juhul kui neil on enam kui 2 looma. Tulemustabel järjestatakse kahanevalt.
Üldjuhul saab jälgida järgnevaid punkte mitut tabelit siduvate päringute loomiseks:
- SELECT lause esimenes osas pane kirja otsitavad tunnused (vajadusel koos funktsioonidega).
- FROM osas on kirjas kõik tabelid, mille veerunimed on päringulauses (NB! vaata ka, kas pole piirangutes mõnda tunnust teisest tabelist).
- WHERE osas pane alguses kirja, kuidas tabelid omavahel seotud on. Ülemtabeli primaarvõti on seotud alamtabeli välisvõtmega. Neil peab olema sama andmetüüp.
- Vajadusel lisa piiranguid.
- Vajadusel lisa teisi päringulause osi.
- Kontrolli veel üle, kas kõik tabelid said kirja pandud ning seostatud.
Päringulause (jätk) | Tabelite loomine. Kirjete lisamine ja muutmine |