SQL-liitokset visuaalisesti

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

Julkaistu Fridayna 16.11.2012 klo 18:59 avainsanalla ohjelmointi.

Edellinen
Kasettidigitoija
Seuraava
Kilpa-ajo