Relaation tyhjyyden testaaminen



Samankaltaiset tiedostot
Yhdiste, leikkaus, erotus ym.

Esimerkki. pankkien talletus- ja lainatietokanta: Yhdiste, leikkaus, erotus ym. Leikkaus (intersect) Yhdiste (Union) Erotus (except/minus) Leikkaus

Kyselyn yleisrakenne:

SELECT-lauseen perusmuoto

Harjoitustehtävä 1. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. SQL kysely

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

TIEDONHALLINTA - SYKSY Luento 8. Saapumisryhmä: Pasi Ranne /9/13 Helsinki Metropolia University of Applied Sciences

SQL - STRUCTURED QUERY LANGUAGE

select tulostietomäärittely from taulukkeet [where valintaehdot] [group by ryhmitystekijät] [having ryhmärajoitteet] [order by järjestysperusta]

KOOSTEFUNKTIOT. Viisi standardifunktiota: Esim. montako henkilöä on henkilo-taulussa:

TIEDONHALLINTA - SYKSY Luento 10. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

Kuva 7.2 vastaustaulu harjoitukseen 7.2

Koostefunktiot. Viisi standardifunktiota: Esim. montako henkilöä on henkilo-taulussa:

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 SQL- osa Harri Laine 1. SQL-valintaehto. SQL-valintaehto.

Tällä viikolla. Kotitehtävien läpikäynti Aloitetaan Pelifirman tietovaraston suunnittelu Jatketaan SQL-harjoituksia

OUTER JOIN se vanha kunnon kaveri

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-valintaehto. SQL-valintaehto. Opettajien nimet: Opiskelijoiden pääaineet

Helsingin yliopisto, Tietojenkäsittelytieteen laitos Tietokantojen perusteet, , H.Laine

Helsingin yliopisto, tktl DO Tietokantojen perusteet, kevät 2000 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

SQL. ! nykystandardi SQL3 eli SQL'99. ! CREATE TABLE, ALTER TABLE ja DROP TABLE. ! CREATE VIEW ja DROP VIEW. ! CREATE INDEX ja DROP INDEX

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

Helsingin yliopisto, tktl DO Tietokantojen perusteet, kevät 2000 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

CSE-A1200 Tietokannat

HELIA TIKO-05 1 (17) ICT03D Tieto ja tiedon varastointi Räty, Virkki

CSE-A1200 Tietokannat

SQL:N PERUSTEET MARKKU SUNI

2. Haet työntekijöiden tiedot etunimen mukaan nousevasti järjestettyinä. (ORDER BY) SELECT * FROM employees ORDER BY firstname ASC;

Kirjoita jokaiseen erilliseen vastauspaperiin kurssin nimi, tenttipäivä, oma nimesi (selkeästi), opiskelijanumerosi ja nimikirjoituksesi

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

TIETOKANTOJEN PERUSTEET MARKKU SUNI

FROM-lausekkeessa voidaan määritellä useampi kuin yksi taulu, josta tietoja haetaan: Tuloksena on taululistassa lueteltujen taulujen rivien

Liitokset - haut useaan tauluun

Kyselyt: Lähtökohtana joukko lukuja Laskukaava kertoo miten luvuista lasketaan tulos soveltamalla laskentaoperaatioita

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2005 SQL-perusteet. Harri Laine 1. SQL tietokantakieli

Kirjoita kuhunkin erilliseen vastauspaperiin kurssin nimi, tentin päiväys, oma nimesi, syntymäaikasi ja nimikirjoituksesi.

HAAGA-HELIA Heti-09 1 (12) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Näkymät

4.1 Yleistä SQL:stä 4.2 SQL-lauseet 4.3 DML: datan hallinta 4.4 DDL: rakenteen määrittäminen 4.5 DCL: valtuuttaminen 4.6 TxCL: tapahtumanhallinta

Relaatioalgebra. Kyselyt:

Vain valitut kentät: SELECT Päivämäärä, Laskutusnimi, [ale mk], Loppusumma FROM Laskuotsikot

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

CS-A1150 Tietokannat CS-A1150 Tietokannat / 39

VINKKI: Katso Kentät Muistioon -painikkeella, mikä on taulukon nimen oikea kirjoitusasu.

Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Relaatiomallin peruskäsitteet Harri Laine 1. Relaatiotietokannat DONOTP

