Tulosta

CASE -kuvaus

Tietokanta

SQL -kyselyt

Yleistä kyselyistä

Sarakkeiden valinta

Rivien valinta

Tarkka vastaavuus

Vertailuoperaattorit

Lajittelu

AND

BETWEEN - AND

OR

IN

LIKE

NOT

Tyhjä merkkijono

Boolen algebra

Sulutus

Päivämääräfunktiot

Liitokset

Perinteinen liitos

Sisäliitos

Laskenta

Sarakkeilla

Ryhmillä

Muut

Alikyselyt

Kyselyiden yhdistäminen

Alikyselyitä

Alikyselyjen tarkoitetaan sitä, että varsinaiseen kyselyyn on 'upotettu' alikysely, jonka tulosjoukkoa varsinainen kysely käyttää hyväksi esim. ehdossa. Alikysely voi tuottaa vastaukseksi arvojoukon tai yksittäisen arvon!

Esimerkki: kysely hakee kaikki blokit, jotka ovat samaa laatua kuin blokki 17144:
SELECT *
FROM Block
WHERE qualityID = ( SELECT qualityID FROM Block WHERE blockID=17144 );

kysely hakee kaikki blokit, jotka ovat samanmittaisia kuin blokki 17144
SELECT *
FROM Block
WHERE len = ( SELECT len FROM Block WHERE blockID=17144 );

Alikyselyissä voit käyttää hyväksi myös funktioita: kysely hakee varastosta kaikki lyhyimmät blokit:
SELECT *
FROM Block
WHERE len = ( SELECT min(len) FROM Block );

Edelliset alikyselyt palauttivat aina yhden rivin. Usein kuitenkin alikyselyt palauttavat useampia rivejä, jolloin joudut käyttämään IN -funktioita:

hae laadut, joita on varastossa:
SELECT qualityid, name
FROM Quality WHERE qualityid IN ( SELECT DISTINCT qualityid FROM Block );

hae laadut, joita ei ole varastossa:
SELECT qualityid, name
FROM Quality
WHERE qualityid NOT IN ( SELECT DISTINCT qualityid FROM Block );

Huomaa 1:  alikyselyt voit usein korvata liitoksilla paitsi, jos alikyselyssä on koostefunktio tai käytät alikyselyä UPDATE ja DELETE -lauseissa!

Huomaa 2:  jos et halua että sivun ensimmäisissä esimerkeissä on alikyselyissä käytettävä blokki mukana niin anna komento seuraavasti

SELECT *
FROM Block
WHERE qualityID = ( SELECT qualityID FROM Block WHERE blockID=17144 )  AND
               blockID <> 17144;

 

Juha Kiukas - juha@kiukas.fi - 040 551 0711