Kyselyn yleisrakenne:

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

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

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

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

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

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

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

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

4.3.4 SQL kyselyt... 45

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

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

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

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

Relaation tyhjyyden testaaminen

SELECT-lauseen perusmuoto

SQL-kielen perusteet. Tietokantojen perusteet

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

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

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

CSE-A1200 Tietokannat

5 SQL TIETOKANTAKIELI...33

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

SQL - STRUCTURED QUERY LANGUAGE

Liitokset - haut useaan tauluun

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

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

OUTER JOIN se vanha kunnon kaveri

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

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

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

HELIA 1 (14) Outi Virkki Tiedonhallinta

SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito

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, s 1999 SQL- osa Harri Laine 1. SQL -ohjelmistojen markkinaosuuksia SQL. SQL - historiaa. SQL - standardointi

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

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

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

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

Yhteenvetofunktiot Näkymät Tietokannan ylläpito Tietokantatapahtumat... 88

SQL:N PERUSTEET MARKKU SUNI

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

SPARQL(SPARQL Protocol and RDF Query Language)

HELIA SQL-harjoituksia 1(1) atk72d Versiopvm:

Harjoitustehtävä 1. Harjoitustehtävän 1 ratkaisu. Harjoitustehtävä 1. Relaatioalgebra -liitokset (join) Liitos

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

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

Opiskeluoikeuksien maaran tiedonkeruu

Yhdiste, leikkaus, erotus ym.

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

Metropolia ammattikorkeakoulu TU00BS : ICT-teknologiaosaaminen Tuntitehtävät 5 Pasi Ranne

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

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Makrojen mystinen maailma lyhyt oppimäärä

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

Kuva 7.2 vastaustaulu harjoitukseen 7.2

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

Relaatioalgebra. Kyselyt:

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

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

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

Yleinen SQL. Yleinen SQL. SQL:n kehitys

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

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

TIETOJEN TUONTI TIETOKANNASTA + PIVOT-TAULUKON JA OLAP-KUUTION TEKO

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

HELIA 1 (14) Outi Virkki Tiedonhallinta

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

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

KAAVAT. Sisällysluettelo

Jouni Huotari OLAP-ohjetekstit kopioitu Microsoftin ohjatun OLAP-kuution teko-ohjeesta. Esimerkin kuvaus ja OLAP-määritelmä

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

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

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

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

Tietovarastot ja SQL Virpi Myllylahti

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

Näkymät ja tiedon suojaus

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

Treenitietokannan suunnitteludokumentti

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

D B. Kyselyjen käsittely ja optimointi. Kyselyn käsittelyn vaiheet:

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

Tietokantasuunnittelun pääperiaatteena on tiedon toiston välttäminen. Tiedon toistumiseen liittyy monenlaisia ongelmia.

Virta_Latausraportti - Tarkistukset

4.3.1 SQL tietokanta SQL:n kirjoitusasu SQL määrittelykielenä... 36

Palaute - Koha-Suomi - Support #1510 Tukipyynnöt: Kohan raportit

Tietokannat II -kurssin harjoitustyö

Muita tietokantaobjekteja. Näkymät, synonyymit, indeksointi, valtuudet ja systeemihakemisto

MUITA TIETOKANTAOBJEKTEJA NÄKYMÄT, SYNONYYMIT, INDEKSOINTI, VALTUUDET JA SYSTEEMIHAKEMISTO

CSE-A1200 Tietokannat

031075P MATEMATIIKAN PERUSKURSSI II 5,0 op

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

811120P Diskreetit rakenteet

031075P MATEMATIIKAN PERUSKURSSI II 5,0 op

Excel 2010 ja QlikView. Mihin ja milloin pivot:ia voi käyttää

SUOMEN LASTENKULTTUURIKESKUSTEN LIITTO TILASTOPOHJAN KÄYTTÖ. Noora Herranen Kirsi Jaakkola Elina Järvelä Pilvi Kuitu

Transkriptio:

SQL kysely Kyselyn yleisrakenne: select tulostietomäärittely from taulukkeet [where valintaehdot] [group by ryhmitystekijät] [having ryhmärajoitteet] [order by järjestysperusta] Kysely tuottaa nimettömän tulostaulun. 1 Kyselyn rakentaminen opettaja opetunnus nimi puhelin tyohuone ilmoittautuminen kurssikoodi ryhmanro Opisknro ilm_aika harjoitusryhma kurssikoodi ryhmanro viikonpaiva alkamisaika sali opettaja Kurssi koodi nimi opintoviikot luennoija opiskelija onumero nimi paa_aine kaupunki aloitusvuosi 2