Hakukyselyt: SELECT * FROM taulu WHERE sarake1 = Malli Nimi [WHERE sarake1 LIKE M% ] [WHERE BETWEEN ehto1 AND ehto2] [WHERE sarake1 IN/= (alikysely)]

Helsingin yliopisto Tietojenkäsittelytieteen laitos (H.Laine) Tietokantojen perusteet. Liitteenä: Tiivistelmä SQL-syntaksista

Helsingin yliopisto/tktl Tietokantojen perusteet, s 2007 SQL:n perusteet. Harri Laine 1. SQL tietokantakieli. SQL tietokantakieli

Relaatioalgebra. Relaatioalgebra. Relaatioalgebra. Relaatioalgebra - erotus (set difference) Kyselyt:

määritellä ja muokata tietokantaa ja sen käyttöoikeuksia virittää tietokannan talletusrakenteita hakea tietoa tietokannasta

SPARQL(SPARQL Protocol and RDF Query Language)

HELIA TIKO-05 1 (15) ICT03D Tieto ja tiedon varastointi Räty, Virkki

HELIA 1 (14) Outi Virkki Tiedonhallinta

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

Helsingin yliopisto/ tktl DO Tietokantojen perusteet, s 2000 Relaatioalgebra Harri Laine 1. Relaatioalgebra

HELIA SQL-harjoituksia 1(1) atk72d Versiopvm:

joukko operaatioita, joilla relaatioista voidaan muodostaa uusia relaatioita joukko opin perusoperaatiot yhdiste, erotus, ristitulo, leikkaus

Tällä viikolla. Kotitehtävien tarkistus Upotettu SQL Indeksi-harjoitus täydennetään pelifirman tietokantamallia SQL-tehtäviä

On autoja, henkilöitä, Henkilöllä on nimi Autolla on omistaja, joka on henkilö. Taulu AUTO(rekno, malli) Taulu HENKILO(nimi, )

Tietomallit. Näkökulmat tietoon. Näkökulmat tietoon. Mitä malleja olisi tarjolla? Abstraktiotasot tiedon käsittelyssä

4.3.4 SQL kyselyt... 45

määritellä ja muokata tietokantaa ja sen käyttöoikeuksia virittää tietokannan talletusrakenteita hakea tietoa tietokannasta

KAAVAT. Sisällysluettelo

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2005 relaatiomalli Harri Laine 1.

SQL-kielen perusteet. Tietokantojen perusteet

SQL:N PERUSTEET MARKKU SUNI

Makrojen mystinen maailma lyhyt oppimäärä

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Helsingin yliopisto/tktl Kyselykielet, s 2006 Relaatiokalkyylit. Harri Laine 1

Harjoitustyö. CSE-A1200 Tietokannat! Jasse Lahdenperä! ! Henri Nurmi! !

FUNKTIOITA. Sisällysluettelo

Ohjelmoinnin perusteet Y Python

Tietokannat II -kurssin harjoitustyö

Yleinen SQL. Yleinen SQL. SQL:n kehitys

HELIA 1 (14) Outi Virkki Tiedonhallinta

Opiskeluoikeuksien maaran tiedonkeruu

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Hohde Consulting 2004

Helsingin yliopisto/ tktl D Tietokantojen perusteet, s 2000 Relaatioalgebra. Harri Laine 1. Relaatioalgebra.

MAY1 Tehtävien ratkaisut Kustannusosakeyhtiö Otava päivitetty Julkaiseminen sallittu vain koulun suljetussa verkossa.

Access-kyselyt. Luetteloinnin kehittämispäivä Mia Kujala

MUOTOVESILETKUT 1075

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

HELIA 1 (15) Outi Virkki Tiedonhallinta

Helsingin yliopisto/tktl Tietokantojen perusteet, k 2003 Relaatiomallin peruskäsitteet Harri Laine 1. Tietomallit. Näkökulmat tietoon

Relaatiomalli ja -tietokanta

ASTERI-OHJELMIEN SQL-ERIKOISKURSSI LUENTOKALVOT

Joko tunnet nämän Oracle10g SQL:n piirteet? Kari Aalto Saariston IT

HELIA 1 (12) Outi Virkki Tiedonhallinta

Relaatiotietokantojen perusteista. Harri Laine Helsingin yliopisto

17 BUDJETOINTI. Asiakaskohtainen Budjetti Ylläpito-ohjelma. Dafo Versio 10 BUDJETOINTI. Käyttöohje. BudgCust Yleistä

