LIITOS (JOIN)

FROM-lauseessa luetellaan pilkulla eroteltuna kaikki taulut, joista tietoja halutaan liittää (engl. join) yhteen.. SELECT-lauseessa voidaan viitata kaikkien FROM-lauseessa lueteltujen taulujen kenttiin. Jos tauluissa on samannimisiä kenttiä, on ne erotettava toisistaan lisäämällä kentän nimen eteen taulun nimi ja piste. WHERE-lauseessa on määriteltävät liitosehdot kertovat, kuinka taulut liittyvät toisiinsa. Taulut yhdistävistä sarakkeista pitää löytyä toisiaan vastaavat arvot. Useimmiten yhdistäminen tapahtuu äititaulun (Oppilaat) perusavaimen (sotu) ja lapsi-taulun (Tentit) viiteavaimen (sotu) välillä. Yhdistävien kenttien ei tarvitse olla samaa tietotyyppiä. Molempien tulee kuitenkin olla numeerisia, merkkimuotoisia tai päivämäärätyyppisiä. On kuitenkin suositeltavaa käyttää samoja tyyppejä samoilla pituusmäärityksillä, jotta vältytään turhilta tyyppimuunnoksilta.

Tavallisin liitos luodaan seuraavasti:

/* Haetaan oppilaiden sukunimet ja kyseisten oppilaiden kaikkien tenttisuoritusten arvosanat */

SELECT Oppilaat.sukunimi, Tentit.arvosana

FROM Oppilaat, Tentit

WHERE Oppilaat.sotu = Tentit.sotu

sukunimi

arvosana

Meikäläinen

3

Meikäläinen

1,75

Meikäläinen

1

Meikäläinen

0

Meikäläinen

1

Wanha

2,25

Vilkas

1

Lahtonen

0

Meikäläinen

3

Meikäläinen

0

SQL-92:en mukaan sama liitos voidaan tehdä myös käyttäen INNER JOIN -määrettä. Sama haku kuin edellä mutta nyt INNER JOIN -versiona:

SELECT Oppilaat.sukunimi, Tentit.arvosana

FROM Oppilaat INNER JOIN Tentit

ON Oppilaat.sotu = Tentit.sotu

INNER-sana voidaan useimmissa ohjelmistoissa jättää pois. Jos liitossarakkeet ovat samannimiset voidaan käyttää myös luonnollista liitosta. Jälleen sama haku kuin edellä, mutta nyt käyttäen luonnollista liitosta:

SELECT Oppilaat.sukunimi, Tentit.arvosana

FROM Oppilaat NATURAL JOIN Tentit

Tai:

SELECT Oppilaat.sukunimi, Tentit.arvosana

FROM Oppilaat JOIN Tentit

USING (sotu)

Kentän nimeä ei saa tässä tapauksessa varustaa taulun nimellä.

Tauluille voidaan antaa uusi viitenimi:

SELECT Oppilaat.sukunimi, Tentit.arvosana

FROM Oppilaat O INNER JOIN Tentit T

ON O.sotu = T.sotu

Taulujen liitosten ei tarvitse perustua liitoskenttien tarkkaan yhtäsuuruuteen, vaan voidaan käyttää myös liitoksia pienempi kuin ja suurempi kuin. Liitos voidaan tehdä myös tauluun itseensä. Tällöin on pakko käyttää viitenimiä, jotta samannimiset taulut voidaan erottaa toisistaan.

/* Haetaan oppilaiden sukunimet, kurssien nimet ja tenttiarvosanat. */

SELECT O.sukunimi, K.kurssinnimi, T.arvosana

FROM (Oppilaat AS O INNER JOIN Tentit AS T ON O.sotu = T.sotu)

INNER JOIN Kurssit AS K ON T.kurssitunnus = K.kurssitunnus

sukunimi

kurssinnimi

arvosana

Meikäläinen

Tietotekniikan propedeuttinen kurssi

3

Lahtonen

Tietotekniikan propedeuttinen kurssi

0

Meikäläinen

Johdatus ohjelmointiin

1,75

Meikäläinen

Mikrotietokoneiden ohjelmistot

1

Meikäläinen

Johdatus ohjelmointiin

0

Meikäläinen

Johdatus ohjelmointiin

1

Wanha

Mikrotietokoneiden ohjelmistot

2,25

Meikäläinen

Mikrotietokonelaitteistot

3

Vilkas

Tietokannat

1

Meikäläinen

Johdatus ohjelmointiin

0

/* Sama kuin edellä */

SELECT O.sukunimi, K.kurssinnimi, T.arvosana

FROM Oppilaat AS O, Tentit AS T ,Kurssit AS K

WHERE O.sotu = T.sotu

AND K.kurssitunnus = T.kurssitunnus

