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



Samankaltaiset tiedostot
Kyselyn yleisrakenne:

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-valintaehto. SQL-valintaehto. Opettajien nimet: Opiskelijoiden pääaineet

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

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-yhteenvetofunktiot. SQL-yhteenvetofunktiot

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

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

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

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

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

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

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

SQL-kielen perusteet. Tietokantojen perusteet

4.3.4 SQL kyselyt... 45

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

SQL - STRUCTURED QUERY LANGUAGE

Relaation tyhjyyden testaaminen

SELECT-lauseen perusmuoto

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

5 SQL TIETOKANTAKIELI...33

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

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

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

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

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

CSE-A1200 Tietokannat

HELIA 1 (14) Outi Virkki Tiedonhallinta

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

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

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

Liitokset - haut useaan tauluun

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

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

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

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

SQL:N PERUSTEET MARKKU SUNI

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

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

CSE-A1200 Tietokannat

Kirjasto Relaatiotietokannat Kevät Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

Opiskeluoikeuksien maaran tiedonkeruu

Tiedonhallinnan perusteet. H11 Ovien ja kulun valvontajärjestelmän tietokanta

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

HELIA 1 (14) Outi Virkki Tiedonhallinta

Tietokantakurssit / TKTL

TIETOKANTOJEN PERUSTEET OSIO 11 MARKKU SUNI

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

TIETOKANTOJEN PERUSTEET MARKKU SUNI

OUTER JOIN se vanha kunnon kaveri

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

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

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

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

SPARQL(SPARQL Protocol and RDF Query Language)

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

HELIA SQL-harjoituksia 1(1) atk72d Versiopvm:

3. Taulujen määrittely ja muuttaminen

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

3. TAULUJEN MÄÄRITTELY JA MUUTTAMINEN

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

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

HELIA 1 (11) Outi Virkki Tiedonhallinta

Yhdiste, leikkaus, erotus ym.

