TIEDONHALLINTA - SYKSY 2011 Kurssikoodi: Saapumisryhmä: Luento 8 XX00AA79-3013 TU12S2 Pasi Ranne 25.9.2013 25/9/13 Helsinki Metropolia University of Applied Sciences 1
Harjoitustyö Harjoitustöiden tilanne ja mahdolliset ongelmat. Pasi Ranne 25.9.2013 Metropolia Ammattikorkeakoulu 2
SQL: Lisää haetun tiedon rajaamisesta
Hahmontunnistus merkkijonoissa (Viope 17.2.3) WHERE sarake LIKE hahmo WHERE sarake NOT LIKE hahmo hahmo on merkkijono, johon voi sisältyä kaksi erikoismerkkiä: % mikä tahansa merkkijono _ mikä tahansa merkki LIKE K% NOT LIKE K% LIKE K LIKE %a LIKE %abc% Alkaa merkillä K Ei ala merkillä K Alkaa merkillä K, jota seuraa tasan 2 merkkiä Loppuu merkkiin a Sisältää merkit abc (missä tahansa merkkijonoa) Pasi Ranne 25.9.2013 Metropolia Ammattikorkeakoulu 4
Toistuvien arvojen poistaminen tuloksista (Viope 8.2.1) SELECT DISTINCT Esimerkki: asiakas(nimi, kaupunki) SELECT DISTINCT kaupunki FROM asiakas; Pasi Ranne 25.9.2013 Metropolia Ammattikorkeakoulu 5
SQL: Funktiot
SQL:n funktiot SQL-kielessä on valmiita funktioita, joiden avulla tauluista löytyvää tietoa voidaan käsitellä edelleen Skalaarifunktiot Kohdistuvat yksittäiseen arvoon ja palauttavat yhden arvon Koostefunktiot Palauttavat yhden arvon, joka lasketaan käyttämällä sarakkeen kaikkia arvoja Pasi Ranne 25.9.2013 Metropolia Ammattikorkeakoulu 7
Skalaarifunktiot esimerkkejä Laaja kirjo, tuotekohtaisia laajennuksia Merkkijonofunktioita UPPER () - muuttaa kirjaimet suuriksi LOWER() - muuttaa kirjaimet pieniksi Päivämääräfunktioita CURRENT_DATE() - nykyinen päivämäärä CURRENT_TIME() - nykyinen kellonaika EXTRACT - päivämäärän osan erottaminen SELECT EXTRACT (YEAR FROM syntaika) Samoin toimivat päivä (DAY) ja kuukausi (MONTH) Numerofunktioita ROUND desimaalien pyöristäminen SELECT ROUND(palkka*1.1,0) FROM henkilo Pasi Ranne 25.9.2013 Metropolia Ammattikorkeakoulu 8
Koostefunktiot Käyttö: SELECT funktio(sarake) FROM taulu Jos SELECT-lauseessa käytetään koostefunktioita, siinä ei voi olla tavallisia sarakkeita (paitsi GROUP BY lauseketta varten) Standardi-SQL:ssä on 5 eri koostefunktiota COUNT(sarake) sarakkeen arvojen lukumäärä (ei NULL) COUNT(DISTINCT sarake) erilaisten arvojen lukumäärä COUNT(*) - taulun rivien määrä AVG(sarake) sarakkeen arvojen keskiarvo SUM(sarake) sarakkeen arvojen summa MIN(sarake) sarakkeen pienin arvo MAX(sarake) sarakkeen suurin arvo Esimerkki henkilo(nimi, palkka) SELECT COUNT(*) FROM henkilo; SELECT AVG(palkka) FROM henkilo; Pasi Ranne 25.9.2013 Metropolia Ammattikorkeakoulu 9
Sarakkeen uudelleen nimeäminen Sarakkeelle voidaan antaa uusi nimi varatun sanan AS avulla Mihin tarvitaan? Jos tietokannassa olevan sarakkeen nimi on huonosti valittu Koostefunktioiden tulosten nimeäminen Tekstin lisääminen tuloksiin Esimerkki henkilo(nimi, palkka) SELECT COUNT(*) AS Työntekijöitä yhteensä: FROM henkilo; SELECT AVG(palkka) AS Keskipalkka FROM henkilo; Pasi Ranne 25.9.2013 Metropolia Ammattikorkeakoulu 10
Haun tulosten ryhmittely - GROUP BY SELECT <sarakelista> FROM <taululista> WHERE <rivien valintaehdot> GROUP BY <sarakelista> GROUP BY ryhmittelee haun tuloksen rivit yhden tai useamman sarakkeen perusteella ryhmiin Ryhmiin liitetään jokin koostefunktio SELECT-lausekkeessa Kaikkia SELECT-sarakelistan tavallisia sarakkeita (niitä joissa ei ole koostefunktiota), on käytettävä GROUP BY sarakelistassa! Esimerkki: proj_henk(ptun, htun, tunnit) SELECT htun, SUM( tunnit) FROM proj_henk GROUP BY htun SELECT ptun, htun, SUM(tunnit) FROM proj_henk GROUP BY ptun, htun Pasi Ranne 25.9.2013 Metropolia Ammattikorkeakoulu 11
Haun tulosten rajaus HAVING SELECT <sarakelista> FROM <taululista> WHERE <rivien valintaehdot> GROUP BY <sarakelista> HAVING <ryhmien valintaehdot> HAVING- ehdossa esiintyvien sarakkeiden täytyy esiintyä SELECTsarakelistassa (joko tavallisena sarakkeena tai koostefunktiona) Esimerkki: proj_henk(ptun, htun, tunnit) SELECT htun, SUM(tunnit) FROM proj_henk GROUP BY ptun, htun HAVING htun >=2000 AND htun <3000 SELECT htun, SUM(tunnit) FROM proj_henk GROUP BY htun HAVING SUM(tunnit) >= 500 Pasi Ranne 25.9.2013 Metropolia Ammattikorkeakoulu 12
Yhteenveto tulosten rajauksesta ja ryhmittelystä Ryhmiteltävä joukko (rivit) valitaan WHERE-lausekkeella Valinnan tulos ryhmitellään GROUP BY -lausekkeella Ryhmiteltyä joukko voidaan vielä rajata HAVINGlausekkeella Koostefunktioiden käyttöä koskevia sääntöjä: Koostefunktioita voi käyttää SELECT- ja HAVINGlausekkeissa Koostefunktioita ei voi käyttää WHERE-lausekkeen valintaehdoissa Koostefunktioita ja tavallisia sarakkeita voidaan käyttää samassa SELECT-lausekkeen sarakelistassa vain jos kaikkia tavallisia sarakkeita käytetään myös GROUP BY -lausekkeessa Pasi Ranne 25.9.2013 Metropolia Ammattikorkeakoulu 13