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 |