2. Käsiteanalyysi ja relaatiomalli

5 SQL TIETOKANTAKIELI...33

VeRan laboratoriotietojen siirtoformaatti

Tietomallit. Näkökulmat tietoon. Näkökulmat tietoon. Näkökulmat tietoon. Abstraktiotasot tiedon käsittelyssä

Määrällisen aineiston esittämistapoja. Aki Taanila

Elisa Kassa - Kassa käyttöliittymä

HELIA TIKO-05 1 (22) Tieto ja tiedon varastointi E.Räty, O.Virkki

Tietokantojen perusteet, s 1999 SQL- osa Harri Laine 1. SQL -ohjelmistojen markkinaosuuksia SQL. SQL - historiaa. SQL - standardointi

millainen on se kohde, jota tiedoilla pitäisi kuvata asiat, joita pitäisi esittää Mitä tietoelementtien arvot tarkoittavat

1. a) Laadi suoraviivaisesti kyselyä vastaava optimoimaton kyselypuu.

TIETOKANTOJEN PERUSTEET OSIO 11 MARKKU SUNI

Transkriptio:

Tulostaulun tyhjyyden testaaminen Luettele ne asiakkaat, joilla on sekä talletus että laina -konttorissa. (Leikkaus!) useita mahdollisia toteutustapoja INTERSECT sisäkysely sisäkysely + tulostaulun tyhjyyden testaaminen exists = tulostaulu ei ole tyhjä not exists = tulostaulu on tyhjä Informaatiojärjestelmät, kevät 1997 02/11/97 1 Tulostaulun tyhjyyden testaaminen SELECT AsNimi FROM Asiakas A WHERE EXISTS (SELECT * T tosi, jos sisäkyselyn vastaus ei ole tyhjä! WHERE (T.AsNimi = A.Asnimi) AND (Knimi = '')) AND EXISTS (SELECT * FROM Laina L WHERE (L.AsNimi = A.Asnimi) AND (Knimi = '') ); Informaatiojärjestelmät, kevät 1997 02/11/97 2 Relaation tyhjyyden testaaminen Luettele ne asiakkaat, joilla on talletus mutta ei lainaa -konttorissa. (Erotus!) MINUS sisäkysely sisäkysely + relaation tyhjyyden testaaminen Informaatiojärjestelmät, kevät 1997 02/11/97 3 Tulostaulun tyhjyyden testaaminen SELECT AsNimi FROM Asiakas A WHERE EXISTS (SELECT * T WHERE (T.AsNimi = A.Asnimi) AND (Knimi = '')) tosi, jos AND NOT EXISTS sisäkyselyn (SELECT * vastaus on FROM Laina L tyhjä! WHERE (L.AsNimi = A.Asnimi) AND (Knimi = '') ); tosi, jos sisäkyselyn vastaus ei ole tyhjä! Informaatiojärjestelmät, kevät 1997 02/11/97 4 Tulosrivien järjestäminen Järjestäminen usean attribuutin avulla: ORDER BY Attribuutit ASC/DESC ASC on nouseva järjestys (aakkos-, suuruusjärj.), DESC laskeva järjestys. ASC on oletusarvo. SELECT * FROM Asiakas WHERE Asnro < 6 ORDER BY Nimi; Informaatiojärjestelmät, kevät 1997 02/11/97 5 Esimerkkitaulu AUTO: Reknro Merkki Vmalli ACM-256 Volvo 1988 OSI-228 Mersu ROM-771 Volvo 1989 ALU-444 Volvo 1989 CPU-533 Lada 1982 DOS-999 Volvo 1993 Informaatiojärjestelmät, kevät 1997 02/11/97 6 Tietojenkäsittelytieteen laitos 1/9

