Poizvedbe iz več notranje združenih tabel

Do zdaj smo uporabljali eno samo tabelo, vendar podatke o entitetah v resničnem svetu pogosto razdelimo na posamezne delčke in jih shranimo v več tabel s postopkom normalizacije (ang. normalization), ki smo ga spoznali v prejšnji učni enoti.

Normalizacija podatkovne baze je koristna oziroma uporabna, saj zmanjšuje podvojene podatke v kateri koli posamezni tabeli in omogoča, da podatki v podatkovni bazi rastejo neodvisno drug od drugega (to pomeni, da lahko vrste avtomobilskih motorjev dodajamo neodvisno od vsake posamezne vrste avtomobila). Kot kompromis so poizvedbe nekoliko bolj zapletene, saj morajo biti sposobne najti podatke iz različnih tabel podatkovne baze. Pri delu z velikimi tabelami pa se lahko pojavijo težave z zmogljivostjo sistema za upravljanje podatkovnih baz.

Če želimo odgovoriti na različna vprašanja o entiteti, ki ima podatke shranjene v več tabelah v normalizirani podatkovni bazi, se moramo naučiti, kako napisati poizvedbo, ki lahko združi podatke in iz podatkovne baze pridobi natančno tiste podatke, ki jih potrebujemo.

Tabele, ki si delijo informacije o posamezni entiteti, morajo imeti primarni ključ, ki v podatkovni bazi to entiteto enolično določa. Za primarni ključ najpogosteje uporabimo samodejno naraščajoča cela števila (ker so takšni ključi prostorsko učinkoviti), lahko pa uporabimo tudi enolične nize ali enolične zgoščene vrednosti (ang. hash).

Z uporabo ključne besede JOIN v poizvedbi lahko s pomočjo primarnih in tujih ključev združimo podatke vrstic v dveh ločenih tabelah. Najprej si bomo ogledali notranjo združitev s pomočjo ključne besede INNER JOIN, kasneje pa še različne zunanje združitve.


Poizvedba SELECT iz dveh tabel združenih z INNER JOIN
SELECT stolpec1, stolpec2, ...
  FROM tabela
INNER JOIN tabela2
  ON tabela.id = tabela2.tabela_id
WHERE pogoj(i)
ORDER BY stolpec ASC/DESC
  LIMIT stev_rezultatov
  OFFSET stev_odmika;

Postopek INNER JOIN združi vrstice iz prve in druge tabele, ki se ujemajo v primarnem ključu (kot je opredeljeno z omejitvijo ON) ter tako ustvari vrstico z rezultati, ki je kombinacija stolpcev iz obeh tabel. Po združitvi tabel se nato v poizvedbi uporabijo druge ključne besede, ki smo jih že spoznali.

Zanimivost

Morda boš videl(-a) poizvedbe pri katerih je INNER JOIN napisan preprosto kot JOIN. Obe ključni besedi sta enakovredni, vendar bomo notranja združevanja še naprej označevali s ključno besedo INNER JOIN, kar bo olajšajo branje poizvedb, ko bomo začeli uporabljati druge vrste (zunanjih) združevanj, ki jih bomo spoznali v nadaljevanju.