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.
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.
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.