Järjestäminen usean attribuutin avulla: SELECT * ORDER BY Merkki ASC, Vmalli DESC; Merkki ensisijainen Vmalli toissijainen Reknro Merkki Vmalli CPU-533 Lada 1982 OSI-228 Mersu DOS-999 Volvo 1993 - ROM-771 Volvo 1989 ALU-444 Volvo 1989 ACM-256 Volvo 1988 Huom! Relaatioalgebrassa ei järjestysoperaatiota LIKE ja jokerimerkit Jos attribuutin arvo on merkkijono, WHERE-ehto voidaan kirjoittaa... WHERE Attribuutti LIKE Maski Maski: tavallinen merkkijono, jossa voi olla % (prosenttimerkki)» täsmää kaikkiin merkkijonoihin _ (alaviiva)» täsmää kaikki yksittäisiin merkkeihin Informaatiojärjestelmät, kevät 1997 02/11/97 7 Informaatiojärjestelmät, kevät 1997 02/11/97 8 SELECT Asnro, Nimi FROM Asiakas WHERE Nimi LIKE 'Nur%'; Esim. Nurmi, Nurminen, Nurmelainen WHERE Nimi LIKE '%mi%'; Esim. Helminen, Nurminen, Nurmi WHERE Nimi LIKE ' '; Esim. Salo, Kari, mutta ei Aho WHERE Nimi LIKE ' %'; Esim. Salo, Salonen, Virtanen jne. Huom! WHERE Nimi LIKE 'Salo'; tai WHERE Nimi= 'Salo'; Informaatiojärjestelmät, kevät 1997 02/11/97 9 Informaatiojärjestelmät, kevät 1997 02/11/97 10 Myös NOT LIKE -määrettä voidaan käyttää: SELECT Nimi FROM Asiakas WHERE Nimi NOT LIKE 'A%'; Informaatiojärjestelmät, kevät 1997 02/11/97 11 Koostefunktiot ja ryhmittely Tietotarpeiden kohteina ovat usein yhteenvedot Koostefunktiot AVG keskiarvo MIN pienin arvo (minimi) MAX suurin arvo (maksimi) SUM summa COUNT lukumäärä Voidaan laskea koko tulostaulun yli tai ryhmäkohtaisina Informaatiojärjestelmät, kevät 1997 02/11/97 12 Tietojenkäsittelytieteen laitos 2/9

Esimerkki. pankkien talletus- ja lainatietokanta: ASIAKAS AsNimi AsOsoite AsKaupunki Ukkonen Kaivotie Vantaa Tienari Koivikko Helsinki Erkiö Länsitie Vantaa Elomaa Itäväylä Helsinki Laine Otakaari Espoo TALLETUS Tilinro AsNimi 22222 Tienari 2000 55555 Ukkonen 5000 33333 Elomaa 3000 KONTTORI Varat KKaupunki 210 000 Espoo 170 000 Tampere PSP6 80 000 Espoo LAINA Tilinro AsNimi 500 Laine 4000 202 Elomaa 2500 PSP6 660 Ukkonen 500 444 Erkiö 1500 Informaatiojärjestelmät, kevät 1997 02/11/97 13 Mikä on asiakkaiden suurin talletus? SELECT MAX() ; MAX() 5000 Laskettaessa koko tulostaulun yli on tuloksena yksi rivi, jossa voi olla vain vakioita ja koostetietoa Informaatiojärjestelmät, kevät 1997 02/11/97 14 Mikä on asiakkaiden suurin talletus? SELECT MAX() ; MAX() 5000 Mikä on keskimääräinen lainan suuruus? SELECT AVG() FROM Laina; AVG() 2125 Montako talletustiliä konttoreilla on yhteensä? SELECT COUNT(*) COUNT(*) ; 3 Informaatiojärjestelmät, kevät 1997 02/11/97 15 Informaatiojärjestelmät, kevät 1997 02/11/97 16 SELECT COUNT(Tilinro) COUNT(Tilinro) ; 3 Laskee sarakkeessa olevien arvojen määrän = rivimäärä SELECT COUNT(DISTINCT ) ; Laskee erilaisten arvojen määrän COUNT(DISTINCT ) 2 Informaatiojärjestelmät, kevät 1997 02/11/97 17 Kenellä on suurin talletus? Kuinka suuri? Ensimmäinen yritys: SELECT AsNimi, MAX() ; Informaatiojärjestelmät, kevät 1997 02/11/97 18 Tietojenkäsittelytieteen laitos 3/9

