Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: SQL-kysely monesta taulusta

hevonen [11.10.2008 23:04:51]

#

select laina.lainanro nro, nimi, laina.summa lainasumma, count(*) eriä,
sum(maksuera.summa) maksut, max(eräpäivä) viimerä
from asiakas, laina, maksuerä

Koodissa on kolme taulua FROM:missa. Mitä se tarkoittaa? Olen luullut, että fromissa saisi olla vain yksi taulu. Käytän Oraclea.

Voiko samaa koodia tehdä, että mainitsee vain yhden taulun fromissa ja liittää subquereillä muutta taulut.

Sami

temu92 [11.10.2008 23:30:59]

#

Luultavasti toi on sallittu silloin kun on kaikki taulun sarakkeet varmasti samat, ja miksikäs ei kelpaisi tuo tuossa kyseisissä taulukoissa jonka lauseke tuossa on.

Antti Laaksonen [11.10.2008 23:43:34]

#

Jos tauluja on monta, kyselyn tulostaulu muodostetaan niin, että siinä ovat kaikki tavat valita kustakin taulusta yksi rivi.

Esimerkki: Taulussa "hlot" on henkilöiden nimiä ja asuinmaita. Taulussa "maat" on maiden nimiä ja maanosia.

nimi        maa
------------------------
Chen        Kiina
Jean        Ranska
Maria       USA
Paul        Ranska
nimi        maanosa
------------------------
Kiina       Aasia
Ranska      Eurooppa
USA         P-Amerikka

Tauluissa on 4 ja 3 riviä, joten rivien eri yhdistelmiä on 12:

SELECT *
FROM hlot, maat
hlot.nimi   hlot.maa    maat.nimi   maat.maanosa
------------------------------------------------
Chen        Kiina       Kiina       Aasia
Chen        Kiina       Ranska      Eurooppa
Chen        Kiina       USA         P-Amerikka
Jean        Ranska      Kiina       Aasia
Jean        Ranska      Ranska      Eurooppa
Jean        Ranska      USA         P-Amerikka
Maria       USA         Kiina       Aasia
Maria       USA         Ranska      Eurooppa
Maria       USA         USA         P-Amerikka
Paul        Ranska      Kiina       Aasia
Paul        Ranska      Ranska      Eurooppa
Paul        Ranska      USA         P-Amerikka

Yleensä kuitenkin kannattaa rajata tulostaulun rivejä jollain ehdolla:

SELECT hlot.nimi, maat.maanosa
FROM hlot, maat
WHERE hlot.maa = maat.nimi
hlot.nimi   maat.maanosa
------------------------
Chen        Aasia
Jean        Eurooppa
Maria       P-Amerikka
Paul        Eurooppa

Näin saatiin selville kahden taulun avulla, missä maanosassa kukin henkilö asuu.

hevonen [12.10.2008 00:35:34]

#

Kiitos Antti! Tuo selkeytti paljon.

Sami

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta