Tietokantakyselyjen parissa työskenteleville liitokset ovat tuttuja. Tietokantajärjestelmä tukevat tyypillisesti SQL-kielen perusliitoksia, joilla kysellään taulujen tietoja eri yhdistelmin. Liitosten ymmärtämistä helpottaa perustiedot matematiikan joukko-opista, jonka joukko-operaatiot on toteutettu SQL-kielen eri syntaksein. Toisinaan liitosten ymmärtämistä helpottavat myös visuaaliset kuvat joukoista ja niiden välisistä operaatioista. Kielen syntaksi saattaa hieman vaihdella eri tietokantajärjestelmissä, mutta käytännössä ne yleensä ymmärtävät eri tavoin kirjoitetut kyselyt. Esimerkiksi ulkoliitos LEFT JOIN voidaan kirjoittaa myös muotoon LEFT OUTER JOIN. Tavallinen sisäliitos voidaan kirjoittaa joko luettelemalla liitettävät taulut FROM-osassa pilkuilla erotettuina tai käyttämällä INNER JOIN -syntaksia. Olen koonnut oheiseen kuvaan tärkeimmät SQL-liitokset, joiden kanssa tulee enimmäkseen työskenneltyä.
Liitoksia voi kokeilla kahdella yksinkertaisella taululla. Esimerkissäni käytän tauluja A ja B, joissa on id-numerosarake ja teksti-arvosarake. Alla on lueteltu esimerkkitaulujen rivit.
Taulu A
a.id a.teksti
---- --------
1 omena
2 banaani
3 päärynä
4 meloni
Taulu B
b.id b.teksti
---- --------
1 rypäle
2 omena
3 persikka
4 banaani
INNER JOIN
Sisäliitos on ehkä tavallisin liitostyyppi.
SELECT *
FROM A
INNER JOIN B
ON A.teksti = B.teksti
a.id a.teksti b.id b.teksti
---- -------- ---- --------
1 omena 2 omena
4 meloni 3 meloni
OUTER JOIN
Sisäliitoksen lisäksi on luonnollisesti myös ulkoliitos. Ulkoliitoksen tulokseen voidaan valita kaikki rivit molemmista tauluista (FULL OUTER JOIN) tai osittain vain toisesta taulusta eli leikkauksena. Oheinen esimerkkikysely liittää kaikki rivit molemmista tauluista ja korvaa NULL-arvolla puuttuvat arvot.
SELECT *
FROM A
FULL OUTER JOIN B
ON A.teksti = B.teksti
a.id a.teksti b.id b.teksti
---- -------- ---- --------
NULL NULL 1 rypäle
NULL NULL 4 persikka
1 omena 2 omena
2 banaani NULL NULL
3 päärynä NULL NULL
4 meloni 3 meloni
Suositulla MySQL-tietokantajärjestelmällä tämänkaltainen ulkoliitos voidaan emuloida seuraavalla kyselyllä:
SELECT *
FROM A
LEFT OUTER JOIN B
ON B.teksti = A.teksti
UNION
SELECT *
FROM A
RIGHT OUTER JOIN B
ON B.teksti = A.teksti
LEFT JOIN
SELECT *
FROM A
LEFT JOIN B
ON A.teksti = B.teksti
a.id a.teksti b.id b.teksti
---- -------- ---- --------
1 omena 2 omena
2 banaani NULL NULL
3 päärynä NULL NULL
4 meloni 3 meloni
RIGHT JOIN
SELECT *
FROM A
RIGHT JOIN B
ON A.teksti = B.teksti
a.id a.teksti b.id b.teksti
---- -------- ---- --------
NULL NULL 1 rypäle
1 omena 2 omena
4 meloni 3 meloni
NULL NULL 4 persikka
Monimutkaisissa kyselyissä voi samanaikaisesti olla useita liitoksia. Lisää vaativuutta luovat alikyselyt ja niiden tulosten liittäminen pääkyselyyn. Hyvin muotoillut kyselyt tekevät joukko-operaatioista tehokkaita ja nopeuttavat toisinaan olennaisesti tietokantaan liittyviä operaatioita.