Kenellä on suurin talletus? Kuinka suuri? Ensimmäinen yritys: SELECT AsNimi, MAX() ; Oracle: " Tämä ei ole yhden ryhmän koostefunktio." Syy: AsNimi on yksittäiseltä riviltä saatava arvo - sellaisia ei voi ottaa mukaan, mikä otettaisiin? Informaatiojärjestelmät, kevät 1997 02/11/97 19 Toinen yritys: SELECT AsNimi, WHERE = (SELECT MAX() ); AsNimi Ukkonen 5000 Informaatiojärjestelmät, kevät 1997 02/11/97 20 Ryhmittely GROUP BY -lauseella muodostetaan riveistä ryhmiä. SELECT ryhmittelyattribuutit, koostefunkiot FROM... WHERE... GROUP BY ryhmittelysarakkeet; Ryhmä = ne rivit, joilla on ryhmittelysarakkeilla sama arvo! Informaatiojärjestelmät, kevät 1997 02/11/97 21 Esimerkki. Pankin tietokanta Luettele kunkin konttorin keskimääräinen lainasumma. SELECT, AVG() FROM Laina GROUP BY ; Ryhmittelysarake Informaatiojärjestelmät, kevät 1997 02/11/97 22 Miten kyselyä evaluoidaan? 1) ryhmiä Knimi:n mukaan: 4000 PSP6 500 2500 1500 Miten kyselyä evaluoidaan? 2) jokaisesta ryhmästä tulostetaan konttorin nimi (joka on aina ryhmän sisällä sama!) ryhmän sisäinen keskiarvo summasta: 4000 PSP6 500 2000 AVG() Informaatiojärjestelmät, kevät 1997 02/11/97 23 Informaatiojärjestelmät, kevät 1997 02/11/97 24 Tietojenkäsittelytieteen laitos 4/9

TOISTUVAT ARVOT? On oleellista, ettei -sarakkeen toistuvia arvoja hävitetä ennen keskiarvon laskemista koska: Toistuvien arvojen poistaminen voi tuottaa virheellisen tuloksen! Esimerkki: Uusi TALLETUS-taulun sisältö: Tilinro AsNimi 44444 Sippu 4000 22222 Tienari 2000 31313 Sippu 3000 55555 Ukkonen 5000 21212 Tienari 7000 33333 Elomaa 3000 Informaatiojärjestelmät, kevät 1997 02/11/97 25 Informaatiojärjestelmät, kevät 1997 02/11/97 26 Toistuvien poistaminen voi tuottaa virheellisen tuloksen! SELECT, AVG(DISTINCT ) GROUP BY ; 1) ryhmät KNimen mukaan: Tilinro AsNimi 44444 55555 22222 31313 21212 33333 Sippu Ukkonen 4000 5000 Tienari 2000 Sippu 3000 Tienari 7000 Elomaa 3000 Informaatiojärjestelmät, kevät 1997 02/11/97 27 Toistuvat pois (summa-sarake): taulu ennen keskiarvon laskemista: Ja lopputulokseksi saataisiin: 4500 4000 4000 5000 2000 7000 3000 VÄÄRIN! KOPin toista 3000:n talletusta ei huomioitu Informaatiojärjestelmät, kevät 1997 02/11/97 28 Säilytetään toistuvat: SELECT, AVG() GROUP BY ; Nyt duplikaatit säilytetään keskiarvon laskentaa varten: Ja keskiarvot lasketaan oikein: 4500 3750 AVG() 4000 5000 3000 2000 7000 3000 Informaatiojärjestelmät, kevät 1997 02/11/97 29 Joskus on tarkoituksenmukaista poistaa toistuvat arvot ennen laskentaa: Kuinka monta tallettajaa kussakin konttorissa on? SELECT, COUNT(AsNimi) AsNimi GROUP BY ; Lopputulos (VÄÄRIN): 2 4 COUNT(Asnimi) Sippu Ukkonen Sippu Tienari Tienari Elomaa Tienari kahteen kertaan! Informaatiojärjestelmät, kevät 1997 02/11/97 30 Tietojenkäsittelytieteen laitos 5/9