/* Haetaan oppilaan sukunimi, etunimi, kaupunki, tentityn kurssin nimi ja arvosana */

SELECT O.sukunimi, O.etunimi, Pnro.kaupunki, K.kurssinnimi, T.arvosana

FROM Oppilaat AS O, Tentit AS T ,Kurssit AS K, Kaupunki AS Pnro, Laitokset AS LA

WHERE O.sotu = T.sotu

AND K.kurssitunnus = T.kurssitunnus

AND O.postinumero = Pnro.postinumero

AND O.laitosnro = La.laitosnro

sukunimi

etunimi

kaupunki

kurssinnimi

arvosana

Lahtonen

Tommi

Jokioinen

Tietotekniikan propedeuttinen kurssi

0

Meikäläinen

Masa

Jokioinen

Tietotekniikan propedeuttinen kurssi

3

Meikäläinen

Masa

Jokioinen

Johdatus ohjelmointiin

1,75

Meikäläinen

Masa

Jokioinen

Mikrotietokoneiden ohjelmistot

1

Meikäläinen

Masa

Jokioinen

Johdatus ohjelmointiin

0

Meikäläinen

Masa

Jokioinen

Johdatus ohjelmointiin

1

Meikäläinen

Maija

Jokioinen

Mikrotietokonelaitteistot

3

Meikäläinen

Maija

Jokioinen

Johdatus ohjelmointiin

0

Wanha

Gubbe

Jyväskylä

Mikrotietokoneiden ohjelmistot

2,25

Vilkas

Ville

Jyväskylä

Tietokannat

1

/* Haetaan oppilaan sukunimi ja hänen korkein arvosanansa jokaisen kurssin tentistä. Ryhmitellään haetut tiedot sukunimen ja kurssinimen mukaan ja laitetaan lopputulos kasvavaan järjestykseen sukunimen ja kurssinimen mukaan. */

SELECT O.sukunimi, K.kurssinnimi, MAX(T.arvosana) AS Arvosana

FROM Oppilaat AS O, Tentit AS T ,Kurssit AS K

WHERE O.sotu = T.sotu

AND K.kurssitunnus = T.kurssitunnus

GROUP BY O.sukunimi, K.kurssinnimi

ORDER BY sukunimi, kurssinnimi ASC

sukunimi

kurssinnimi

Arvosana

Lahtonen

Tietotekniikan propedeuttinen kurssi

0

Meikäläinen

Johdatus ohjelmointiin

1,75

Meikäläinen

Mikrotietokoneiden ohjelmistot

1

Meikäläinen

Mikrotietokonelaitteistot

3

Meikäläinen

Tietotekniikan propedeuttinen kurssi

3

Wanha

Mikrotietokoneiden ohjelmistot

2,25

Vilkas

Tietokannat

1

/* Ryhmitellään kurssien tenttitulosten arvosanojen keskiarvot kaupungeittain aakkosjärjestykseen. */

SELECT Pnro.kaupunki, K.kurssinnimi, AVG(T.arvosana) AS Keskiarvo

FROM Oppilaat AS O, Tentit AS T ,Kurssit AS K, Kaupunki AS Pnro

WHERE O.sotu = T.sotu

AND K.kurssitunnus = T.kurssitunnus

AND O.postinumero = Pnro.postinumero

GROUP BY Pnro.kaupunki, K.kurssinnimi

ORDER BY Pnro.kaupunki, K.kurssinnimi

kaupunki

kurssinnimi

Keskiarvo

Jokioinen

Johdatus ohjelmointiin

0,6875

Jokioinen

Mikrotietokoneiden ohjelmistot

1

Jokioinen

Mikrotietokonelaitteistot

3

Jokioinen

Tietotekniikan propedeuttinen kurssi

1,5

Jyväskylä

Mikrotietokoneiden ohjelmistot

2,25

Jyväskylä

Tietokannat

1

/* Tutkitaan ketkä kaikki asuvat samassa kaupungissa. */

SELECT O.sukunimi, OP.sukunimi, K.kaupunki

FROM Oppilaat AS O, Oppilaat AS OP, Kaupunki AS K

WHERE O.postinumero = K.postinumero

AND OP.postinumero = K.postinumero

AND OP.postinumero = O.postinumero

AND OP.sukunimi <> O.sukunimi

O.sukunimi

O.etunimi

OP.sukunimi

OP.etunimi

kaupunki

Lahtonen

Tommi

Meikäläinen

Masa

Jokioinen

Lahtonen

Tommi

Meikäläinen

Maija

Jokioinen

Meikäläinen

Masa

Lahtonen

Tommi

Jokioinen

Meikäläinen

Masa

Meikäläinen

Maija

Jokioinen

Meikäläinen

Maija

Lahtonen

Tommi

Jokioinen

Meikäläinen

Maija

Meikäläinen

Masa

Jokioinen