Alikyselyt Alikyselyllä tarkoitetaan kyselyyn upotettua toista kyselyä. Upotettua kyselyä voidaan käyttää kyselyn from-osassa mutta myös where-osassa valintaehtojen operandina. Alikyselykin tuottaa tuloksenaan taulun Alikyselyiden käyttöön valintaehdoissa on omia predikaatteja ja tarkenteita, jotka määrittelevät, miten ehdon operandia sovelletaan alikyselyn tulokseen IN; NOT IN; tarkenteet any, some, all; EXISTS, NOT EXISTS 3 Alikyselyt Vuoden 92 standardissa from-osaan sallittiin normaalien taulujen myös alikyselyiden tulostaulut from (alikysely) [[as] aliasnimi [( sarakeluettelo)] ] alikysely on normaali kysely sarakeluettelo uudelleen nimeää alikyselyn tulossarakkeet tästä rakenteesta on hyötyä, jos halutaan yhdistää yksityiskohtaista tietoa ja yhteenvetotietoa tai eri perustein laskettuja yhteenvetotietoja samalle riville. Yksityiskohtien kyselyssä rakennetta ei tarvita. yleensä rakenteen käyttö vain sotkee asioita - VÄLTÄ 4

Alikyselyt Opettajat, jotka luennoivat jotain kurssia select nimi from opettaja where opetunnus in (select luennoija from kurssi) order by nimi; Opettajat, jotka eivät luennoi mitään kurssia select nimi from opettaja where opetunnus not in (select luennoija from kurssi) order by nimi; alikysely voidaan suorittaa erillään pääkyselystä 5 Alikyselyt opiskelijat, jotka eivät opiskele millään kurssilla: EI: select * from opiskelija, ilmoittautuminen where onumero=opisknro and kurssikoodi is null; select * from opiskelija, ilmoittautuminen where onumero=opisknro and onumero not in (select opisknro from ilmoittautuminen) Vaan select * from opiskelija where onumero not in (select opisknro from ilmoittautuminen) 6

Alikyselyt Luennoivat opettajat, kytketyllä alikyselyllä select nimi from opettaja where exists (select luennoija from kurssi where luennoija= opettaja.opetunnus) order by nimi; alikysely on evaluoitava erikseen jokaista opettajariviä kohti 7 SQL:ssä on joukko yhteenvetofunktioita (aggregate function, koostefunktio) AVG MIN MAX SUM COUNT keskiarvo pienin arvo (minimi) suurin arvo (maksimi) summa lukumäärä Yhteenvetofunktioita käytettäessä tulosriviä ei muodostetakaan jokaisesta valintaehdon täyttävästä riviyhdistelmästä vaan, ellei ryhmittelyä ole määritelty, muodostetaan yksi tulosrivi koko aineistosta 8

Opiskelijoiden lukumäärä: select count(*) from opiskelija; Count:n argumenttina voisi käyttää myös mitä tahansa vakiota, tulos olisi sama eli rivien lukumäärä select count(1) from opiskelija; Jos parametrina annetaan sarake saadaan siinä olevien ei-tyhjien arvojen määrä select count(onumero) from opiskelija; 9 Milloin pisimpään opiskelut helsinkiläinen opiskelija on aloittanut opintonsa? select min(aloitusvuosi) from opiskelija where kaupunki= Helsinki ; Keskiarvoa, summaa, minimiä ja maksimia laskettaessa tyhjäarvot jätetään huomioimatta Kurssien keskimääräinen opintoviikkomäärä select avg(opintoviikot) from kurssi; 10

Yhteenvedon laskenta voidaan rajata vain keskenään erilaisiin arvoihin (projektioon). Tällainen rajaus on yleensä järkevä vain lukumääriä laskettaessa Monellako eri paikkakunnalla opiskelijat asuvat? select count(distinct kaupunki) from opiskelija; 11 Yhteenvetofunktion sisältävään kyselyyn ei voi ottaa mukaan dataa niiltä yksittäisiltä riveiltä, joilta funktio lasketaan Minkä kurssien opintoviikkomäärä on suurin? Ei siis ole mahdollista: select nimi, max(opintoviikot) from kurssi; yksittäisen rivin dataa miltä riviltä nimi poimittaisiin? 12

Minkä kurssin opintoviikkomäärä on suurin? Toimivia vaihtoehtoja: select nimi, opintoviikot from kurssi where opintoviikot >= ALL (select opintoviikot from kurssi); Select nimi, opintoviikot from kurssi where opintoviikot = (select max(opintoviikot) from kurssi); select nimi,maksi from kurssi, (select max(opintoviikot) maksi from kurssi) as m where opintoviikot =m.maksi; 13 Jos kyselyyn liitetään ryhmittelymääre (Group by) muuttuu tulosrivien muodostusperiaate jälleen: muodostetaan yksi tulosrivi kutakin ryhmää kohti group by -määreessä luetellaan sarakkeet, joiden arvojen perusteella ryhmittely tehdään kaikki ne rivit, joilla on sama arvo luetelluissa sarakkeissa muodostavat ryhmän ryhmät muodostetaan sen jälkeen kun on ensin sovellettu where-ehtoa rivien karsintaan. 14