Joskus on tarkoituksenmukaista poistaa toistuvat arvot ennen laskentaa: SELECT, COUNT(DISTINCT AsNimi) AsNimi GROUP BY ; Sippu Ukkonen Nyt lopputulos on oikein: Sippu Tienari COUNT(Asnimi) Elomaa 2 3 Informaatiojärjestelmät, kevät 1997 02/11/97 31 Ryhmittelyn vaikutus tulostietolistaan Kun mukana on GROUP BY, niin tulostietoluettelossa voi olla vain 1. koostefunktioita 2. samat attribuuttit kuin GROUP BY osassa. Oracle sallii joidenkin group by -osan attribuuttien jättämisen pois tulostietoluettelosta (silti rivi / ryhmä ) Informaatiojärjestelmät, kevät 1997 02/11/97 32 Ryhmittelyyn liitetty ehto Kyselyyn voidaan liittää HAVING-lause, jonka valintaehtoa sovelletaan ryhmityksen jälkeen: SELECT... FROM... WHERE... GROUP BY ryhmittelysarakkeet HAVING ehto; Esimerkki: pankkitietokanta Luettele kunkin konttorin keskimääräinen talletus niiden konttorien osalta, joissa talletusten keskiarvo on suurempi kuin 4000 mk. SELECT, AVG() GROUP BY HAVING AVG() > 4000; Informaatiojärjestelmät, kevät 1997 02/11/97 33 Informaatiojärjestelmät, kevät 1997 02/11/97 34 Miten kysely evaluoidaan? Ensin ryhmitellään ja lasketaan keskiarvot kuten edellä: AVG() 4500 3750 Sitten valitaan ne rivit, jotka täyttävät ehdon: 4500 AVG() Toinen esimerkki: Niiden konttoreiden talletusten kokonaismäärä, joilla on alle 1000 talletustiliä: SELECT, SUM() GROUP BY HAVING COUNT(*)<1000; Informaatiojärjestelmät, kevät 1997 02/11/97 35 Informaatiojärjestelmät, kevät 1997 02/11/97 36 Tietojenkäsittelytieteen laitos 6/9

Ryhmittely useamman kentän mukaan Esimerkki. Autokaupan yksinkertaistettu ohjehinnasto: AUTO Merkki Vmalli Malli Hinta Escort 60 000 1980 Transit 5 000 Toyota Hiace 65 000 Sierra 110 000 1980 Taunus 7 000 Volvo 1993 340 120 000 Toyota 1988 Corolla 35 000 Informaatiojärjestelmät, kevät 1997 02/11/97 37 Esimerkki Mitkä ovat eri automerkkien keskihinnat vuosimalleittain? SELECT Merkki, Vmalli, AVG(Hinta) GROUP BY Merkki, Vmalli; Informaatiojärjestelmät, kevät 1997 02/11/97 38 Ryhmitellään ensisijaisesti merkin mukaan: Merkki Vmalli Toyota Toyota 1980 1980 1988 Hinta 60 000 5 000 110 000 7 000 65 000 35 000 Volvo 1993 120 000 Sitten toissijaisesti vuosimallin mukaan: Merkki Vmalli Hinta 60 000 110 000 1980 1980 5 000 7 000 Toyota 65 000 Toyota 1988 35 000 Volvo 1993 120 000 Huomaa, että toistuvia ei poisteta! Informaatiojärjestelmät, kevät 1997 02/11/97 39 Informaatiojärjestelmät, kevät 1997 02/11/97 40 Lasketaan keskiarvot jokaisen ryhmän sisällä: tulostetaan merkki, vuosimalli ja ryhmän sisäinen keskiarvo: Merkki Vmalli AVG(Hinta) 85 000 1980 6 000 Toyota 65 000 Toyota 1988 35 000 Volvo 1993 120 000 Tulos järjestetään! Mitkä ovat eri automerkkien keskihinnat vuosimalleittain halvimmasta kalleimpaan? SELECT Merkki, Vmalli, AVG(Hinta) Merkki Vmalli GROUP BY Merkki, Vmalli ORDER BY AVG(Hinta); 1980 6 000 AVG(Hinta) Toyota 1988 35 000 Toyota 65 000 85 000 Volvo 1993 120 000 Informaatiojärjestelmät, kevät 1997 02/11/97 41 Informaatiojärjestelmät, kevät 1997 02/11/97 42 Tietojenkäsittelytieteen laitos 7/9

