SQL-kyselyn suoritusjärjestys

SELECT kentta1, SUM(kentta2)5.Valitaan lopputulokseen tulevat kentät ja muodostetaan niiden arvot
FROM Taulu1, Taulu2
WHERE foo = bar1. Rajataan kelpuutettavien tietueiden joukkoa
AND foobar > barfoo
GROUP BY kentta12.Tehdään tarvittaessa ryhmittely
HAVING MIN(kentta2) > 273.Rajataan lopputulokseen kelpaavia ryhmiä
ORDER BY foo DESC4.Määritellään lopputuloksen järjestys

Esimerkki

  1. Jos emme kerro miten taulut liittyvät toisiinsa niin saamme kaikki mahdolliset yhdistelmät eli paljon vääriä.

    VÄÄRIN

    SELECT etunimi, sukunimi, kurssi, paivamaara, arvosana 
    FROM Opiskelija, Tenttii
    
    etunimi sukunimi kurssi paivamaara arvosana
    Tommi Lahtonen TIE150 1.1.1997 3
    Tommi Lahtonen TIE150 1.1.1998 1.2.1975
    Tommi Lahtonen TIE150 1.1.1999 2.5.2002
    Tommi Lahtonen TIE150 1.1.1997 1.2.2025
    Tommi Lahtonen TIE150 1.1.1997 2
    Tommi Lahtonen TIE150 1.3.1997 1.2.1975
    Tommi Lahtonen TIE150 1.1.1997 1.1.1975
    Tommi Lahtonen TIE150 1.1.1997 1.5.2002
    Tommi Lahtonen TIE150 1.2.1997 1.2.2025
    Tommi Lahtonen TIE160 1.1.2000 2
    Tommi Lahtonen TIE160 1.1.2000 1.1.1975
    Tommi Lahtonen TIE160 1.1.2000 1.5.2002
    Tommi Lahtonen TIE160 1.1.2000 1.1.2025
    Tommi Lahtonen TIE160 1.1.2000 3
    Tommi Lahtonen TIE160 1.1.2000 1.2.1975
    Tommi Lahtonen TIE160 1.1.2000 2.5.2002
    Tommi Lahtonen TIE110 1.1.2000 2
    Tommi Lahtonen TIE110 1.2.2000 0
    Tommi Lahtonen TIE110 1.3.2000 2
    Tommi Lahtonen TIE110 1.4.2000 0
    Tommi Lahtonen TIE110 1.5.2000 3
    Tommi Lahtonen TIE110 1.6.2000 0
    Tommi Lahtonen TIE110 1.7.2000 0
    Tommi Lahtonen TIE101 1.1.2000 0
    Tommi Lahtonen TIE101 1.1.2000 1.1.1975
    Tommi Lahtonen TIE001 1.1.2000 1.5.2002
    Tommi Lahtonen TIE001 1.1.2000 1.1.2025
    Tommi Lahtonen TIE001 1.1.2000 0
    Tommi Lahtonen TIE120 1.1.2000 0
    Tommi Lahtonen TIE120 1.1.2000 2.5.2002
    Tommi Lahtonen TIE101 1.2.2000 1
    Tommi Lahtonen TIE101 1.2.2000 1.2.1975
    Tommi Lahtonen TIE001 1.2.2000 2.5.2002
    Tommi Lahtonen TIE001 1.2.2000 1.2.2025
    Tommi Lahtonen TIE001 1.2.2000 2
    Tommi Lahtonen TIE120 1.2.2000 3
    Tommi Lahtonen TIE120 1.2.2000 1.2.1975
    Petri Heinonen TIE150 1.1.1997 3
    Petri Heinonen TIE150 1.1.1998 1.2.1975
    Petri Heinonen TIE150 1.1.1999 2.5.2002
    Petri Heinonen TIE150 1.1.1997 1.2.2025
    Petri Heinonen TIE150 1.1.1997 2
    Petri Heinonen TIE150 1.3.1997 1.2.1975
    Petri Heinonen TIE150 1.1.1997 1.1.1975
    Petri Heinonen TIE150 1.1.1997 1.5.2002
    Petri Heinonen TIE150 1.2.1997 1.2.2025
    Petri Heinonen TIE160 1.1.2000 2
    Petri Heinonen TIE160 1.1.2000 1.1.1975
    Petri Heinonen TIE160 1.1.2000 1.5.2002
    Petri Heinonen TIE160 1.1.2000 1.1.2025
    Petri Heinonen TIE160 1.1.2000 3
    Petri Heinonen TIE160 1.1.2000 1.2.1975
    Petri Heinonen TIE160 1.1.2000 2.5.2002
    Petri Heinonen TIE110 1.1.2000 2
    Petri Heinonen TIE110 1.2.2000 0
    Petri Heinonen TIE110 1.3.2000 2
    Petri Heinonen TIE110 1.4.2000 0
    Petri Heinonen TIE110 1.5.2000 3
    Petri Heinonen TIE110 1.6.2000 0
    Petri Heinonen TIE110 1.7.2000 0
    Petri Heinonen TIE101 1.1.2000 0
    Petri Heinonen TIE101 1.1.2000 1.1.1975
    Petri Heinonen TIE001 1.1.2000 1.5.2002
    Petri Heinonen TIE001 1.1.2000 1.1.2025
    Petri Heinonen TIE001 1.1.2000 0
    Petri Heinonen TIE120 1.1.2000 0
    Petri Heinonen TIE120 1.1.2000 2.5.2002
    Petri Heinonen TIE101 1.2.2000 1
    Petri Heinonen TIE101 1.2.2000 1.2.1975
    Petri Heinonen TIE001 1.2.2000 2.5.2002
    Petri Heinonen TIE001 1.2.2000 1.2.2025
    Petri Heinonen TIE001 1.2.2000 2
    Petri Heinonen TIE120 1.2.2000 3
    Petri Heinonen TIE120 1.2.2000 1.2.1975
    Teemu Tieteilijä TIE150 1.1.1997 3
    Teemu Tieteilijä TIE150 1.1.1998 1.2.1975
    Teemu Tieteilijä TIE150 1.1.1999 2.5.2002
    Teemu Tieteilijä TIE150 1.1.1997 1.2.2025
    Teemu Tieteilijä TIE150 1.1.1997 2
    Teemu Tieteilijä TIE150 1.3.1997 1.2.1975
    Teemu Tieteilijä TIE150 1.1.1997 1.1.1975
    Teemu Tieteilijä TIE150 1.1.1997 1.5.2002
    Teemu Tieteilijä TIE150 1.2.1997 1.2.2025
    Teemu Tieteilijä TIE160 1.1.2000 2
    Teemu Tieteilijä TIE160 1.1.2000 1.1.1975
    Teemu Tieteilijä TIE160 1.1.2000 1.5.2002
    Teemu Tieteilijä TIE160 1.1.2000 1.1.2025
    Teemu Tieteilijä TIE160 1.1.2000 3
    Teemu Tieteilijä TIE160 1.1.2000 1.2.1975
    Teemu Tieteilijä TIE160 1.1.2000 2.5.2002
    Teemu Tieteilijä TIE110 1.1.2000 2
    Teemu Tieteilijä TIE110 1.2.2000 0
    Teemu Tieteilijä TIE110 1.3.2000 2
    Teemu Tieteilijä TIE110 1.4.2000 0
    Teemu Tieteilijä TIE110 1.5.2000 3
    Teemu Tieteilijä TIE110 1.6.2000 0
    Teemu Tieteilijä TIE110 1.7.2000 0
    Teemu Tieteilijä TIE101 1.1.2000 0
    Teemu Tieteilijä TIE101 1.1.2000 1.1.1975
    Teemu Tieteilijä TIE001 1.1.2000 1.5.2002
    Teemu Tieteilijä TIE001 1.1.2000 1.1.2025
    Teemu Tieteilijä TIE001 1.1.2000 0
    Teemu Tieteilijä TIE120 1.1.2000 0
    Teemu Tieteilijä TIE120 1.1.2000 2.5.2002
    Teemu Tieteilijä TIE101 1.2.2000 1
    Teemu Tieteilijä TIE101 1.2.2000 1.2.1975
    Teemu Tieteilijä TIE001 1.2.2000 2.5.2002
    Teemu Tieteilijä TIE001 1.2.2000 1.2.2025
    Teemu Tieteilijä TIE001 1.2.2000 2
    Teemu Tieteilijä TIE120 1.2.2000 3
    Teemu Tieteilijä TIE120 1.2.2000 1.2.1975
    Taina Tieteilijä TIE150 1.1.1997 3
    Taina Tieteilijä TIE150 1.1.1998 1.2.1975
    Taina Tieteilijä TIE150 1.1.1999 2.5.2002
    Taina Tieteilijä TIE150 1.1.1997 1.2.2025
    Taina Tieteilijä TIE150 1.1.1997 2
    Taina Tieteilijä TIE150 1.3.1997 1.2.1975
    Taina Tieteilijä TIE150 1.1.1997 1.1.1975
    Taina Tieteilijä TIE150 1.1.1997 1.5.2002
    Taina Tieteilijä TIE150 1.2.1997 1.2.2025
    Taina Tieteilijä TIE160 1.1.2000 2
    Taina Tieteilijä TIE160 1.1.2000 1.1.1975
    Taina Tieteilijä TIE160 1.1.2000 1.5.2002
    Taina Tieteilijä TIE160 1.1.2000 1.1.2025
    Taina Tieteilijä TIE160 1.1.2000 3
    Taina Tieteilijä TIE160 1.1.2000 1.2.1975
    Taina Tieteilijä TIE160 1.1.2000 2.5.2002
    Taina Tieteilijä TIE110 1.1.2000 2
    Taina Tieteilijä TIE110 1.2.2000 0
    Taina Tieteilijä TIE110 1.3.2000 2
    Taina Tieteilijä TIE110 1.4.2000 0
    Taina Tieteilijä TIE110 1.5.2000 3
    Taina Tieteilijä TIE110 1.6.2000 0
    Taina Tieteilijä TIE110 1.7.2000 0
    Taina Tieteilijä TIE101 1.1.2000 0
    Taina Tieteilijä TIE101 1.1.2000 1.1.1975
    Taina Tieteilijä TIE001 1.1.2000 1.5.2002
    Taina Tieteilijä TIE001 1.1.2000 1.1.2025
    Taina Tieteilijä TIE001 1.1.2000 0
    Taina Tieteilijä TIE120 1.1.2000 0
    Taina Tieteilijä TIE120 1.1.2000 2.5.2002
    Taina Tieteilijä TIE101 1.2.2000 1
    Taina Tieteilijä TIE101 1.2.2000 1.2.1975
    Taina Tieteilijä TIE001 1.2.2000 2.5.2002
    Taina Tieteilijä TIE001 1.2.2000 1.2.2025
    Taina Tieteilijä TIE001 1.2.2000 2
    Taina Tieteilijä TIE120 1.2.2000 3
    Taina Tieteilijä TIE120 1.2.2000 1.2.1975
    Kaisa Kielinero TIE150 1.1.1997 3
    Kaisa Kielinero TIE150 1.1.1998 1.2.1975
    Kaisa Kielinero TIE150 1.1.1999 2.5.2002
    Kaisa Kielinero TIE150 1.1.1997 1.2.2025
    Kaisa Kielinero TIE150 1.1.1997 2
    Kaisa Kielinero TIE150 1.3.1997 1.2.1975
    Kaisa Kielinero TIE150 1.1.1997 1.1.1975
    Kaisa Kielinero TIE150 1.1.1997 1.5.2002
    Kaisa Kielinero TIE150 1.2.1997 1.2.2025
    Kaisa Kielinero TIE160 1.1.2000 2
    Kaisa Kielinero TIE160 1.1.2000 1.1.1975
    Kaisa Kielinero TIE160 1.1.2000 1.5.2002
    Kaisa Kielinero TIE160 1.1.2000 1.1.2025
    Kaisa Kielinero TIE160 1.1.2000 3
    Kaisa Kielinero TIE160 1.1.2000 1.2.1975
    Kaisa Kielinero TIE160 1.1.2000 2.5.2002
    Kaisa Kielinero TIE110 1.1.2000 2
    Kaisa Kielinero TIE110 1.2.2000 0
    Kaisa Kielinero TIE110 1.3.2000 2
    Kaisa Kielinero TIE110 1.4.2000 0
    Kaisa Kielinero TIE110 1.5.2000 3
    Kaisa Kielinero TIE110 1.6.2000 0
    Kaisa Kielinero TIE110 1.7.2000 0
    Kaisa Kielinero TIE101 1.1.2000 0
    Kaisa Kielinero TIE101 1.1.2000 1.1.1975
    Kaisa Kielinero TIE001 1.1.2000 1.5.2002
    Kaisa Kielinero TIE001 1.1.2000 1.1.2025
    Kaisa Kielinero TIE001 1.1.2000 0
    Kaisa Kielinero TIE120 1.1.2000 0
    Kaisa Kielinero TIE120 1.1.2000 2.5.2002
    Kaisa Kielinero TIE101 1.2.2000 1
    Kaisa Kielinero TIE101 1.2.2000 1.2.1975
    Kaisa Kielinero TIE001 1.2.2000 2.5.2002
    Kaisa Kielinero TIE001 1.2.2000 1.2.2025
    Kaisa Kielinero TIE001 1.2.2000 2
    Kaisa Kielinero TIE120 1.2.2000 3
    Kaisa Kielinero TIE120 1.2.2000 1.2.1975
    Keijo Kirjailija TIE150 1.1.1997 3
    Keijo Kirjailija TIE150 1.1.1998 1.2.1975
    Keijo Kirjailija TIE150 1.1.1999 2.5.2002
    Keijo Kirjailija TIE150 1.1.1997 1.2.2025
    Keijo Kirjailija TIE150 1.1.1997 2
    Keijo Kirjailija TIE150 1.3.1997 1.2.1975
    Keijo Kirjailija TIE150 1.1.1997 1.1.1975
    Keijo Kirjailija TIE150 1.1.1997 1.5.2002
    Keijo Kirjailija TIE150 1.2.1997 1.2.2025
    Keijo Kirjailija TIE160 1.1.2000 2
    Keijo Kirjailija TIE160 1.1.2000 1.1.1975
    Keijo Kirjailija TIE160 1.1.2000 1.5.2002
    Keijo Kirjailija TIE160 1.1.2000 1.1.2025
    Keijo Kirjailija TIE160 1.1.2000 3
    Keijo Kirjailija TIE160 1.1.2000 1.2.1975
    Keijo Kirjailija TIE160 1.1.2000 2.5.2002
    Keijo Kirjailija TIE110 1.1.2000 2
    Keijo Kirjailija TIE110 1.2.2000 0
    Keijo Kirjailija TIE110 1.3.2000 2
    Keijo Kirjailija TIE110 1.4.2000 0
    Keijo Kirjailija TIE110 1.5.2000 3
    Keijo Kirjailija TIE110 1.6.2000 0
    Keijo Kirjailija TIE110 1.7.2000 0
    Keijo Kirjailija TIE101 1.1.2000 0
    Keijo Kirjailija TIE101 1.1.2000 1.1.1975
    Keijo Kirjailija TIE001 1.1.2000 1.5.2002
    Keijo Kirjailija TIE001 1.1.2000 1.1.2025
    Keijo Kirjailija TIE001 1.1.2000 0
    Keijo Kirjailija TIE120 1.1.2000 0
    Keijo Kirjailija TIE120 1.1.2000 2.5.2002
    Keijo Kirjailija TIE101 1.2.2000 1
    Keijo Kirjailija TIE101 1.2.2000 1.2.1975
    Keijo Kirjailija TIE001 1.2.2000 2.5.2002
    Keijo Kirjailija TIE001 1.2.2000 1.2.2025
    Keijo Kirjailija TIE001 1.2.2000 2
    Keijo Kirjailija TIE120 1.2.2000 3
    Keijo Kirjailija TIE120 1.2.2000 1.2.1975
    Kimmo Kasvattaja TIE150 1.1.1997 3
    Kimmo Kasvattaja TIE150 1.1.1998 1.2.1975
    Kimmo Kasvattaja TIE150 1.1.1999 2.5.2002
    Kimmo Kasvattaja TIE150 1.1.1997 1.2.2025
    Kimmo Kasvattaja TIE150 1.1.1997 2
    Kimmo Kasvattaja TIE150 1.3.1997 1.2.1975
    Kimmo Kasvattaja TIE150 1.1.1997 1.1.1975
    Kimmo Kasvattaja TIE150 1.1.1997 1.5.2002
    Kimmo Kasvattaja TIE150 1.2.1997 1.2.2025
    Kimmo Kasvattaja TIE160 1.1.2000 2
    Kimmo Kasvattaja TIE160 1.1.2000 1.1.1975
    Kimmo Kasvattaja TIE160 1.1.2000 1.5.2002
    Kimmo Kasvattaja TIE160 1.1.2000 1.1.2025
    Kimmo Kasvattaja TIE160 1.1.2000 3
    Kimmo Kasvattaja TIE160 1.1.2000 1.2.1975
    Kimmo Kasvattaja TIE160 1.1.2000 2.5.2002
    Kimmo Kasvattaja TIE110 1.1.2000 2
    Kimmo Kasvattaja TIE110 1.2.2000 0
    Kimmo Kasvattaja TIE110 1.3.2000 2
    Kimmo Kasvattaja TIE110 1.4.2000 0
    Kimmo Kasvattaja TIE110 1.5.2000 3
    Kimmo Kasvattaja TIE110 1.6.2000 0
    Kimmo Kasvattaja TIE110 1.7.2000 0
    Kimmo Kasvattaja TIE101 1.1.2000 0
    Kimmo Kasvattaja TIE101 1.1.2000 1.1.1975
    Kimmo Kasvattaja TIE001 1.1.2000 1.5.2002
    Kimmo Kasvattaja TIE001 1.1.2000 1.1.2025
    Kimmo Kasvattaja TIE001 1.1.2000 0
    Kimmo Kasvattaja TIE120 1.1.2000 0
    Kimmo Kasvattaja TIE120 1.1.2000 2.5.2002
    Kimmo Kasvattaja TIE101 1.2.2000 1
    Kimmo Kasvattaja TIE101 1.2.2000 1.2.1975
    Kimmo Kasvattaja TIE001 1.2.2000 2.5.2002
    Kimmo Kasvattaja TIE001 1.2.2000 1.2.2025
    Kimmo Kasvattaja TIE001 1.2.2000 2
    Kimmo Kasvattaja TIE120 1.2.2000 3
    Kimmo Kasvattaja TIE120 1.2.2000 1.2.1975
    Olli Opettaja TIE150 1.1.1997 3
    Olli Opettaja TIE150 1.1.1998 1.2.1975
    Olli Opettaja TIE150 1.1.1999 2.5.2002
    Olli Opettaja TIE150 1.1.1997 1.2.2025
    Olli Opettaja TIE150 1.1.1997 2
    Olli Opettaja TIE150 1.3.1997 1.2.1975
    Olli Opettaja TIE150 1.1.1997 1.1.1975
    Olli Opettaja TIE150 1.1.1997 1.5.2002
    Olli Opettaja TIE150 1.2.1997 1.2.2025
    Olli Opettaja TIE160 1.1.2000 2
    Olli Opettaja TIE160 1.1.2000 1.1.1975
    Olli Opettaja TIE160 1.1.2000 1.5.2002
    Olli Opettaja TIE160 1.1.2000 1.1.2025
    Olli Opettaja TIE160 1.1.2000 3
    Olli Opettaja TIE160 1.1.2000 1.2.1975
    Olli Opettaja TIE160 1.1.2000 2.5.2002
    Olli Opettaja TIE110 1.1.2000 2
    Olli Opettaja TIE110 1.2.2000 0
    Olli Opettaja TIE110 1.3.2000 2
    Olli Opettaja TIE110 1.4.2000 0
    Olli Opettaja TIE110 1.5.2000 3
    Olli Opettaja TIE110 1.6.2000 0
    Olli Opettaja TIE110 1.7.2000 0
    Olli Opettaja TIE101 1.1.2000 0
    Olli Opettaja TIE101 1.1.2000 1.1.1975
    Olli Opettaja TIE001 1.1.2000 1.5.2002
    Olli Opettaja TIE001 1.1.2000 1.1.2025
    Olli Opettaja TIE001 1.1.2000 0
    Olli Opettaja TIE120 1.1.2000 0
    Olli Opettaja TIE120 1.1.2000 2.5.2002
    Olli Opettaja TIE101 1.2.2000 1
    Olli Opettaja TIE101 1.2.2000 1.2.1975
    Olli Opettaja TIE001 1.2.2000 2.5.2002
    Olli Opettaja TIE001 1.2.2000 1.2.2025
    Olli Opettaja TIE001 1.2.2000 2
    Olli Opettaja TIE120 1.2.2000 3
    Olli Opettaja TIE120 1.2.2000 1.2.1975
  2. Korjataan kyselyä lisäämällä WHERE-ehto, joka kertoo mikä kenttä yhdistää käsiteltävät taulut.
    
    SELECT etunimi, sukunimi, kurssi, paivamaara, arvosana 
    FROM Opiskelija, Tenttii
    WHERE opiskelija.sotu = tenttii.opiskelija;
    
    
    etunimi sukunimi kurssi paivamaara arvosana
    Taina Tieteilijä TIE001 1.1.2000 1.1.2025
    Taina Tieteilijä TIE001 1.2.2000 1.2.2025
    Taina Tieteilijä TIE110 1.4.2000 0:00:00
    Taina Tieteilijä TIE150 1.1.1997 1.2.2025
    Taina Tieteilijä TIE160 1.1.2000 1.1.2025
    Tommi Lahtonen TIE101 1.1.2000 0:00:00
    Tommi Lahtonen TIE101 1.2.2000 31.12.1899
    Tommi Lahtonen TIE110 1.1.2000 1.1.1900
    Tommi Lahtonen TIE150 1.1.1997 2.1.1900
    Tommi Lahtonen TIE160 1.1.2000 2
    Kaisa Kielinero TIE001 1.1.2000 0:00:00
    Kaisa Kielinero TIE001 1.2.2000 1.1.1900
    Kaisa Kielinero TIE110 1.5.2000 2.1.1900
    Kaisa Kielinero TIE150 1.1.1997 2
    Kaisa Kielinero TIE150 1.3.1997 1.2.1975
    Kaisa Kielinero TIE160 1.1.2000 2.1.1900
    Keijo Kirjailija TIE110 1.6.2000 0
    Keijo Kirjailija TIE120 1.1.2000 0
    Keijo Kirjailija TIE120 1.2.2000 3
    Keijo Kirjailija TIE150 1.1.1997 1.1.1975
    Keijo Kirjailija TIE160 1.1.2000 1.2.1975
    Kimmo Kasvattaja TIE110 1.7.2000 0
    Kimmo Kasvattaja TIE120 1.1.2000 2.5.2002
    Kimmo Kasvattaja TIE120 1.2.2000 1.2.1975
    Kimmo Kasvattaja TIE150 1.1.1997 1.5.2002
    Kimmo Kasvattaja TIE150 1.2.1997 1.2.2025
    Kimmo Kasvattaja TIE160 1.1.2000 2.5.2002
    Petri Heinonen TIE101 1.1.2000 1.1.1975
    Petri Heinonen TIE101 1.2.2000 1.2.1975
    Petri Heinonen TIE110 1.2.2000 0:00:00
    Petri Heinonen TIE150 1.1.1998 1.2.1975
    Petri Heinonen TIE160 1.1.2000 1.1.1975
    Teemu Tieteilijä TIE001 1.1.2000 1.5.2002
    Teemu Tieteilijä TIE001 1.2.2000 2.5.2002
    Teemu Tieteilijä TIE110 1.3.2000 2
    Teemu Tieteilijä TIE150 1.1.1999 2.5.2002
    Teemu Tieteilijä TIE160 1.1.2000 1.5.2002
  3. Entäs jos haluammekin keskiarvon opiskelijan suorituksista. Ensimmäinen versio kyselystä menee helposti väärin koska GROUP BY-rivi unohtuu:

    VÄÄRIN

    
    SELECT etunimi, sukunimi, kurssi, paivamaara, AVG(arvosana)
    FROM Opiskelija, Tenttii
    WHERE opiskelija.sotu = tenttii.opiskelija;
    
    Error while executing the query;
    ERROR:  Attribute opiskelija.etunimi must be GROUPed or used in an aggregate function
    State:S1000,Native:7,Origin:
    
  4. Korjataan lisäämällä GROUP BY-osaan kaikki ne kentät jotka halutaan lopputulokseen ja joissa ei käytetä yhteenvetofunktioita. Lopputulos ei kuitenkaan vielä ole toivottu, koska ryhmittelykenttiä on liian monta.
    SELECT etunimi, sukunimi, kurssi, paivamaara, AVG(arvosana)
    FROM Opiskelija, Tenttii
    WHERE opiskelija.sotu = tenttii.opiskelija
    GROUP BY etunimi, sukunimi, kurssi, paivamaara
    ;
    etunimi sukunimi kurssi paivamaara avg
    Kaisa Kielinero TIE001 1.1.2000 0
    Kaisa Kielinero TIE001 1.2.2000 2
    Kaisa Kielinero TIE110 1.5.2000 3
    Kaisa Kielinero TIE150 1.1.1997 2
    Kaisa Kielinero TIE150 1.3.1997 1.2.1975
    Kaisa Kielinero TIE160 1.1.2000 3
    Keijo Kirjailija TIE110 1.6.2000 0
    Keijo Kirjailija TIE120 1.1.2000 0
    Keijo Kirjailija TIE120 1.2.2000 3
    Keijo Kirjailija TIE150 1.1.1997 1.1.1975
    Keijo Kirjailija TIE160 1.1.2000 1.2.1975
    Kimmo Kasvattaja TIE110 1.7.2000 0
    Kimmo Kasvattaja TIE120 1.1.2000 2.5.2002
    Kimmo Kasvattaja TIE120 1.2.2000 1.2.1975
    Kimmo Kasvattaja TIE150 1.1.1997 1.5.2002
    Kimmo Kasvattaja TIE150 1.2.1997 1.2.2025
    Kimmo Kasvattaja TIE160 1.1.2000 2.5.2002
    Petri Heinonen TIE101 1.1.2000 1.1.1975
    Petri Heinonen TIE101 1.2.2000 1.2.1975
    Petri Heinonen TIE110 1.2.2000 0
    Petri Heinonen TIE150 1.1.1998 1.2.1975
    Petri Heinonen TIE160 1.1.2000 1.1.1975
    Taina Tieteilijä TIE001 1.1.2000 1.1.2025
    Taina Tieteilijä TIE001 1.2.2000 1.2.2025
    Taina Tieteilijä TIE110 1.4.2000 0
    Taina Tieteilijä TIE150 1.1.1997 1.2.2025
    Taina Tieteilijä TIE160 1.1.2000 1.1.2025
    Teemu Tieteilijä TIE001 1.1.2000 1.5.2002
    Teemu Tieteilijä TIE001 1.2.2000 2.5.2002
    Teemu Tieteilijä TIE110 1.3.2000 2
    Teemu Tieteilijä TIE150 1.1.1999 2.5.2002
    Teemu Tieteilijä TIE160 1.1.2000 1.5.2002
    Tommi Lahtonen TIE101 1.1.2000 0
    Tommi Lahtonen TIE101 1.2.2000 1
    Tommi Lahtonen TIE110 1.1.2000 2
    Tommi Lahtonen TIE150 1.1.1997 3
    Tommi Lahtonen TIE160 1.1.2000 2
  5. Korjataan kyselyä lisää ja poistetaan ne kentät joiden mukaan emme halua ryhmitellä. Tällä kertaa meitä kiinnostavat suorituksien keskiarvo pelkän opiskelijan mukaan joten jätämme vain etunimi ja sukunimi -kentät arvosanan laskemisen lisäksi.
    SELECT etunimi, sukunimi, AVG(arvosana)
    FROM Opiskelija, Tenttii
    WHERE opiskelija.sotu = tenttii.opiskelija
    GROUP BY etunimi, sukunimi
    ;
    etunimi sukunimi avg
    Kaisa Kielinero 2.125
    Keijo Kirjailija 1.5.2002
    Kimmo Kasvattaja 1.91666666666667
    Petri Heinonen 1.8.2002
    Taina Tieteilijä 1.4.2002
    Teemu Tieteilijä 2
    Tommi Lahtonen 1.6.2002
  6. Nyt voimme rajata lopputulokseen tulevia ryhmiä. Otetaan mukaan vain ne opiskelijat joilla keskiarvo on suurempi tai yhtäsuuri kuin 1.75. Yleinen virhe on yrittää kirjoittaa rajoitus seuraavasti:

    VÄÄRIN

    SELECT etunimi, sukunimi, AVG(arvosana)
    FROM Opiskelija, Tenttii
    WHERE opiskelija.sotu = tenttii.opiskelija
    AND AVG(arvosana) > 2.3
    GROUP BY etunimi, sukunimi
    ;
    Error while executing the query;
    ERROR:  Aggregates not allowed in WHERE clause
    State:S1000,Native:7,Origin:
  7. Yhteenvetofunktioita ei voi käyttää WHERE-lauseessa, koska WHERE-lause kohdistuu aina yksittäiseen riviin eikä joukkoon kuten yhteenvetofunktiot. Oikea tapa tehdä haluttu rajoitus on käyttää HAVING-lausetta:
    SELECT etunimi, sukunimi, AVG(arvosana)
    FROM Opiskelija, Tenttii
    WHERE opiskelija.sotu = tenttii.opiskelija
    GROUP BY etunimi, sukunimi
    HAVING AVG(arvosana) >= 1.75
    ;
    etunimi sukunimi avg
    Kaisa Kielinero 2.125
    Kimmo Kasvattaja 1.91666666666667
    Petri Heinonen 1.8.2002
    Teemu Tieteilijä 2
  8. HAVING-lausetta ei voi myöskään käyttää ilman GROUP BY -lausetta, koska mitään ryhmittelyä ei tietenkään ole tehty:
    SELECT etunimi, sukunimi, AVG(arvosana)
    FROM Opiskelija, Tenttii
    WHERE opiskelija.sotu = tenttii.opiskelija
    HAVING AVG(arvosana) > 2.3
    ;
    Error while executing the query;
    ERROR:  Attribute opiskelija.etunimi must be GROUPed or used in an aggregate function
    State:S1000,Native:7,Origin:
  9. Tähän mennessä ei ole otettu mitenkään kantaa lopputuloksen järjestykseen. Lopputulokseen tulevien tietueiden järjestys on aivan järjestelmäkohtaista jos sitä ei ole määrätty ORDER BY -lauseella:
    SELECT etunimi, sukunimi, AVG(arvosana)
    FROM Opiskelija, Tenttii
    WHERE opiskelija.sotu = tenttii.opiskelija
    GROUP BY etunimi, sukunimi
    HAVING AVG(arvosana) >= 1.75
    ORDER BY sukunimi ASC, etunimi ASC
    etunimi sukunimi avg
    Petri Heinonen 1.8.2002
    Kimmo Kasvattaja 1.91666666666667
    Kaisa Kielinero 2.125
    Teemu Tieteilijä 2
  10. Järjestyksen voi määrätä myös yhteenvetofunktion avulla:
    SELECT etunimi, sukunimi, AVG(arvosana)
    FROM Opiskelija, Tenttii
    WHERE opiskelija.sotu = tenttii.opiskelija
    GROUP BY etunimi, sukunimi
    HAVING AVG(arvosana) >= 1.75
    ORDER BY AVG(arvosana) ASC
    etunimi sukunimi avg
    Petri Heinonen 1.8.2002
    Kimmo Kasvattaja 1.91666666666667
    Teemu Tieteilijä 2
    Kaisa Kielinero 2.125
http://appro.mit.jyu.fi/2002/kevat/tietokannat/luennot/luento7/suoritus.html
© Tommi Lahtonen ()<URL: http://www.iki.fi/hazor/>
8.04.2002 15:34:36