Group by A Taulu X A B C D 1 4 6 7 1 1 4 2 1 5 5 2 2 4 8 7 2 3 5 1 3 1 5 2 3 2 4 6 Select A, sum(b) from X group by A; A B 1 10 2 7 3 3 15 Group by -lausetta käytettäessä tulostietoluettelossa voi olla yhteenvetofunktioiden lisäksi vain niitä sarakkeita, jotka esiintyvät group by -lauseessa. Kaikkien ryhmittelyyn käytettyjen sarakkeiden ei tarvitse olla mukana, mutta yleensä ne ovat select koodi, nimi, ryhmanro, count(*) from kurssi, ilmoittautuminen where ilmoittautuminen.kurssikoodi= kurssi.koodi group by koodi, nimi, ryhmanro; Ei anna tyhjien ryhmien ilmoittautujamäärää koska nimi on tulostietolistalla sen pitää olla myös ryhmittelytekijänä vaikka ilman sitä saataisiin samat ryhmät 16

kurssi 1132 1133 1135 Pariton putoaa ilmoittautuminen Ryhmät where-ehdon täyttävien perusteella 1132 1 A 1132 1 B 1132 2 C 1135 1 D 1135 1 E 1135 1 F 17 select nimi, ryhmanro, count(*) from kurssi, ilmoittautuminen where ilmoittautuminen.kurssikoodi=kurssi.koodi group by nimi, ryhmanro union vakioarvo (select nimi, ryhmanro, 0 from kurssi, harjoitusryhma H, where koodi=h.kurssikoodi and (koodi, H.ryhmanro) not in (select kurssikoodi, ryhmanro from ilmoittautuminen)); 18

Edellisen voisi hoitaa myös ulkoliitoksella select nimi, harjoitusryhma.ryhmanro, count(ilmoittautuminen.ryhmanro) from kurssi, harjoitusryhma left outer join ilmoittautuminen on harjoitusryhma.kurssikoodi= ilmoittautuminen.kurssikoodi and harjoitusryhma.ryhmanro= ilmoittautuminen.ryhmanro where harjoitusryhma.kurssikoodi=kurssi.koodi group by nimi, harjoitusryhma.ryhmanro huom: tämä syntaksi ei käy Oracle 8:ssa eikä siten myöskään Trainer-harjoituksissa 19 Oraclessa edellisen voisi hoitaa myös ulkoliitoksella seuraavasti select nimi, harjoitusryhma.ryhmanro, osoittavat count(ilmoittautuminen.ryhmanro) sarakkeen johon from kurssi, voi tulla tyhjäarvo harjoitusryhma, ilmoittautuminen where harjoitusryhma.kurssikoodi = ilmoittautuminen.kurssikoodi (+) and harjoitusryhma.ryhmanro = ilmoittautuminen.ryhmanro (+) and harjoitusryhma.kurssikoodi=kurssi.koodi group by nimi, harjoitusryhma.ryhmanro 20

Ryhmäkohtaisen rivin ottamista mukaan tulokseen voidaan rajoittaa having määreellä. Having-ehto toimii kuten where-ehto, mutta se perustuu ryhmäkohtaisesti lasketun yhteenvetofunktion arvoon Ryhmät, joihin on ilmoittautunut yli 20 opiskelijaa select nimi, ryhmanro, count(*) from kurssi, ilmoittautuminen where ilmoittautuminen.kurssikoodi=kurssi.koodi group by nimi, ryhmanro having count(*) >20; 21 Yhteenvetofunktioilla voi laskea, mutta niitä ei voi ketjuttaa (eli toinen on toisen argumenttina) Millä kursseilla on suurin keskimääräinen ryhmäkoko, ei onnistu seuraavasti select nimi, H.ryhmanro, max(avg(count(*))) from kurssi, harjoitusryhma H, ilmoittautuminen I where koodi=h.kurssikoodi and H.kurssikoodi=I.kurssikoodi and H.ryhmanro=I.ryhmanro group by nimi, H.ryhmanro * Ajettuna Oraclessa: VIRHE rivillä 1: ORA-00937: tämä ei ole yhden ryhmän koostefunktio 22

select koodi, nimi, opiskelijoita/ryhmia from kurssi, (select kurssikoodi, count(*) opiskelijoita from ilmoittautuminen group by kurssikoodi) as ilm, (select kurssikoodi, count(*) ryhmia from harjoitusryhma group by kurssikoodi) as ryhm where kurssi.koodi= ilm.kurssikoodi and kurssi.koodi= ryhm.kurssikoodi and opiskelijoita/ryhmia = (XXXXX seuraavalla sivulla) 23 XXXXX= select max(opiskelijoita/ryhmia) from (select kurssikoodi, count(*) opiskelijoita from ilmoittautuminen group by kurssikoodi) as i, (select kurssikoodi, count(*) ryhmia from harjoitusryhma group by kurssikoodi) as ry where i.kurssikoodi = ry.kurssikoodi tyhjät kurssit eivät tule mukaan. mutta niiden keskimääräinen ryhmäkoko ei voi olla suurin 24