Esimerkki Luettele kalleimmasta halvimpaan, merkit ja vuosimallit, jotka ovat keskihinnaltaan alle 80 000 mk:n? SELECT Merkki, Vmalli, AVG(Hinta) GROUP BY Merkki, Vmalli HAVING AVG(Hinta) < 80000 ORDER BY AVG(Hinta) DESC; Esimerkki Minkä merkkisen (ja vuosimallisen) auton keskihinta on korkein? SELECT Merkki, Vmalli, MAX(AVG(Hinta)) VÄÄRIN! GROUP BY Merkki, Vmalli; Koostefunktioita ei saa kirjoittaa peräkkäin! Informaatiojärjestelmät, kevät 1997 02/11/97 43 Informaatiojärjestelmät, kevät 1997 02/11/97 44 Kokeillaan sisäkyselyä: SELECT Merkki, Vmalli, AVG(Hinta) GROUP BY Merkki, Vmalli HAVING AVG(Hinta) >= ALL (SELECT AVG(Hinta) GROUP BY Merkki, Vmalli); Toimii Oraclessa - mutta ei välttämättä kaikissa muissa tkhj:ssä Informaatiojärjestelmät, kevät 1997 02/11/97 45 Milloin ehto sijoitetaan WHERE-lauseeseen, milloin HAVING-lauseeseen? HAVING voi olla vain silloin, kun on GROUP BY. Ehto HAVINGiin vain silloin, kun ehto sisältää jonkin koostefunktion. Loput ehdot WHERE-lauseeseen! Informaatiojärjestelmät, kevät 1997 02/11/97 46 Yhteenveto SELECT Attribuutit FROM Taulut [WHERE Ehto] [GROUP BY Attribuutit] [HAVING Ryhmäehto] [ORDER BY Attribuutit]; [] :lla merkityt osat voivat puuttua. Ehto ja ryhmäehto voivat sisältää sisäkkäisen kyselyn. Informaatiojärjestelmät, kevät 1997 02/11/97 47 Jos kysely sisältää WHERE-, GROUP BY - ja HAVING-osan, menetellään seuraavasti: 1. Lasketaan (kuvitteellisesti) taulujen ristitulo. 2. Karsitaan rivejä WHERE-ehdolla. 3. WHERE-ehdot täyttävät rivit ryhmitellään GROUP BY -osan mukaisesti. 4.Jokaiseen ryhmään sovelletaan HAVING-ehtoja. 5.Lasketaan tulostiedot : Ne ryhmät, jotka täyttävät HAVING-osan, ovat kohteena SELECT-osalle. SELECT-osan koostefunktiot siis lasketaan niille. Informaatiojärjestelmät, kevät 1997 02/11/97 48 Tietojenkäsittelytieteen laitos 8/9

Tyhjäarvot NULL = kentän arvo on tuntematon Esimerkki. Erään pikkufirman myynnit ja ostot: MYYNTI Nro Pvm Asiakas 5 03.06.94 1500 Laine 6 03.06.94 500 NULL 7 04.06.94 400 Elomaa OSTO Nro Pvm Asiakas 122 02.06.94 4000 Erkiö 123 04.06.94 3200 Laine 124 07.06.94 2500 NULL Informaatiojärjestelmät, kevät 1997 02/11/97 49 Esimerkki. Ketkä asiakkaat ovat meille sekä ostajia että myyjiä? SELECT Myynti.Asiakas FROM Myynti, Osto WHERE Myynti.Asiakas = Osto.Asiakas; Asiakas Siis myös NULL <> NULL! Laine Informaatiojärjestelmät, kevät 1997 02/11/97 50 Voidaan testata, onko jokin kenttä NULL: Koostefunktioissa NULL-arvot jätetään huomiotta: Ne myyntitapahtumat, joissa ostajana oli satunnainen asiakas (asiakkaan nimeä ei tällöin kirjattu muistiin)? SELECT * FROM Myynti WHERE Asiakas IS NULL; Nro Pvm Asiakas 6 03.06.94 500 NULL Informaatiojärjestelmät, kevät 1997 02/11/97 51 Esimerkkitaulu OPETTAJA: Nro Nimi Kahvikupit 1 Elomaa 50 2 Laine NULL 3 Kujala 125 4 Orponen 312 SELECT SUM(Kahvikupit) FROM Opettaja; SUM(Kahvikupit) 487 Informaatiojärjestelmät, kevät 1997 02/11/97 52 Koostefunktioissa NULL-arvot jätetään huomiotta: AVG(Kahvikupit)? SELECT AVG(Kahvikupit) FROM Opettaja; AVG(Kahvikupit) 162,333333 Koko rivi jää homiotta, eikä jakaja kasva Tyhjäarvojen korvaus oikeilla Oraclessa on tarjolla funktio nvl, jolla tyhjäarvo voidaan korvata jollain oikealla arvolla select avg(nvl(kahvikupit,200)) from opettaja; TULOS: 145,5 standardissa COALESCE(Kahvikupit,200) Informaatiojärjestelmät, kevät 1997 02/11/97 53 Informaatiojärjestelmät, kevät 1997 02/11/97 54 Tietojenkäsittelytieteen laitos 9/9