Tietokanta projektin alussa: create table kurssin_tila ( NOT NULL VARCHAR2(60) create table kurssin_tyyppi ( create table opintojakson_tyyppi (

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

Kuva 7.2 vastaustaulu harjoitukseen 7.2

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

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

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

Relaatioalgebra. Kyselyt:

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

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

Treenitietokannan suunnitteludokumentti

CSE-A1200 Tietokannat

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

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

2. Käsiteanalyysi ja relaatiomalli

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

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

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

Opintopiiritehtävä 3: Verkkohuutokauppa

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

Yleinen SQL. Yleinen SQL. SQL:n kehitys

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

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

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

Tietokannat II -kurssin harjoitustyö

Tietotekniikan laitos Käki-projekti TIETOKANTASUUNNITELMA. 1. Johdanto

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

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

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

Relaatiomalli ja -tietokanta

Makrojen mystinen maailma lyhyt oppimäärä

D B. Kyselypuut ja ekvivalenssi

Tietokannan hallinta. Kevät 2004 Jan Lindström R&G Chapter 1

Transkriptio:

Harjoitustehtävä 1 Puutarha Puutarhatunnus omistaja sijainti Vastuualue puutarhatunnus aluenumero maaperä, kosteus valaistus sijainti vastuutonttu Tonttu Tonttutunnus Istutus istutuspäivä paikka_alueella istutusmuoto onnistuiko tarkastus_pvm istuttaja tarkastaja istutettu_kasvi puutarhatunnus tarhan_alue Palkinto vuosi sija saaja Kasvilaji lajitunnus _suom _latin kasvityyppi vaatimukset kukanväri kukinta_aika muuta create table Tonttu ( tonttutunnus varchar(20) not null primary key, varchar(40) not null create table Puutarha( puutarhatunnus varchar(20) not null primary key, omistaja varchar(60), sijainti varchar(20) not null create table Palkinto( vuosi int not null, sija int not null, saaja varchar(20) not null, primary key (vuosi, sija), foreign key (saaja) references tonttu create table Vastuualue ( puutarhatunnus varchar(20) not null, aluenumero int not null, maapera varchar(60), kosteus varchar(20), valaistus varchar(20), sijainti varchar(20), vastuutonttu varchar(20), primary key (puutarhatunnus, aluenumero), foreign key (vastuutonttu) references tonttu, primary key (puutarhatunnus, aluenumero), foreign key (vastuutonttu) references tonttu, foreign key (puutarhatunnus) references puutarha on delete cascade create table Kasvilaji( lajitunnus varchar(30) not null primary key, _suom varchar(60) not null, _latin varchar(60) not null, kasvityyppi varchar(40) not null, vaatimukset varchar(1000), kukanvari varchar(40), kukinta_aika varchar(30), muuta varchar(1000) kukinta_aika varchar(30), muuta varchar(1000) create table Istutus( istutuspaiva date not null, paikka_alueella varchar(20) not null, istutusmuoto varchar(20) not null, onnistuiko char, tarkastus_pvm date, istuttaja varchar(20)not null, tarkastaja varchar(20), istutettu_kasvi varchar(30) not null, puutarhatunnus varchar(20) not null, tarhan_alue int not null, primary key (puutarhatunnus, tarhan_alue, istutuspaiva, paikka_alueella), foreign key (istuttaja) references tonttu, foreign key (tarkastaja) references tonttu, foreign key (puutarhatunnus, tarhan_alue) references vastuualue on delete cascade, foreign key (istutettu_kasvi) references kasvilaji 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.

SQL-kysely Tulostietomäärittelyn elementeille lasketaan normaalitapauksessa arvo jokaista valintaehdot täyttävää riviyhdistelmää kohden SQL -kyselyt Kyselyn from-osassa voi olla useita tauluja Kaikki ne taulut, joiden dataa halutaan mukaan tulokseen on annettava from-osassa Tauluille voidaan from-osassa antaa tilapäinen kyselyn sisäinen (alias, correlation name) from taulu [AS] alias liitettävillä tauluilla on usein samansiä sarakkeita, joten taulunimeä on käytettävä tarkenteena - alias voi olla lyhenne, joka vähentää kirjoitusvaivaa Aliasten käyttö Jos sama taulu esiintyy from osassa useaan kertaan, on taulun esiintymät erotettava käyttämällä aliasta Esim.: parit, joilla on sama luennoija select A., B. from kurssi A, kurssi B where A.luennoija=B.luennoija and A.<B. order by A., B. ehto A.<B. estää saman parin toistumisen eri järjestyksessä Tyypillinen virhe liitoksissa on jättää jokin liitosehto pois, jolloin tuloksen rivijoukko tulee huomattavasti suuremmaksi kuin pitäisi jos from-osassa on n kpl liitettäviä tauluja tarvitaan vähintään n-1 liitosehtoa. Taulujen liittäminen voi perustua useaan sarakkeeseen, jolloin ehtolausekkeessa tarvittavien alkeisehtojen määrä voi moninkertaistua. Yleensä kyselyt rakentuvat siten, että niissä on jokin keskeinen taulu johon, muita liitetään. Voi olla, ettei tuosta keskeisestä taulusta tule mitään dataa tulokseksi. liitokset Keskeinen taulu viikonpaiva alkamisaika sali luennoija

Laadi raportti kurssin Java-ohjelmointi harjoitusryhmistä Mitä halutaan tulokseen: Ryhmän numero (taulussa harjoitusryhmä) Ohjaajan (taulussa ) kokoontumispäivä (taulussa harjoitusryhmä) alkamisaika (taulussa harjoitusryhmä) n (taulussa ) Taulut, harjoitusryhmä ja on välttämättä otettava kyselyn from osaan Taulu tarvitaan opiskelijoiden kytkemiseksi ryhmiin ja taulu kurssi, jotta saataisiin selville Java ohjelmoinnin viikonpaiva alkamisaika sali luennoija viikonpaiva alkamisaika sali luennoija = = viikonpaiva = alkamisaika and luennoija sali = ryhmänro opisknro= Alikyselyt select H. rno, Ope. ope, H.viikonpaiva, H.alkamisaika, O. Nimi from Harjoitusryhma H, Ope, O, I, kurssi K where H.=K. and I.=H. and I.=H. and Ope.Opetunnus=H. Opettaja and I.=O. and K.= Java ohjelmointi order by H., O.; 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 lisätarkenteita, jotka määrittelevät, miten ehdon operandia sovelletaan alikyselyn tulokseen IN; NOT IN; tarkenteet any,some, all; EXISTS, NOT EXISTS

Alikyselyt Vuoden 92 standardissa from-osaan sallittiin normaalien taulujen myös alikyselyiden tulostaulut from (alikysely) [[as] alias [( sarakeluettelo)] ] alikysely on normaali kysely sarakeluettelo uudelleennimeää 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Ä Alikyselyt Opettajat, jotka luennoivat jotain kurssia select from where in (select luennoija from kurssi) order by ; Opettajat, jotka eivät luennoi mitään kurssia select from where not in (select luennoija from kurssi) order by ; alikysely voidaan suorittaa erillään pääkyselystä Alikyselyt Luennoivat t, kytketyllä alikyselyllä select from where exists (select luennoija from kurssi where luennoija=.) order by ; alikysely on evaluoitava erikseen jokaista riviä kohti SQL:ssä joukko yhteenvetofunktioita (aggregate function, koostefunktio) AVG keskiarvo MIN pienin arvo (mi) MAX suurin arvo (maksimi) SUM summa COUNT 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 Opiskelijoiden lukumäärä: select count(*) from ; Count:n argumenttina voisi käyttää myös mitä tahansa vakiota, tulos olisi sama eli rivien lukumäärä select count(1) from ; Jos parametrina annetaan sarake saadaan siinä olevien ei-tyhjien arvojen määrä select count() from ; Milloin pisimpään opiskelut helsinkiläinen on aloittanut opintonsa? select min() from where = Helsinki ; Keskiarvoa, summaa, miä ja maksimia laskettaessa tyhjäarvot jätetään huomioimatta en keskimääräinen opintoviikkomäärä select avg() from kurssi;

Yhteenvedon laskenta voidaan rajata vain keskenään erilaisiin arvoihin (projektioon). Tällainen rajaus on yleensä järkevä vain lukumääriä laskettaessa Monellako eri paikkakunnalla t asuvat? select count(distinct ) from ; 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, max() from kurssi; yksittäisen rivin dataa miltä riviltä poimittaisiin? Minkä kurssin opintoviikkomäärä on suurin? Toimivia vaihtoehtoja: select, from kurssi where >= ALL (select from kurssi Select, from kurssi where = (select max() from kurssi select,maksi from kurssi, (select max() maksi from kurssi) as m where =m.maksi; Jos kyselyyn liitetään ryhmittelymääre (Group by) muuttuu tuolosrivien 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. 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 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,,, count(*) from kurssi, where.= kurssi. group by,, ; Ei anna tyhjien ryhmien ilmoittautujamäärää koska on tulostietolistalla sen pitää olla myös ryhmittelytekijänä vaikka ilman sitä saataisiin samat ryhmät

kurssi 1132 1133 1135 Pariton putoaa 1132 1 A 1132 1 B 1132 2 C 1135 1 D 1135 1 E 1135 1 F Ryhmät where-ehdon täyttävien perusteella select,, count(*) from kurssi, where.=kurssi. group by, union vakioarvo (select,, 0 from kurssi, H, where =H. and (,H.) not in (select, from ) Ryhmäkohtaisen rivin mukaanottamista 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 a select,, count(*) from kurssi, where.=kurssi. group by, having count(*) >20; Yhteenvetofunktioilla voi laskea, mutta niitä ei voi ketjuttaa (eli toinen on toisen argumenttina) Millä kurseilla on suurin keskimääräinen ryhmäkoko, ei onnistu seuraavasti select, H., max(avg(count(*))) from kurssi, H, I where =H. and H.=I. and H.=I. group by, H. * Ajettuna Oraclessa: VIRHE rivillä 1: ORA-00937: tämä ei ole yhden ryhmän koostefunktio select,, opiskelijoita/ryhmia from kurssi, (select, count(*) opiskelijoita from group by ) as ilm, (select, count(*) ryhmia from group by ) as ryhm where kurssi.= ilm. and kurssi.= ryhm. and opiskelijoita/ryhmia = (XXXXX seuraavalla kalvolla) XXXXX= select max(opiskelijoita/ryhmia) from (select, count(*) opiskelijoita from group by ) as i, (select, count(*) ryhmia from group by ) as ry where i. = ry.