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

Koko: px
Aloita esitys sivulta:

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

Transkriptio

1 Tietokantojen perusteet, DO NOT PRINT THIS DOCUMENT opetusmoniste osa 4 SQL:N PIIRTEITÄ JA TIETOKANTAOHJELMOINTI Harri Laine Yhteenvetofunktiot Näkymät Tietokannan ylläpito Tietokantatapahtumat Tietokannan käyttö ohjelmasta Sulautettu SQL Tietokannan käyttö liittymäkirjaston avulla Tietokantaohjelmointikielet

2 Yhteenvetofunktiot Tähän asti on käsitelty kyselyjä, joissa tuotetaan yksi tulosrivi jokaista valintaehdot täyttävää kohdetaulujen riviyhdistelmää kohti. Tällaiset kyselyt tuottavat tuloksenaan detaljitietoa. SQL:llä on mahdollista tuottaa myös yhteenvetotietoa (aggregate data). Yhteenvetotietojen muodostukseen ovat käytettävissä funktiot AVG keskiarvo COUNT lukumäärä MAX suurin arvo MIN pienin arvo ja SUM summa. Joissakin järjestelmissä on näiden lisäksi myös muita tilastollisia suureita, esimerkiksi keskihajonnan, laskevia funktioita. Yhteenvetotietoja haluttaessa tuloksen muodostamisperiaate muuttuu. Yhteenveto voidaan tuottaa joko koko vastausaineistosta tai ryhmiin jaotellusta vastausaineistosta. Vastausaineistolla tarkoitetaan tässä valintaehdot täyttäviä riviyhdistelmiä. Tuotettaessa yhteenveto koko vastausaineistosta saadaan kyselyn tulokseksi aina yksi rivi. Jos vastausaineisto on tyhjä tuottavat muut funktiot paitsi COUNT tuloksenaan tyhjäarvon (NULL). COUNT tuottaa tyhjästä vastausaineistosta arvon 0. Esimerkkejä: Ilmoittautumisten lukumäärä: select count(*) from ilmoittautuminen; Kurssien pienin ja suurin opintoviikkomäärä select min(opintoviikot) as pienin, max(opintoviikot) as suurin from kurssi; Helsinkiläisten opiskelijoiden keskimääräinen aloitusvuosi select avg(aloitusvuosi) from opiskelija where kaupunki= Helsinki ; 68

3 Funktioille annetaan argumentiksi lauseke, jonka perusteella funktion arvo lasketaan. Funktiolle COUNT voi antaa argumentiksi myös tähden (*) osoittamaan, että tulokseksi halutaan rivien lukumäärä. Argumenttiin voidaan liittää määre DISTINCT ilmaisemaan sitä, että funktion arvo tulisi laskea sarakkeen erilaisten arvojen perusteella. Funktion arvoa laskettaessa tyhjäarvot jätetään huomiotta eli ne eivät vaikuta tulokseen. Ainoa poikkeus tästä on COUNT(*), joka laskee mukaan kaikki rivit, vaikka jokin rivi sisältäisi pelkkiä tyhjäarvoja. Sensijaan sarakekohtaisesti COUNTfunktiokin ilmoittaa vain todellisten arvojen lukumäärä. Esimerkki: Taulu R(A,B,C) : A B C select count(*) from R = > select count(a) from R => select count(b) from R => 3 3 null 2 select count(distinct B) from R => 2 3 null 2 select count(*) from R where B is null => select (distinct C) from R = 1 DISTINCT määreen käyttö toistuvien arvojen ottamiseksi vain kertaalleen mukaan laskentaan on yleensä järkevää vain COUNT-funktion yhteydessä. Keskiarvon tai summan laskeminen erillisistä arvoista tuottaa harvoin mitään hyödyllistä tulosta. Esimerkki: Monellako eri paikkakunnalla opiskelijat asuvat? select Opiskelijoiden asuinpaikkakuntia:, count(distinct kaupunki) from opiskelija; Yhteenvetofunktioita voi käyttää lausekkeissa ja niiden argumentteina voi käyttää lausekkeita. Toista yhteenvetofunktiota ei kuitenkaan voi käyttää toisen argumenttina eikä lausekkeisiin tai ylipäätään tulokseen saa mukaan samasta vastusaineistosta sekä rivikohtaista deltaljitietoa että yhteenvetotietoa. 69

4 Esimerkkejä: Suurimman ja pienimmän opintoviikkomäärän erotus select MAX(opintoviikot)-MIN(opintoviikot) erotus from kurssi; Kertokoon opiskelijanumeron parillisuus opiskelijan olevan naispuolinen. Naispuolisten opiskelijoiden osuus prosentteina saadaan tällöin selville kyselyllä: select 100*(count(onumero)-sum(mod(onumero,2)))/count(onumero) from opiskelija; Tässä mod(onumero,2) on miespuolisilla opiskelijoilla 1, joten sum(mod(onumero,2)) ilmoittaa miespuolisten opiskelijoiden lukumäärän. Erotuksella saadaan naispuolisten lukumäärä ja jakolaskulla heidän osuutensa. Kysely select nimi, max(opintoviikot) from kurssi; on syntaktisesti virheellinen. Siinä halutaan samasta aineistosta yhteenvetotietoa ja detaljitietoa. Miltä riviltä tuo detaljitieto otettaisiin? Jos kyselyssä haluttaisiin saada selville minkä kurssin opintoviikkomäärä on suurin se pitäisi esittää esimerkiksi seuraavasti select nimi, opintoviikot from kurssi where opintoviikot = (select max(opintoviikot) from kurssi); tai select nimi, maksi from kurssi K, (select max(opintoviikot) maksi from kurssi) M where K.opintoviikot=M.maksi; Kummassakin näistä vaihtoehdoista maksimi lasketaan ainakin loogisesti eri rivijoukosta kuin mistä detaljitieto nimi haetaan. 70

5 Ryhmiin jaottelu Ryhmiin jaottelu saadaan aikaan lisäämällä kyselyyn ryhmittelymääre group by <ryhmitysperusteet>. Ryhmitysperusteina annetaan sarakeluettelo ja ryhmät muodostetaan siten, että ryhmään kuuluvat kaikki sellaiset vastausaineiston rivit, joilla on yhtenevät arvot kussakin sarakeluettelon sarakkeessa (kuvat 20 ja 21) X= taulu T group by A (Muodostuu 3 ryhmää.) A B C D group A= A= A= A= A= A= A= A=3 Kuva 20: Ryhmittely yhden sarakkeen perusteella Y= taulu T group by A,B (Muodostuu 6 ryhmää) A B C D group A=1, B= A=1, B= A=1, B= A=2, B= A=2, B= A=3, B= A=3, B= A=3, B=2 Kuva 21: Ryhmittely 2 sarakkeen perusteella. 71

6 Ryhmitetystä aineistosta yhteenvetofuntioiden arvot lasketaan ryhmäkohtaisesti ja tulokseen tulevien rivien lukumäärä on sama kuin ryhmien lukumäärä. Ylläolevasta ryhmittelystä X tulisi siis 3 tulosriviä ja ryhmittelystä Y 6 tulosriviä. Esimerkkejä: select A, sum (B), count(c) from T; A sum(b) count(c) select A,B, count(c), sum(d) from T; A B count(c ) sum(d) Esimerkki: Kurssien harjoitusryhmiin ilmoittautuneiden opiskelijoiden lukumäärä Kysely select nimi, ryhmanro, count(*) from kurssi, ilmoittautuminen where ilmoittautuminen.kurssikoodi=kurssi.koodi group by nimi, ryhmanro; 72

7 tuottaa oikean halutun tuloksen, jos jokaiseen ryhmään on ilmoittautunut vähintään yksi opiskelija. Tyhjät ryhmät jäävät kuitenkin pois vastauksesta, sillä ne karsiutuvat liitosoperaation johdosta vastausaineistosta jo ennen ryhmitystä (kuva 22). kurssi Pariton putoaa ilmoittautuminen A B C D E F Ryhmät näiden where-ehdon täyttävien perusteella Kuva 22: where- ehto ennen ryhmitystä. Tyhjät ryhmätkin tuottava kysely olisi esimerkiksi: select nimi, ryhmanro, count(*) from kurssi, ilmoittautuminen where ilmoittautuminen.kurssikoodi=kurssi.koodi group by nimi, ryhmanro union (select nimi, ryhmanro, 0 from kurssi, harjoitusryhma H, where koodi=h.kurssikoodi and koodi,h.ryhmanro) not in (select kurssikoodi, ryhmanro from ilmoittautuminen)); Myös ulkoliitosta voisi käyttää: 73

8 select nimi, h.ryhmanro, count(distinct opisknro) from kurssi, harjoitusryhma h left outer join ilmoittautuminen i on h.kurssikoodi= i.kurssikoodi and h.ryhmanro=i.ryhmanro where kurssi.koodi= h.kurssikoodi group by nimi, h.ryhmanro Huomaa, että edellä ei voi käyttää funktiota COUNT(*), sillä tyhjistäkin ryhmistä tulee nyt yksi rivi vastausaineistoon. Ryhmittelyyn perustuvissa kyselyissä voidaan tulokseen ottaa mukaan vain group by osassa lueteltuja ryhmittelyssä käytettyjä sarakkeita sekä yhteenvetofunktioihin perustuvia lausekkeita. Jos esimerkiksi haluttaisiin kursseista tietoina koodi, nimi, luennoijan nimi ja ryhmien lukumäärä, täytyisi kysely esittää muodossa select koodi, kurssi.nimi, opettaja.nimi, count(*) ryhmia from kurssi, opettaja, harjoitusryhma where kurssi.koodi=harjoitusryhma.kurssikoodi and kurssi.luennoija=opettaja.opetunnus group by koodi, kurssi.nimi, opettaja.nimi; Ryhmät muodostuisivat täysin samoiksi vaikka ryhmittelyyn käytettäisiin vain kurssitaulun saraketta koodi. Kurssin nimi ja opettajan nimi on kuitenkin liitettävä group by osaan, jotta ne saataisiin mukaan tulokseen. Niiden poisjättäminen group by osasta johtaisi ylläolevan kyselyn kohdalla käännösaikaiseen virheilmoitukseen. Ryhmitetystä aineistosta tuotetaan vastaukseen yksi rivi jokaista ryhmää kohden. Ryhmien mukaanottamista voidaan kuitenkin säädellä liittämällä kyselyyn ryhmiä koskeva valintaehto. Tämä esitetään määreellä having <valintaehdot> Valintaehdot ovat rakenteeltaan samanlaisia kuin kyselyn where-osassa annettavat valintaehdot. Yleensä ehdot kuitenkin perustuvat yhteenvetofunktioiden arvoihin. 74

9 Esimerkki: 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; Käytännössä ryhmien muodostaminen tarkoittaa vastausaineiston järjestämistä ryhmityssarakkeiden perusteella. Vastauksen varsinaisen järjestyksen määrittelee kuitenkin order by määre. Esimerkki: Harjoitusryhmät, ilmoittautujalukumäärän mukaan laskevassa järjestyksessä. select nimi, ryhmanro, count(*) from kurssi, ilmoittautuminen where ilmoittautuminen.kurssikoodi=kurssi.koodi group by nimi, ryhmanro order by count(*) desc; Seuraavassa esimerkissä tarkastellaan kohtuullisen monimutkaista ryhmittelyyn perustuvaa kyselyä. Tällaisten kyselyjen yhteydessä kannattaisi jo harkita myöhemmin esiteltävien näkymien käyttöä helpottamaan kyselyn muodostusta. Esimerkki: Millä kurssilla on suurin keskimääräinen ryhmäkoko. Ensimmäinen yritys: 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 75

10 Yritys johtaa virheilmoitukseen, sillä yhteenvetofunktio ei voi olla toisen argumenttina. Lähdetään etsimään oikeaa kyselyä sen osasista. Seuraavassa ei huomioida tyhjiä ryhmiä. Ryhmään ilmoittautuneiden lukumäärät ei-tyhjien ryhmien osalta saadaan kyselyllä: select kurssikoodi,ryhmanro, count(*) lkm from ilmoittautuminen group by kurssikoodi, ryhmanro Oletetaan, että tämän suoritus tuottaa tuloksen KURSSIKOODI RYHMANRO LKM Kysely voidaan ottaa alikyselyksi kyselyyn, joka laskee kullekin kurssille keskimääräisen ryhmäkoon: select koodi, nimi, avg(lkm) from kurssi, (select kurssikoodi,ryhmanro, count(*) lkm from ilmoittautuminen group by kurssikoodi, ryhmanro) A where koodi= A.kurssikoodi group by koodi, nimi; Suoritettuna samassa kannassa kuin edellinen kysely tämä tuottaisi tuloksen 76

11 KOODI NIMI AVG(LKM) 1134 Informaatiojärjestelmät 4, Java ohjelmointi 4, Oliotietokannat Tietorakenteet 5 Maksimi saadaan selville having-ehdolla, jolloin koko kysely olisi: select koodi, nimi, avg(lkm) from kurssi, (select kurssikoodi,ryhmanro,count(*) lkm from ilmoittautuminen group by kurssikoodi, ryhmanro) A where koodi= A.kurssikoodi group by koodi, nimi having avg(lkm)>= ALL (select avg(lkm) from kurssi, (select kurssikoodi,ryhmanro,count(*) lkm from ilmoittautuminen group by kurssikoodi, ryhmanro) A where koodi= A.kurssikoodi group by koodi) Having ehdon kyselyssä on tulokseen otettu vain yheenvetofunktion arvo ilman ryhmittelysaraketta. Alikyselyn tulos tässä tapauksessa on AVG(LKM) 4, ,

12 Käytettäessä yhteenvetofunktioita yhdeksi merkittäväksi ongelmaksi muodostuu tuloksen oikeellisuuden todentaminen. Tulokseksi saadaan vain yksi rivi tai joukko ryhmäkohtaisia rivejä, jotka sisältävät yhteenvedon tuloksen. Miten voimme tietää onko tuo tulos oikein? Onko se laskettu oikean rivijoukon yli? Ovatko kyselyyn liittyvät ehdot oikein?. Tyypillinen valintaehdon puuttuminen johtaa siihen, että jokin luku tulee laskentaan mukaan moneen kertaan. Tällöin summa moninkertaistuu ja keskiarvo lasketaan painottuneesta joukosta. Etenkin, jos yritämme saada tietokannasta selville jotain uutta informaatiota tunnusluvulla, jonka oikeasta suuruusluokastakaan ei ole varmaa etukäteistietoa tilanne on ongelmallinen. Tunnuslukuun uskotaan ja sitä käytetään päätöksenteossa. Jonkin puuttuvan tai virheellisen valintaehdon perusteella voimme tuottaa merkittävästi virheellisen tunnusluvun. Tällä voi olla sitten päätöksenteossa suurikin merkitys. Tunnuslukuja tuottavien kyselyiden testaukseen tulisikin kiinnittää erityishuomiota. Testaamisessa pitää tuottaa apu- ja välituloksia, joilla varmistutaan kokonaistuloksen oikeellisuudesta. Suuren tietokannan kohdalla tällaiset apu- ja välitulokset voivat olla suuria, mutta niiden kohdalla virhe voi ilman aputuloksia jäädä kokonaan huomaamatta. Esimerkiksi vastausjoukon koko voi joissain tilanteissa olla riittävä aputulos. Joissain toisissa se ei riitä vaan lisäksi tarvitaan muita kyselyjä selvittämään millainen vastausjoukon tulisi olla Näkymät Näkymällä (view) tarkoitetaan kyselyn avulla määriteltyä johdettua taulua (derived table). Tällaista taulua voidaan käyttää kyselyissä kuten perustaulujakin. Myös näkymiin kohdistuvat ylläpito-operaatiot voivat olla rajoitetusti mahdollisia. Näkymä määritellään create view lauseella, joka on muotoa: create view <taulunimi> [(<sarakke1>, )] as <kysely>; Taulunimi nimeää näkymään liitetyn kyselyn tulostaulun. Määrittelyyn liittyvässä sarakeluettelossa sarakkeille voidaan antaa nimet. Jos sarakeluettelo puuttuu, käytetään sarakkeista kyselyn tuottamia nimiä. Kysely määrittelee taulun sisällön. 78

13 Esimerkki: Tyhjät harjoitusryhmät Create view tyhja_ryhma (kurssikoodi, nimi, ryhmanro) as select kurssikoodi, nimi, ryhmanro from kurssi, harjoitusryhma where koodi= kurssikoodi and (kurssikoodi, ryhmanro) not in (select kurssikoodi, ryhmanro from ilmoittautuminen) Näkymätaulun rivejä ei tallenneta minnekään. 1 Kyselyn kohdistuessa näkymätauluun kyselyn käsittelijä limittää kyselyn ja näkymämäärittelyssä olevan kyselyn ja suorittaa näin aikaansaadun yhdistetyn kyselyn. Esimerkiksi kysely select * from tyhja_ryhma; aiheuttaisi näkymän määrittelevän kyselyn suorituksen Näkymien käyttöön on kolme perussyytä: tietoriippumattomuuden aikaansaaminen, täsmäsuojauksen mahdollistaminen ja kyselyjen helpottaminen. Tietoriippumattomuudella tarkoitetaan sitä, että ohjelmaa ei tarvitse muuttaa, jos tietokantaa muutetaan. Hyvin laaditut kyselyt (ei select * muotoisia ) takaavat jo jonkin verran tietoriippumattomuutta. Jos ohjelma käsittelee kantaa näkymien kautta voidaan tietoriippumattomuutta yhä lisätä. Tietokantaan voidaan tehdä laajojakin muutoksia, esimerkiksi pilkkoa taulu useaksi tauluksi ja silti tarjota käyttäjälle samanlainen näkymä. Muutokset edellyttävät vain näkymän määrittelevän kyselyn muuttamista tuottamaan samanlainen taulu muuttuneen kannan pohjalta. Oletetaan, että tauluun ilmoittautuminen liittyisi näkymä ilmo, joka olisi määritelty seuraavasti: 1 Joissakin järjestelmissä on tarjolla näkymän kaltaisesti määriteltävä vedos (snapshot), joka muodostetaan kyselyllä mutta jonka rivit tallennetaan kantaan. Toisin kuin näkymä vedos ei muutu perustaulujen muuttuessa. 79

14 create view ilmo as select kurssikoodi, ryhmanro, opisknro, ilm_aika from ilmoittautuminen; Tämä on rakenteeltaan ja sisällöltään identtinen taulun ilmoittautuminen kanssa. Kun tauluun ilmoittautuminen on kertynyt ilmoittautumisia pitkältä ajanjaksolta runsaasti taulun käyttö alkaa hidastua. Tällöin voidaan päätyä ratkaisuun, jossa passiiviset vanhat ilmoittautumiset siirrettäisiin historiatauluun vanhat_ilmoittautumiset. Erilaiset tilastot edellyttävät kuitenkin sekä nykyisiä että vanhoja ilmoittautumisia. Jos tilastointi olisi perustettu näkymään ilmo, toimisivat tilastot edelleen kun näkymän määrittely muutettaisiin muotoon create view ilmo as select kurssikoodi, ryhmanro, opisknro, ilm_aika from ilmoittautuminen union (select kurssikoodi, ryhmanro, opisknro, ilm_aika from vanhat_ilmoittautumiset); Näkymien käyttö suojauksessa perustuu siihen, että käyttäjille annetaan käyttöoikeuksia näkymiin. Näin voidaan rajata käyttöoikeus vain joihinkin taulun riveihin tai vain yhteenvetotietoihin. Esimerkiksi kuka tahansa voisi saada tiedon kurssien opiskelijamääristä, mutta ei tietoa kurssien yksittäisistä opiskelijoista. Roolille javaopettaja voitaisiin antaa kaikki oikeudet näkymään create view javailmoittautuminen as select kurssikoodi, ryhmanro, opisknro, ilm_aika from ilmoittautuminen where kurssikoodi in (select koodi from kurssi 80

15 where nimi= Java ohjelmointi ) 2 Seuraava näkymämäärittely perustuu oletukseen, että opettaja-taulussa käytetään opettajatunnuksena (opetunnus) opettajan tietokantakäyttäjätunnusta. Funktio user antaa kyselyn suorittajan tietokantakäyttäjätunnuksen. create view oma_kurssi as select * from kurssi where luennoija=user; Näkymän käyttöoikeus voitaisiin tehdä julkiseksi. Luennoijille taulussa näkyvät hänen luennoimiensa kurssien rivit. Muille käyttäjille taulu on tyhjä. Vaikka käyttöoikeus on julkinen eivät muut kuin kurssin luennoija pääse tämän näkymän kautta kurssitietoihin. Näkymää voidaan käyttää myös kyselyjen yksinkertaistamiseen. Monimutkainen kysely upotetaan näkymämäärittelyyn ja käyttäjä muodostaa omat kyselynsä yksinkertaisina näkymätauluihin perustuvina kyselyinä. Edellä määriteltyä näkymää tyhjä_ryhma voisi käyttää näkymän ryhmakoko määrittelyssä: create view ryhmäkoko (koodi, nimi, ryhma, lkm) as select nimi, ryhmanro, count(*) from kurssi, ilmoittautuminen where ilmoittautuminen.kurssikoodi=kurssi.koodi group by nimi, ryhmanro union (select kurssikoodi, nimi, ryhmanro, 0 from tyhja_ryhma); Tätä käyttämällä sen kurssin selvittäminen, jonka keskimääräinen ryhmäkoko on suurin sujuisi seuraavasti: select koodi, nimi, avg(lkm) from ryhmakoko 2 Jos näkymää käytetään usin saattaisi olla parempi määritellä se kurssikoodin eikä kurssin nimeen perustuvana. 81

16 group by koodi, nimi having avg(lkm)>= ALL (select avg(lkm) from ryhmakoko group by koodi) Tietokannan ylläpito SQL sisältää myös tiedon muokkausvälineet tietokannan ylläpitoa varten. Välineistö muodostuu lauseista: insert rivien lisäys, update rivien muutos ja delete rivien poisto. Lisäykset Insert-lauseella on kaksi muotoa. Toisella lisätään yksittäisiä vakioarvoista koostuvia rivejä, toisella usean rivin joukko. Yksittäisen rivin lisäävän insert-lauseen rakenne on insert into <taulu> [(<sarakenimet>)] values (<arvot>) Sarakenimet on luettelo sarakenimiä. Se on valinnainen ja sitä tarvitaan tilanteissa, joissa annetaan arvot vain osalle lisättävän rivin sarakkeista. Arvot osassa annetaan lisättävän rivin sarakkeiden arvot pilkulla eroteltuina. Ellei lauseeseen sisälly sarakenimiosaa, on sarakkeiden arvot annettava siinä järjestyksessä, missä sarakkeet esiintyvät taulussa. Jos lauseeseen sisältyy sarakenimiosa, se määrää annettavien arvojen järjestyksen. Esimerkki: Tarkastellaan taulua kurssi, joka on määritelty seuraavasti: CREATE TABLE kurssi ( koodi numeric(8) NOT NULL, nimi varchar(40) NOT NULL, opintoviikot numeric(5,1), luennoija varchar(12), PRIMARY KEY (koodi ), FOREIGN KEY (luennoija) REFERENCES opettaja); 82

17 Lause insert into kurssi values (1234, Tietokantojen perusteet,2, HLAINE ); lisää rivin tauluun kurssi. Rivin kaikille sarakkeille on annettu arvot. Jos kurssia lisättäessä ei vielä olisi tiedossa kurssin luennoijaa, voitaisiin lisäys tehdä lauseella insert into kurssi values (1234, Tietokantojen perusteet,2,null); tai käyttämällä sarakeluetteloa insert into kurssi (koodi, nimi, opintoviikot) (1234, Tietokantojen perusteet,2); Niille sarakkeille, joille ei anneta arvoa lisäyslauseessa, tulee arvoksi oletusarvo. Ellei tätä ole sarakkeelle määritelty create table lauseen default-määreellä, käytetään oletusarvona tyhjäarvoa. Edellisen esimerkin kaksi viimeistä insert-lausetta lisäävät siis samanlaisen rivin. Jos oletusarvoa ei ole määritelty ja puuttuvaan sarakkeeseen on liitetty taulumäärittelyssä määre NOT NULL, lisäys epäonnistuu. Samoin käy jos lisäys rikkoo muita eheysehtoja, esimerkiksi avaimen yksikäsitteisyyttä tai viiteeheyttä. Lisäyslauseen toisen vaihtoehdon avulla voidaan tauluun lisätä kyselyn tulosrivit. Lauseen muoto on seuraava: insert into <taulu> [(<sarakenimet>)] <kysely>. Tällä lauseella voidaan samoin kuin yksittäistenkin rivien tapauksessa lisätä sekä täydellisiä rivejä että rivejä joista puuttuu joitain sarakkeita. Kyselyn tulosrivit lisäävä lisäysoperaatio on hyödyllinen esimerkiksi kopioitaessa taulu, siirrettäessä tietoja aktiivisesta taulusta historiatauluihin, perustettaessa testiaineistoja ja suoritettaessa tietokannan uudelleenorganisointia. Esimerkki: Kurssin lisääminen kun ei tiedetä luennoijan tunnusta, mutta tiedetään nimi. 83

18 insert into kurssi select 1234, Tietokantojen perusteet, 2, opetunnus from opettaja where nimi = Laine Harri ; Tässä kyselyssä vain opetunnus tulee taulusta opettaja. Muut vastausrivin tiedot ovat vakioita. Esimerkki: Kurssin Ohjelmoinnin perusteet opiskelijoiden siirto kurssille Java ohjelmointi. Insert into ilmoittautuminen select java.kurssikoodi, ryhmanro, opisknro, sysdate 3 from kurssi java, kurssi ohpe, ilmoittautuminen where java.nimi= Java-ohjelmointi and ohpe.nimi= Ohjelmoinnin perusteet and ohpe.koodi=ilmoittautuminen.kurssikoodi; Rivien muutokset Rivien sisältöä muutetaan update-lauseella. Update lauseen rakenne on update <taulu> set <sijoitus>[, <sijoitus> ] [where <valintaehdot>] missä sijoitus on muotoa <sarake>=<lauseke> Lauseessa oleva valintaehto määrittelee muutoksen kohteena olevat rivi. Muutos tehdään kaikkiin niihin riveihin, joiden kohdalla valintaehto on tosi. Jos ehto puuttuu tehdään muutos kaikkiin taulun riveihin. Muutosta ei hyväksytä, jos se aiheuttaa eheysehdon rikkoutumisen. Esimerkki: Kurssin Java-ohjelmointi opintoviikkomäärä kasvatetaan yhdellä. 3 sysdate on Oraclen mukainen nykyhetken antava funktio. 84

19 update kurssi set opintoviikot= opintoviikot+1 where nimi= Java-ohjelmointi ; Esimerkki: Kaikki 4 opintoviikon kurssit jaetaan kahdeksi 2 opintoviikon kurssiksi (osa 1 ja osa 2). Kurssikoodiin ja nimeen lisätään osan tunnus. Tehdään aluksi uusi puolikaskurssi insert into kurssi select kurssikoodi*10+1, nimi, osa 1,2, luennoija) from kurssi where opintoviikot=4; ja muutetaan sitten vanha kurssi toiseksi puolikkaaksi update kurssi set kurssikoodi=kurssikoodi*10+2, nimi= nimi, osa 2 opintoviikot=2 where opintoviikot=4; Rivien poisto Poistolauseella delete from <taulu> [where <valintaehto>] poistetaan taulusta kaikki valintaehdon täyttävät rivit. Jos valintaehto puuttuu poistetaan kaikki taulun rivit. Poistot, jotka rikkovat eheysehtoja epäonnistuvat. Esimerkki Poistetaan harjoitusryhmät, joihin ei ole ilmoittautunut ketään. delete from harjoitusryhma where (kurssikoodi, ryhmanro) not in (select kurssikoodi, ryhmanro from ilmoittautuminen); 85

20 Jos ylläpito-operaatioita suoritetaan sarjassa useita on pidettävä huolta siitä, että ne suoritetaan oikeassa järjestyksessä tai niissä olevat valintaehdot ovat sellaiset, ettei synny odottamattomia sivuvaikutuksia sen takia, että sarjassa aiemmin ollut operaatio muuttaa sarjassa myöhemmin olevan operaation kohdejoukkoa joksikin muuksi kuin on ajateltu.. Esimerkki: Tarkastellaan taulua bonustili(asiakasnimi,..., saldo,...) Olkoon siellä rivit asiakasnimi saldo Roope Ankka 3100 Aku Ankka 2000 Ines Ankka 2700 Hannu Hanhi 2900 Tilille pitäisi antaa bonus siten, että saldoa korotetaan 10% jos saldo on 3000 tai alle ja 15% jos saldo on yli Jos bonuksen maksu hoidetaan seuraavasti update bonustili set saldo=1.1*saldo where saldo<=3000; update bonustili set saldo=1.15*saldo where saldo>3000; olisi tulos asiakasnimi saldo Roope Ankka 3565 Aku Ankka

21 Ines Ankka 2970 Hannu Hanhi 3668 ja Hannu Hanhella olisi taas käynyt tuuri. Ongelma suoritusjärjestyksessä on se, että ensimmäinen päivitys voi muuttaa rivejä siten, että toisen päivityksen kohdejoukko muuttuu. Suoritettaessa muutokset oikeassa järjestyksessä update bonustili set saldo=1.15*saldo where saldo>3000; update bonustili set saldo=1.1*saldo where saldo<=3000; olisi tulos asiakasnimi saldo Roope Ankka 3565 Aku Ankka 2200 Ines Ankka 2970 Hannu Hanhi 3190 Rivien siirto ja kopiointi Joissakin tietokannanhallintajärjestelmissä on tarjolla mahdollisuus tallentaa kyselyn tulostaulu suoraan oikeaksi tauluksi create table tai create snapshot -komennoilla Esimerkiksi Oraclessa taulu voitaisiin luoda seuraavasti: create table ilmotilanne_09_20 as select * from ilmoittautuminen; Jos tämä suoritettaisiin se vastaisi nimeään ja sisältäisi kaikki luontihetkellään taulussa ilmoittautuminen olleet ilmoittautumiset. Ellei tietokannanhallintajärjestelmä tarjoa tällaisia mahdollisuuksia, on kopioinnit suoritettava insert-lauseiden avulla. 87

22 Rivien siirtäminen taulusta toiseen edellyttää sekä insert- että delete-lauseiden käyttöä. Esimerkki: Vanhojen ilmoittautumisten siirto historiatauluun. insert into ilmohistoria select * from ilmoittautumiset where ilm_aika< ; delete from ilmoittautumiset where ilm_aika< ; Näkymiin perustuva ylläpito Joissakin järjestelmissä on mahdollista kohdistaa ylläpito-operaatio myös näkymään. Kaikki näkymät eivät kuitenkaan tule kyseeseen ylläpidon kohteina. Ylläpito on mahdollista vain, jos jokaiselle näkymän riville löytyy yksikäsitteinen vastinrivi näkymän perustaulusta ja muutos näkymäriviin on yksikäsitteisesti muunnettavaksi muutokseksi sen vastinriviin. Yhteenvetotietoja tarjoavat näkymät eivät ole tällaisia. Eivät myöskään näkymät joiden sarakkeet on määritelty lausekkeiden avulla. Yleensä edellytetään, että kaikki ylläpidettävän näkymän rivit kuuluvat samaan tauluun ja taulun pääavain on mukana näkymässä. Lisäksi voidaan vaaditaan, että näkymän määrittely sisältää pelkästään valintarajoituksia. Aiemmin esilläolleista näkymistä oma_kurssi täyttää nämä vaatimukset samoin ilman union-operaatiota määritelty ilmo Tietokantatapahtumat Usein joudutaan jonkin tietokantamuutoksen aikaansaamiseksi suorittamaan useita tietokantaoperaatioita. Esimerkiksi haluttaessa suorittaa tilisiirto halutaan ottaa rahaa yhdeltä tililtä ja siirtää ne toiselle. On oleellista että kumpikin operaatio suoritetaan. 88

23 Esimerkki: Tarkastellaan taulua: tili(tilinumero,,saldo, ) update tili set saldo=saldo-500 where tilinumero=123456; update tili set saldo=saldo+500 where tilinumero=654321; siirtää 500 markkaa tililtä tilille On oleellista, että ei tehdä vain tililtäottoa tai tilillepanoa, vaan molemmat. On myös oleellista, että mikään ei ulkopuolinen operaatio, vaikka pankin vastuiden laskentaohjelma, ei pääse näkemään tilien saldoja siirto-operaation ollessa kesken. Tietokantatransaktiolla (tapahtumalla) tarkoitetaan yhtenä jakamattomana kokonaisuutena pidettävää tietokantaoperaatioiden joukkoa. Edellä mainittu tilisiirto on tällainen. Tietokannanhallintajärjestelmän tulisi taata, että transaktio suoritetaan joko kokonaan tai sitä ei suoriteta lainkaan, ulkopuoliset näkevät vain kokonaisuudessaan suoritettujen transaktioiden lopputulokset. Tietokantatransaktion tietokantaan tekemät muutokset ovat peruttavissa siihen asti kunnes järjestelmä sitoutuu transaktioon. Käyttäjä voi luottaa siihen, että tietokantamuutokset, joita on tehty sellaisen transaktion kuluessa, johon järjestelmä on sitoutunut, eivät peruunnu. Käyttäjän kannalta järjestelmän sitoutuminen transaktioon tarkoittaa sen onnistunutta loppuunvientiä. SQL:ssä transaktion päättyminen ilmaistaan commit-komennolla, jonka muoto on commit [work]. Commit-komento ilmoittaa että transaktio päättyy ja esittää järjestelmälle pyynnön sitoutua viemään transaktio päätökseen. Samalla se on ilmoitus siitä, että mahdolliset jatkossa tulevat operaatiot kuuluvat eri transaktioon. Transaktioon kuuluvat siis kahden commit-komennon välissä annetut operaatiot (kuva 23). Käyttäjä voi lopettaa transaktion myös antamalla perumispyynnön rollback [work] Perumispyyntö aikaansaa kaikkien edellisen commit:in jälkeen tehtyjen muutosten perumisen. 89

24 COMMIT Operaatio 1 Operaatio n transaktio COMMIT Kuva 23: Transaktio Esimerkki: Yritetään poistaa tyhjät harjoitusryhmät, oletetaan, että ilmoittautumisten viiteavaimeen liittyy on delete cascade -määre commit; select count(*) from harjoitusryhma; >> 150 << select count(*) from ilmoittautuminen; >> 3500 << delete from harjoitusryhma where ryhmanro is not null; select count(*) from ilmoittautuminen; >>0<< (:-?) select count(*) from harjoitusryhma; >>0<< =(:-o) OHO! rollback; select count(*) from ilmoittautuminen; >>3500<< Tietokantatransaktiot pitäisi tehdä lyhytkestoisiksi ja vähän resursseja varaaviksi. Esimerkiksi varautuminen peruutukseen vie resursseja koska muutosta edeltänyttä tilaa on säilytettävä commit-operaation asti. 90

25 4.3.5 Tietokannan käyttö ohjelmasta SQL-pohjaiset relaatiotietokannat tarjoavat käyttäjille yleensä jonkinlaisen suorakäyttöliittymän, jonka kautta käyttäjä voi antaa SQL operaatioita. Suorakäyttö soveltuu hyvin satunnaisiin kyselyihin, erilaisiin ennakoimattomiin nopeaa ratkaisua vaativiin tilanteisiin, yksinkertaisiin ylläpito tehtäviin, kannanhallintatehtäviin ja yksinkertaiseen raportointiin. SQL on kielenä varsin suppea ja sen toiminnallisuus keskittyy tietokantaoperaatioihin. Se ei sisällä raporttien muotoiluun tarvittavia käskyjä. Se ei sisällä tavanomaisten ohjelmointikielten kontrollirakenteita. Vaikka sen eräänä tavoitteena on ollut helppokäyttöisyys, se on kuitenkin suhteellisen vaikea käyttää muihin kuin aivan yksinkertaisiin kyselyihin. Lisäksi se edellyttää käyttäjältä perehtymistä tietokannan teknisiin rakenteisiin kuten taulu- ja sarakenimiin. Tästä syystä sitä ei voi pitää loppukäyttäjän vaan pikemminkin atk-ammattilaisen työvälineenä. Markkinoilla on tarjolla SQL:ää helppokäyttöisempiä nimenomaan loppukäyttäjille suunnattuja välineitä kyselyjen laadintaan. Useimmat näistä perustuvat Query-by- Example -malliin. Qyery-by-Example (QBE) kehitettiin myös IBM:n tutkimuslaboratoriossa 70-luvun lopulla. 4 Perusideana kielessä on laatia kysely käyttäen hyväksi graafisia taulupohjia, Näihin kirjataan maskien avulla tulostusvalinnat, valintaehdot ja taulujen väliset kytkennät. Tämä kyselymalli on pohjana mm. Paradox:issa, Delphissä, ja Microsoft Access:issa. Kuvassa 24 on pieni esimerkki QBE-tyylisestä kyselystä.. QBE on SQL:ää helppokäyttöisempi satunnaisiin yksinkertaisiin raportointitarpeisiin. Monimutkaiset yhteenvetokyselyt ovat silläkin hankalia eikä QBE-tyyppisten kielten ilmaisuvoima näissä usein edes yllä SQL:n tasolle. 4 Zloof: Query by Example, National Computinc Conference, AFIPS,44,

26 Kurssi Koodi Nimi Opintoviikot Luennoija Java-ohjelmointi _kuka Opettaja Opetunnus Nimi Puhelin Tyohuone _kuka <Print> Kuva 24: QBE- kysely : Java-ohjelmointi kurssin luennoijan nimi. Pääasiallisesti tietokantaa käytetään kuitenkin sovellusohjelmien kautta. Nämä tarjoavat käyttäjilleen paremman käyttöliittymän, paremmin muotoillut raportit, tarpeiden mukaan kehitetyt palvelut, jotka eivät edellytä käyttäjiltä tietokannan rakenteen yksityiskohtaista tuntemista. Sovellusohjelmat laaditaan jollakin ohjelmointikielellä. Yleiskäyttöiset ohjelmointikielet kuten Ada, C, C++, Cobol, Pascal, jne. eivät kuitenkaan peruskokoonpanossaan tarjoa mitään välineistöä tietokannan käsittelyyn. Sovellusten toteutusvälinevaihtoehdoiksi muodostuvat tällöin joko erityisen tietokantaohjelmointikielen käyttö tai yleisohjelmointikielen täydentäminen tietokantakäytön mahdollistavilla lisämoduuleilla. Yleisohjelmointikielten laajentamiseen on tarjolla kaksi tekniikkaa sulautettu SQL ja tietokantaliittymäkirjaston käyttö (database application programming interface, database API) Sulautettu SQL Sulautetussa SQL:ssä SQL-lauseita voidaan kirjoittaa ohjelmointikielen lauseiden lomaan, esimerkiksi C-kielen lauseiden joukkoon. Jotta SQL-lauseet kyettäisiin erottamaan varsinaisista ohjelmointikielen lauseista (isäntäkielen lauseista), ne merkitään kuuluviksi SQL:ään. Standardin mukaan tämä tapahtuu siten, että SQL- 92

27 osuutta edeltää aina EXEC SQL alkumerkki. SQL-osuuden loppumerkki on kielikohtainen. Ohjelmointikielen normaali kääntäjä, esimerkiksi C-kääntäjä ei osaa käsitellä ohjelmaan upotettuja SQL-lauseita. Niiden käsittelyyn tarvitaan esikääntäjä. Esikääntäjä prosessoi ohjelman ja muokkaa sen sellaiseen muotoon, että se voidaan edelleen kääntää konekielelle ohjelmointikielen normaalikääntäjällä. Käytännössä tämä tarkoittaa sitä, että kieleen upotetut SQL-lauseet korvataan tietokantaliittymän toteuttavan ohjelmakirjaston funktioiden kutsuilla. Näissä kutsuissa kyselyt ja muut tietokantaoperaatiopyynnöt on muunnettu funktioiden parametreiksi. Liittymäkirjastojen funktiot ovat tietokannanhallintajärjestelmäkohtaisia samoin kuin esikääntäjätkin. Esimerkiksi Oraclen C-esikääntäjä ProC tuottaa tuloksenaan C-kielisen ohjelman, joka käyttää Oracle Call Level Interface kirjastoa. Tapa, jolla SQL-lauseet upotetaan isäntäkieleen on kuitenkin standardoitu. Joten periaatteessa on mahdollista vaihtaa tietokannanhallintajärjestelmää kääntämällä ohjelma uudelleen uuden järjestelmän esikääntäjällä. Alla on esimerkki Pascal funktiosta, johon on upotettu SQL-lauseita. function keskipalkka(dept:integer):real; var integer n; integer psumma; #include SQLCA.INC /* sql:n käyttämiä tietorakenteita*/ EXEC SQL BEGIN DECLARE SECTION var palkka: integer; os: integer; EXEC SQL END DECLARE SECTION begin EXEC SQL DECLARE pal CURSOR FOR SELECT salary from employee where department= :os; n:=0; psumma:=0; os:= dept; EXEC SQL open pal; EXEC SQL fetch pal into :palkka; while sqlcode = 0 do begin psumma := psumma + palkka; n := n + 1; EXEC SQL fetch pal into :palkka; end; EXEC SQL close pal; if n > 0 then keskipalkka := psumma/n else keskipalkka := 0; end; 93

28 Tietokannan käyttö liittymäkirjaston avulla Tietokannanhallintajärjestelmän liittymäkirjasto muodostuu joukosta funktioita. Näitä käyttämällä ohjelmoija voi kohdistaa operaatioita tietokantaan. Liittymäkirjasto on sama kirjasto, jonka tuntijoiden kutsuiksi esikääntäjä kääntää ohjelmaan upotetut SQL-lauseet. Kuten edellä jo todettiin jokaisella tietokannanhallintajärjestelmällä on oma liittymäkirjastonsa. Järjestelmäkohtaisten kirjastojen lisäksi on olemassa myös korkeamman tason abstraktioon perustuvia liittymäkirjastoja. Tällaisia ovat esimerkiksi ODBC (Microsoft Open Database Connection) ja JDBC (for Java) kirjastot. Nämä kirjastot tarjoavat tietokannanhallintajärjestelmästä riippumattoman ohjelmointirajapinnan tietokantapalvelujen käyttöön. Tietyn tietokannanhallintajärjestelmän käyttö ODBC tai JDBC rajapinnan kautta edellyttää kuitenkin tietonnanhallintajärjestelmäkohtaisen ajurin (driver) hankintaa. Esimerkiksi Oracle-kannan käyttäminen edellyttää Oracleajuria. Ajurin tehtävänä on muuntaa abstraktin kirjastorajapinnan kautta tapahtuvat kutsut tietokannanhallintajärjestelmän käyttämään muotoon. Esimerkkinä liittymäkirjastoihin perustuvasta tietokantaohjelmoinnista tarkastellaan seuraavassa tietokantasovelluksen toteutusta JDBC-kirjaston avulla. JDBC on Java ohjelmointikieleen liittyvä tietokantaohjelmointirajapinta. Käytöltään se on samankaltainen ODBC-rajapinnan kanssa. Kun ODBC muodostuu joukosta C-tyyppisiä funktioita, muodostuu JDBC Java-luokista ja niiden tarjoamista palveluista. Luokkarakenteen ansiosta rajapinta vaikuttaa ODBC:tä selkeämmältä ja jäsentyneemmältä. 94

29 JDBC:n perusteet 5 JDBC on Java luokkakirjasto tietokannan käsittelyyn. Kirjaston keskeiset perusluokat ovat: DriverManager, Connection, Statement, PreparedStatement ja ResultSet. DriverManager Pystyäkseen käyttämään hyväksi tietyn tietokannanhallintajärjestelmän palveluita on ohjelman käytettävä järjestelmäkohtaista ajuria. Ajuri, jos sellainen on olemassa, on saatavissa tietokannanhallintajärjestelmän toimittajalta. Ilman ajuria tietokantaa ei pysty käyttämään. Myös ODBC:ssä täytyy kiinnittää käytettävä ajuri, mutta tämä tehdään yleensä ohjelman ulkopuolisen hallintatyökalun avulla. Tämä hoidetaan DriverManager luokan avulla Luokkapalvelulla registerdriver ohjelma kytketään käyttämään tiettyä tietokanta-ajuria. Ajurin käyttö tapahtuu JDBC-kirjaston sisäisesti eikä ohjelmoijan tarvitse kytkemisen jälkeen olla sen kanssa missään tekemisissä. Ajurin kytkemiseen käytetään DriverManager luokan luokkapalvelua registerdriver. Myös ODBC:ssä täytyy kiinnittää käytettävä ajuri, mutta tämä tehdään yleensä ohjelman ulkopuolisen hallintatyökalun avulla. 5 Hyvä esitys JDBC:stä löytyy lähteestä: Hamilton G., Cattell R, Fisher M.: JDBC Database Access with Java -A tutorial and Annodated Reference, Addison-Wesley,

30 Esimerkki: Otetaan käyttöön Oracle-ajuri DriverManager.registerDriver((Driver)Class.forName ("oracle.jdbc.driver.oracledriver").newinstance()); Connection DriverManager tarjoaa myös palvelun yhteyden luomiseksi tietokantaan. Tietokantayhteydellä (database connection) hallitaan ohjelman ja tietokannan välistä vuorovaikutusta. Yhteyden olemassaolo on edellytys kaikkien tietokantaan kohdistuvien operaatioiden suoritukselle. Tietokannan suorakäytössä yhteys vastaa tietokantaistuntoa, joka alkaa käyttäjän sisäänkirjoittautumisesta ja päättyy istunnon lopetukseen. Samoin tietokantayhteys alkaa yhteyden perustamisella. JDBC:ssä yhteyden perustaminen tarkoittaa Connection-luokan olion luomista. Yhteys tulisi lopettaa kun sitä ei enää tarvita. Yhteyden lopettaminen vapauttaa siihen kytkettyjä resursseja sekä ohjelman itsensä että tietokantapalvelimen puolelta. JDBC:ssä yhteys suljetaan Connection-olion close-palvelulla. Yhteyden perustaminen vie jonkin verran aikaa ja haluttaessa nopeaa palvelua voidaan joskus jättää yhteyksiä roikkumaan, jotta niitä voitaisiin nopeasti ottaa uudelleen käyttöön. Ohjelmalla voi olla käytössään useita tietokantayhteyksiä jopa eri tietokantoihin. Samaan tietokantaan tarvitaan yleensä vain yksi yhteys. Esimerkki: Yhteyden perustaminen Oracle-kantaan. Connection con = DriverManager.getConnection( "jdbc:oracle:thin:@dbserver.helsinki.fi:1521:kanta1, "info", "expert"); Tässä luodaan Oraclen thin-ajuriin perustuva yhteys koneessa dbserver.helsinki.fi olevaan porttiin 1521 kytkettyyn tietokantaan, jonka tunnus on kanta1. 6 Yhteys perustuu käyttäjätunnukseen info, jonka salasana on expert. 6 dbserver.helsinki.fi nimistä tietokonetta ei ole oikeasti olemassa. 96

31 Statement Tietokantaan kohdistuvat operaatiot suoritetaan JDBC:ssä Statement-olioiden avulla. Statement-olio tarjoaa suoritusympäristön operaatioille. Se tarjoaa mm. palvelut executequery kyselyiden suoritukseen ja executeupdate tulostaulua tuottamattomien operaatioiden suoritukseen Tietokantaoperaatio suoritetaan jonkin tietokantayhteyden puitteissa. Tämä kytkentä on JDBC:ssä hoidettu siten, että Statement-olio luodaan käyttäen Connection-olion palvelua createstatement. Nimestään huolimatta Statement-olio ei sisällä suoritettavaa tietokantaoperaatiota vaan tämä annetaan operaation executequery tai executeupdate parametrina. Täten jokaista operaatiota varten ei tarvitse välttämättä luoda omaa Statement-oliota. Yhden Statement-olion puitteissa voi kuitenkin olla vain yksi aktiivinen operaatio kerrallaan. Operaatiota suoritettaessa havaitusta virhetilanteesta, esimerkiksi kyselyssä olevasta syntaksivirheestä, ilmoitetaan aiheuttamalla SQLException-tyyppinen poikkeus. Poikkeus pitää sisällään tilaindikaattorin SQLState, jonka arvo ilmaisee minkä tyyppisestä virheestä on kyse. Samoin poikkeuksen kautta saadaan tietoon tietokantaohjelmiston generoima virhekoodi ja virheilmoitus. Tietokantaoperaation yhteydessä pitää aina varautua SQLException poikkeukseen. ResultSet JDBC:ssä kyselyn vastausta käsitellään ResultSet olion palveluilla. Nämä mahdollistavat vastausjoukon rivien käsittelyn rivi kerrallaan. ResultSet tarjoaa myös palveluita metatiedon saamiseksi vastauksesta. Metatietoa ovat esimerkiksi vastauksen sarakkeiden lukumäärä, sarakkeiden nimet ja tietotyypit. ResultSet toteuttaa toimintoja, jotka sulautetussa SQL:ssä liittyvät käsitteeseen kursori (cursor). Vastausjoukko (ResultSet-olio) syntyy tuloksena Statement-olion palvelun executequery suorituksesta, siis kyselyn suorittamisesta. Suoritettava kysely annetaan palvelun parametrina. 97

32 Esimerkki Statement stmt= con.createstatement(); ResultSet rs= stmt.executequery( "select nimi, puhelin from opettaja"); Tässä esimerkissä luodaan yhteyden con avulla kyselyn suoritusympäristöksi Statement-olio stmt. Sitä käyttäen suoritetaan kysely, joka tulos on käsiteltävissä Resultset olion rs palvelujen avulla. Vastausta käsitellään rivi kerrallaan. Keskeinen palvelu on Boolen funktio next(). Se ottaa aktiiviseksi vastausriviksi vastausjoukossa seuraavana olevan rivin. Jos tällainen rivi on olemassa eli vastausjoukoa ei ole käsitelty loppuun next() palauttaa arvon true, muuten se palauttaa arvon false. Ensimmäisellä kutsukerralla se aktivoi vastausjoukon ensimmäisen rivin. Sulautetun SQL:n fetch-lause toimii samalla tavoin kursorin käsittelyssä. JDBC:n versiossa 1.0 ei ole mitään tapaa siirtyä vastausjoukossa taaksepäin, joten vastaus voidaan ohjelmassa käydä läpi vain kertaalleen alusta loppuun.. Versio 2.0 sisältää palveluita myös taaksepäin, sekä vastausjoukon alkuun ja loppuun siirtymiseksi. Aktiivisen rivin käsittelyyn ResultSet-oliot tarjoavat tietotyyppikohtaisia get-funktioita sarakkeen arvon saamiseksi ohjelman käyttöön. Vastausriviin sisältyvän merkkijonon sisältö saadaan selville funktiolla getstring, kokonaisluvun funktiolla getint, päiväyksen funktiolla getdate, jne. Näistä funktioista on käytettävissä kaksi muotoa, joista toinen hakee arvon sarakenimen perusteella ja toinen vastaussarakkeen järjestysnumeron perusteella. Esimerkki: String nimi = rs.getstring("nimi"); // sarakkeen nimi arvo String puh = rs.getstring(2); // toisen sarakkeen arvo get-funktiot osaavat jossakin määrin tehdä tietotyyppikonversioita. Esimerkiksi getstring-funktiolla voi hakea kaiken tyyppisiä tietoja. 98

33 SQL-kyselyt voivat tuottaa tyhjäarvoja sisältäviä vastauksia. get-funktiot käsittelevät näitä eri tavoin. Olioarvoiset funktiot kuten getstring palauttavat Javan nullosoittimen Tietotyyppiarvoiset funktiot sensijaan palauttavat, jonkin todellisen arvon. Esimerkiksi getint palauttaa arvon 0. ResultSet-oliolla on palvelu wasnull, jolla voi tarvittaessa tutkia oliko palautettu arvo tyhjäarvo. Kyselyn vastaus käsitellään vastaussilmukassa, jossa funktiolla next() haetaan vuoroon seuraava vastausrivi kunnes kaikki on käsitelty. Esimerkki: Puhelinluettelo (ei kovin tyylikäs layout) try { Statement stmt= con.createstatement(); ResultSet rs= stmt.executequery( "select nimi, puhelin from henkilo"+ " order by nimi"); while (rs.next()) { System.out.println(getString(1)+", " getstring(2)); } } catch (SQLException ex) { do something}; Operaatiot, jotka eivät tuota tulosrivejä suoritetaan funktiolla executeupdate; Esimerkki: stmt.executeupdate( update opettaja + set palkka= palkka where opetunnus=\ HLAINE\ ); korjaa hieman opettajan palkkaa. PreparedStatement Tietokannan käsittelyssä tarvitaan usein kyselyitä, joissa rakenteeltaan samanlainen kysely suoritetaan toistuvasti, mutta esimerkiksi hakuehdossa vaihtuu vakioarvo. 99

34 Tällainen kysely voidaan parametroida niin, että tuo muuttuva vakio annetaan kyselyn parametrina. Parametroidut kyselyt valmistellaan käyttöä varten. Valmistelussa ne käännetään valmiiksi odottamaan suoritusta vaihtuvin parametriarvoin. JDBC tarjoaa parametroitujen kyselyjen käsittelyyn luokan PreparedStatement, joka on luokan Statement aliluokka. Parametroitu SQL-operaatio annetaan parametrina PreparedStatement-olion luontifunktiolle Connection.prepareStatement. Operaatiossa parametri ilmaistaan kysymysmerkillä (?) Esimerkki: PreparedStatement pst = con.preparestatement( "select nimi, puhelin "+ "from opettaja"+ "where nimi like?" ); Tällainen kysely voisi sisältyä vaikkapa puhelinnumeroiden hakujärjestelmään, jossa käyttäjä voi antaa toistuvasti hakukriteerejä, joiden perusteella puhelinnumeroa haetaan. Parametrina tässä on nimeen liittyvä maski. Ennen parametroidun kyselyn suoritusta on parametreille kiinnitettävä arvot. PreparedStatement tarjoaa tietotyyppikohtaiset set-funktiot parametriarvojen kiinnittämiseksi, esimerkiksi setint, setstring, setdate, jne. Set-funktioilla on kaksi parametria: parametrin järjestysnumero ja arvo joka parametrille annetaan. Esimerkiksi pst.setstring(1,"möttö%"); kiinnittää arvon 'Möttö%' parameroidun kyselyn pst ensimmäiselle parametrille, joten kysely suoritettaessa vastaa kyselyä select nimi, puhelin from opettaja where nimi like Möttö% Parametroitu operaatio suoritetaan käyttäen palvelua executequery tai executeupdate. Nyt vain näiden yhteydessä ei anneta mitään parametria. 100

35 Esimerkkiohjelma: // Esimerkkiohjelma Tietokantojen perusteet // CLASSPATH polkumäärittelyssä täytyy olla polku hakemistoon // josta tietokanta ajuri löytyy import java.sql.*; import java.io.*; public class Esimerkki { public static void main(string args[]) throws Exception { String url = jdbc:oracle:thin:@dbserver.helsinki.fi:1521:kanta1"; Connection con; String query = "select KOODI, KURSSI.NIMI AS KNI, OPINTOVIIKOT, "+ "OPETTAJA.NIMI AS OPNI " + "from KURSSI, OPETTAJA " + "where KURSSI.LUENNOIJA= OPETTAJA.OPETUNNUS " + "order by OPETTAJA.NIMI, KURSSI.NIMI"; Statement stmt; try { DriverManager.registerDriver((Driver)Class.forName ("oracle.jdbc.driver.oracledriver").newinstance()); } catch(java.lang.classnotfoundexception e) { // Ilmoitetaan siitä, ettei yhteyttä saada aikaan. System.err.print("ClassNotFoundException: "); System.err.println(e.getMessage()); } try { // Luodaan yhteys kurssin käyttäjätunnuksella con = DriverManager.getConnection( url, "info", "expert"); // Luodaan tietokantaoperaation suoritusympäristö stmt = con.createstatement(); // Muuttujaa ope käytetään pitämään kirjaa edellisestä // opettajasta. Tällä kontrolloidaan opettajan nimen // tulostusta. String ope =" "; // Tulostetaan otsake System.out.println("OPETUSTEHTÄVÄT:"); System.out.println(); // Suoritetaan kysely ResultSet rs = stmt.executequery(query); // Käydään läpi vastausrivit while (rs.next()) { // Eristetään opettajan nimi, huom. alias-nimen // käyttö String opn = rs.getstring("opni"); // Jos opettaja vaihtuu tulostetaan tyhjä rivi ja // opettajan nimi, muuten vain kurssin tiedot if (ope.equals(opn)) { System.out.println(" " + rs.getstring("kni")+" ("+rs.getint("koodi")+")"); } else { 101

36 } } System.out.println(); ope= opn; System.out.println(ope); System.out.println(" " + rs.getstring("kni")+" ("+rs.getint("koodi")+")"); } } //end-while // Suljetaan 'kursori' - vapautetan vastausjoukon // käsittelyyn kiinnitetyt resurssit. Tälle // vastausjoukolle ei enää voi tehdä mitään, vaikka //sitä suljettaisikaan. rs.close(); stmt.close(); // Suljetaan tietokantayhteys. Yhteys suljetaan vasta // siinä vaiheessa kun ohjelmassa ei enää käsitellä // kantaa. con.close(); } catch(sqlexception ex) { // Imoitetaan virheestä System.err.print("SQLException: "); System.err.println(ex.getMessage()); } Tietokantaohjelmointikielet Tietokantaohjelmointikielissä tietokanta ja sen käsittelyyn tarvittavat rakenteet ovat peruskäsitteenä mukana kielessä. Nämä kielet tarjoavat normaalin ohjelmointikielen kontrollirakenteet ja lisäksi tietokantaliittymän sulautettua SQL:ää miellyttävämmin. Kielten pohjana on jokin yleisohjelmointikieli. Esimerkiksi tietokantaproseduurien laadintaan tarkoitetun standardikielen pohjana on Ada-ohjelmointikieli. Tietokantaohjelmointikieli esiintyy usein osana sovelluskehitintä. (application generator). Esimerkkinä tietokantaohjelmointikielestä voidaan tarkastella Oraclen PL/SQL kieltä. Se pohjautuu Ada ohjelmointikieleen, mutta on toiminnallisuudeltaan hieman Adaa suppeampi. Kieltä voi käyttää Oraclen SQL-forms ja Developer kehitinten yhteydessä sekä tietokantaproseduurien laadinnassa. Tietokannan käsittelyyn PL/SQL tarjoaa sulautetun SQL:n käsitteet sisäänrakennettuina SQL:n tietotyyppit ohjelmointikielen tietotyyppeinä 102

37 Oraclen SQL:n funktiot ohjelmointikielen funktioina Tietokannan kaavion hyväksikäytön ohjelman tietorakenteiden määrittelyssä helpot vastauksen käsittelysilmukat for rivi in kysely loop... end loop tietokantavirheet esimääriteltyinä poikkeuksina. Perustietorakenteiltaan kieli on kuitenkin Adaa köyhempi. Kieli ei myöskään käy yleisohjelmointikieleksi koska siitä puuttuvat kokonaan esimerkiksi näytön- ja tiedostojen käsittelyyn liittyvät operaatiot. 103

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

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot DO NOT PRINT THIS DOCUMENT SQL:ssä joukko yhteenvetofunktioita (aggregate function, koostefunktio) AVG keskiarvo MIN pienin arvo (minimi) MAX suurin arvo (maksimi) SUM summa COUNT lukumäärä Yhteenvetofunktioita

Lisätiedot

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 DO NOT PRINT THIS DOCUMENT SQL:ssä joukko yhteenvetofunktioita (aggregate function, koostefunktio) AVG keskiarvo MIN pienin arvo (minimi) MAX suurin arvo (maksimi) SUM summa COUNT lukumäärä Yhteenvetofunktioita

Lisätiedot

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 DO NOT PRINT THIS DOCUMENT SQL:ssä joukko yhteenvetofunktioita (aggregate function, koostefunktio) AVG keskiarvo MIN pienin arvo (minimi) MAX suurin arvo (maksimi) SUM summa COUNT lukumäärä Yhteenvetofunktioita

Lisätiedot

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 Tietokantaohjelmointi 23.2.2000. Harri Laine 1. SQL:n käyttö ohjelmissa

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 Tietokantaohjelmointi 23.2.2000. Harri Laine 1. SQL:n käyttö ohjelmissa SQL:n käyttö ohjelmissa Tietokannan käyttö ohjelmasta Miksi vuorovaikutteinen käyttö ei riitä? kielen hallinta: maallikot? yhdistetään yleiskielen ja tietokantakielen edut, mm.» monimutkaisempi laskenta»

Lisätiedot

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

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot) SQL sisältää operaatiot tietokannan sisällön muodostamiseen ja ylläpitoon: insert - uusien rivien vienti tauluun delete - rivien poisto update - rivien muutos 1 Insert lauseella on kaksi muotoa: insert

Lisätiedot

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

SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito SQL sisältää operaatiot tietokannan sisällön muodostamiseen ja ylläpitoon: insert - uusien rivien vienti tauluun delete - rivien poisto update - rivien muutos Insert lauseella on kaksi muotoa: insert into

Lisätiedot

Kyselyn yleisrakenne:

Kyselyn yleisrakenne: 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

Lisätiedot

EXEC SQL BEGIN DECLARE SECTION

EXEC SQL BEGIN DECLARE SECTION Tietokantaohjelmointi Tietokantaa käytetään harvoin suoraan kyselyliittymän kautta Tyypillisesti käyttö tapahtuu sovellusohjelman kautta Sovellusohjelmaa laadittaessa vaihtoehtoja tietokantakäsitettelyn

Lisätiedot

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

select tulostietomäärittely from taulukkeet [where valintaehdot] [group by ryhmitystekijät] [having ryhmärajoitteet] [order by järjestysperusta] 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

Lisätiedot

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

Harjoitustehtävä 1. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. SQL kysely Harjoitustehtävä 1 Puutarha Puutarhatunnus omistaja sijainti Vastuualue puutarhatunnus aluenumero maaperä, kosteus valaistus sijainti vastuutonttu Tonttu Tonttutunnus Istutus istutuspäivä paikka_alueella

Lisätiedot

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC) HAAGA-HELIA ICT1TA006: Ohjelmointi 1 /5 Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC) (Lähteet: Oracle java jdbc Tutorial, Arvo Lipitsäinen: Tietokannan käsittely JDBC:n

Lisätiedot

RDBMS - Yhteyskäytännöt

RDBMS - Yhteyskäytännöt HAAGA-HELIA Heti-09 1 (11) RDBMS - Yhteyskäytännöt Johdanto... 2 Upotettu SQL... 3 ESQL esimerkki... 4 ODBC... 5 Visual Basic ja ADO... 6 JAVA ja JDBC... 7 JDBC esimerkki... 8 Oracle ja JDBC... 9 Connection

Lisätiedot

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

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-valintaehto. SQL-valintaehto. Opettajien nimet: Opiskelijoiden pääaineet DO NOT PRINT THIS DOCUMENT SQL -valintaehto CREATE TABLE opettaja ( opetunnus varchar(12) NOT NULL, nimi varchar(40) NOT NULL, puhelin varchar(12), tyohuone varchar(12), PRIMARY KEY (opetunnus) ) ; CREATE

Lisätiedot

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

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 SQL- osa Harri Laine 1. SQL-valintaehto. SQL-valintaehto. DO NOT PRINTTHIS DOCUMENT SQL -valintaehto SQL-valintaehto CREATE TABLE opettaja ( opetunnus varchar(12) NOT NULL, nimi varchar(40) NOT NULL, puhelin varchar(12), tyohuone varchar(12), PRIMARY KEY (opetunnus)

Lisätiedot

Java ja tietokannan käsittely (JDBC)

Java ja tietokannan käsittely (JDBC) Java ja tietokannan käsittely (JDBC) Javan tietokannan käsittely luokat (java.sql.*) Yhteys tietokantaan Tietokannan yhteyden sulkeminen Tiedon haku tietokannasta Tiedon päivitys tietokantaan Transaktio

Lisätiedot

Tietokannat II -kurssin harjoitustyö

Tietokannat II -kurssin harjoitustyö Tietokannat II -kurssin harjoitustyö Jyri Lehtonen (72039), jkoleh@utu.fi Azad Hajipour (72187), azhaji@utu.fi 10.6.2007 Sisältö 1. Tietokannan kuvaus... 1 1.1 Tietokannan rakenne... 1 1.2 Relaatiokaava

Lisätiedot

SELECT-lauseen perusmuoto

SELECT-lauseen perusmuoto SQL: Tiedonhaku SELECT-lauseen perusmuoto SELECT FROM WHERE ; määrittää ne sarakkeet, joiden halutaan näkyvän kyselyn vastauksessa sisältää

Lisätiedot

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

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet A271117, Tietokannat Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: Leon Atkinson: core MySQL Ari Hovi: SQL-opas TTY:n tietokantojen perusteet-kurssin

Lisätiedot

SQL - STRUCTURED QUERY LANGUAGE

SQL - STRUCTURED QUERY LANGUAGE SQL Peruskomentoja SQL - STRUCTURED QUERY LANGUAGE SQL on tietokantojen käsittelyyn kehitetty kieli Esimerkkejä kielellä hoidettavistaa toiminnoista: Tietokannan rakenteen määrittely ja muuttaminen Kyselyt

Lisätiedot

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32 HSMT Tietokannoista Ville Leppänen HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32 Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h)

Lisätiedot

6 WWW-tietokantasovellukset 103. 7 Relaatiotietokannan suunnittelusta 134

6 WWW-tietokantasovellukset 103. 7 Relaatiotietokannan suunnittelusta 134 5.5 Tietokannan käyttö ohjelmasta 91 5.5.1 Sulautettu SQL 92 5.5.2 Tietokannan käyttö liittymäkirjaston avulla 94 5.5.3 JDBC:n perusteet 95 5.5.4 Tietokantaohjelmointikielet 102 6 WWW-tietokantasovellukset

Lisätiedot

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

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences TIEDONHALLINTA - SYKSY 2011 Kurssikoodi: Saapumisryhmä: Luento 11 TU00AA48-2002 TU10S1E Hannu Markkanen 22.11.2011 9/10/12 Helsinki Metropolia University of Applied Sciences 1 Indeksit Indeksit Taulun

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

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

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2005 SQL-perusteet. Harri Laine 1. SQL tietokantakieli tietokantakieli :llä voidaan... määritellä ja muokata tietokantaa ja sen käyttöoikeuksia virittää tietokannan talletusrakenteita hakea tietoa tietokannasta näytölle tai tiedostoon sovellusohjelman käyttöön

Lisätiedot

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

määritellä ja muokata tietokantaa ja sen käyttöoikeuksia virittää tietokannan talletusrakenteita hakea tietoa tietokannasta SQL tietokantakieli SQL:llä voidaan... määritellä ja muokata tietokantaa ja sen käyttöoikeuksia virittää tietokannan talletusrakenteita hakea tietoa tietokannasta näytölle tai tiedostoon sovellusohjelman

Lisätiedot

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

määritellä ja muokata tietokantaa ja sen käyttöoikeuksia virittää tietokannan talletusrakenteita hakea tietoa tietokannasta SQL tietokantakieli SQL:llä voidaan... määritellä ja muokata tietokantaa ja sen käyttöoikeuksia virittää tietokannan talletusrakenteita hakea tietoa tietokannasta näytölle tai tiedostoon sovellusohjelman

Lisätiedot

käännös käännösvaiheessa tarkasettaan linkitys

käännös käännösvaiheessa tarkasettaan linkitys Upotettu SQL Ohjelmoitaessa 3GL kielillä, käytetään relaatiotietokantaa yleensä esikääntäjien avulla. Tietokannan valmistaja toimittaa funktiokirjaston, jota esikääntäjän avulla hyödynnetään. Ongelmaksi

Lisätiedot

SQL-kielen perusteet. Tietokantojen perusteet 4.4.2008

SQL-kielen perusteet. Tietokantojen perusteet 4.4.2008 SQL-kielen perusteet Tietokantojen perusteet 4.4.2008 Sisällys Tietokannan käsittely ja ylläpito SQL tiedonmäärittelykielenä Tietokantataulun ja sen osien määrittely SQL tiedonkäsittelykielenä SQL-kysely

Lisätiedot

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

HAAGA-HELIA Heti-09 1 (12) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Näkymät HAAGA-HELIA Heti-09 1 (12) Näkymät Näkymät... 2 Eri tyyppisiä relaatioita... 2 Taulu - Tallennettu relaatio... 2 Tulosrelaatio - Kyselyn tulos... 2 Näkymä - Virtuaalirelaatio... 2 Näkymien määrittely...

Lisätiedot

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

Helsingin yliopisto/tktl Tietokantojen perusteet, s 2007 SQL:n perusteet. Harri Laine 1. SQL tietokantakieli. SQL tietokantakieli SQL tietokantakieli Relaatiomalliin pohjautuvat tietokannat Perustana relaatiomallin mukainen näkemys tietojen rakenteesta ja käsittelystä Tietokantojen rakenteen määrittelyssä ja käsittelymahdollisuuksissa

Lisätiedot

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 S2008 Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT Jouni Huotari S2008 2 Proseduurit Ohjelmamoduuleita, jotka voidaan tallettaa tietokantaan (DBMS:n tietohakemistoon)

Lisätiedot

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

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009 PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009 PROSEDUURIT Ohjelmamoduuleita, jotka voidaan tallettaa tietokantaan (DBMS:n tietohakemistoon)

Lisätiedot

4.3.4 SQL kyselyt... 45

4.3.4 SQL kyselyt... 45 TIETOKANTOJEN PERUSTEET, OPETUSMONISTE OSA 3 SQL- KYSELYT Harri Laine 4.3.4 SQL kyselyt... 45 4.3.4.1 Tulostietomäärittely... 46 4.3.4.2 Viittaukset tauluihin ja sarakkeisiin... 49 4.3.4.3 Toistuvat tulosrivit...

Lisätiedot

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

TIEDONHALLINTA - SYKSY Luento 8. Saapumisryhmä: Pasi Ranne /9/13 Helsinki Metropolia University of Applied Sciences 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

Lisätiedot

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

TIEDONHALLINTA - SYKSY Luento 10. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences TIEDONHALLINTA - SYKSY 2011 Kurssikoodi: Saapumisryhmä: Luento 10 TU00AA48-2002 TU10S1E Hannu Markkanen 14.-15.11.2011 9/10/12 Helsinki Metropolia University of Applied Sciences 1 SQL: Monen taulun kyselyt

Lisätiedot

TIETOKANTOJEN PERUSTEET MARKKU SUNI

TIETOKANTOJEN PERUSTEET MARKKU SUNI TIETOKANTOJEN PERUSTEET MARKKU SUNI SQL - KIELI TIETOJEN MUOKKAUS MARKKU SUNI Tarkastellaan tauluissa olevien tietojen muokkausta muokkauskäskyjä: INSERT UPDATE DELETE Kysymys kuuluu: Voiko tietoja muokata

Lisätiedot

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

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen Esimerkki: Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen Luo tietokanta Koulu. Tietokantaan lisätään 3 taulua. Kurssit-taulu: kurssiid not null primary key INTEGER aineid not

Lisätiedot

Tietokanta (database)

Tietokanta (database) Tietokanta Tietokanta (database) jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja 1 Tiedosto Ohjelmointikielissä apumuistiin tallennettuja tietoja käsitellään

Lisätiedot

HELIA 1 (14) Outi Virkki Tiedonhallinta

HELIA 1 (14) Outi Virkki Tiedonhallinta HELIA 1 (14) Luento Näkymät... 2 Relaatiotyypit... 2 Taulu - Tallennettu relaatio... 3 Näkymä - Virtuaalirelaatio... 3 Tulosrelaatio - Kyselyn tulos... 3 Otetaulut - Tauluun tallennettu kyselyn tulos...

Lisätiedot

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

Kirjasto Relaatiotietokannat Kevät 2001. Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina Kirjasto Kevät 2001 Auvinen Annemari Niemi Anu Harjoitustyö 7.4.2001 Sisällysluettelo 1. Yleiskuvaus... 3 2. Vaatimukset... 3 2.1. Toiminnalliset... 3 2.1.1. Sisäänkirjautuminen... 3 2.1.2. Nimikkeiden

Lisätiedot

HELIA 1 (11) Outi Virkki Tiedonhallinta 4.11.2000

HELIA 1 (11) Outi Virkki Tiedonhallinta 4.11.2000 HELIA 1 (11) Access 1 ACCESS...2 Yleistä...2 Access-tietokanta...3 Perusobjektit...3 Taulu...5 Kysely...7 Lomake...9 Raportti...10 Makro...11 Moduli...11 HELIA 2 (11) ACCESS Yleistä Relaatiotietokantatyyppinen

Lisätiedot

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu 13.11.2000

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu 13.11.2000 HELIA 1 (15) Luento 2.7 Toiminnallisuutta tietokantaan... 2 Deklaratiivinen eheysvalvonta... 2 Proseduraalinen eheysvalvonta... 3 Eheysvalvonnan suunnittelusta... 4 Sääntöjen määrittely... 4 Toteutusvaihtoehdot...

Lisätiedot

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

Helsingin yliopisto Tietojenkäsittelytieteen laitos (H.Laine) Tietokantojen perusteet. Liitteenä: Tiivistelmä SQL-syntaksista Helsingin yliopisto Tietojenkäsittelytieteen laitos 26.2.2014 (H.Laine) Tietokantojen perusteet Liitteenä: Tiivistelmä SQL-syntaksista Kirjoita jokaiseen erilliseen vastausarkkiin kurssin nimi, tenttipäivä,

Lisätiedot

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys Tällä kurssilla on tutustuttu ohjelmistojen mallintamiseen oliomenetelmiä ja UML:ää käyttäen Samaan aikaan järjestetyllä kurssilla on käsitelty

Lisätiedot

Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Johdanto & yleistä Harri Laine 1. Tietokanta. Tiedosto

Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Johdanto & yleistä Harri Laine 1. Tietokanta. Tiedosto Tietokanta Tiedosto Tietokanta (database) jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja Ohjelmointikielissä apumuistiin tallennettuja tietoja käsitellään

Lisätiedot

Ohjelmoinnin perusteet, syksy 2006

Ohjelmoinnin perusteet, syksy 2006 Ohjelmoinnin perusteet, syksy 2006 Esimerkkivastaukset 1. harjoituksiin. Alkuperäiset esimerkkivastaukset laati Jari Suominen. Vastauksia muokkasi Jukka Stenlund. 1. Esitä seuraavan algoritmin tila jokaisen

Lisätiedot

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

HELIA TIKO-05 1 (17) ICT03D Tieto ja tiedon varastointi Räty, Virkki HELIA TIKO-05 1 (17) SQL / DML 4 Alikyselyt...2 Joukko-operaatiot...7 Yhdiste, unioni...8 Leikkaus...9 Erotus... 10 Tietokannan datan muokkaus... 11 Lisäys... 11 Yhden rivin lisääminen... 12 Useamman rivin

Lisätiedot

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

HELIA 1 (14) Outi Virkki Tiedonhallinta

HELIA 1 (14) Outi Virkki Tiedonhallinta HELIA 1 (14) Luento SQL... 2 Historiaa... 2 Standardit... 3 Käyttö... 4 DDL... 5 Tietokantaobjektien määrittely... 5 SQL:n tietotyypit... 6 Eheyssääntöjen määrittely... 9 Indeksin määrittely... 11 Syntaksikuvaukset...

Lisätiedot

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja

jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja Tietokanta Tietokanta (database) jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja mikä tahansa tietokokoelma? --> erityispiirteitä Tietokanta vs. tiedosto 1

Lisätiedot

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

Helsingin yliopisto, Tietojenkäsittelytieteen laitos Tietokantojen perusteet, , H.Laine Helsingin yliopisto, Tietojenkäsittelytieteen laitos Tietokantojen perusteet, 3.5.2007, H.Laine Kirjoita kuhunkin erilliseen vastauspaperiin kurssin nimi, oma nimesi, syntymäaikasi ja nimikirjoituksesi

Lisätiedot

TIETOKANTOJEN PERUSTEET OSIO 14 MARKKU SUNI

TIETOKANTOJEN PERUSTEET OSIO 14 MARKKU SUNI TIETOKANTOJEN PERUSTEET OSIO 14 MARKKU SUNI Tavoite: Suunnitella käyttäjien tarvitsemat turvallisuusmekanismit ja säännöt. Toisin sanoen: tehdä tietokannasta turvallinen ja luotettava. Muistutus: Tietokanta

Lisätiedot

5. HelloWorld-ohjelma 5.1

5. HelloWorld-ohjelma 5.1 5. HelloWorld-ohjelma 5.1 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi. Tavukoodin suorittaminen. Virheiden korjaaminen 5.2

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 28.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 28.2.2011 1 / 46 Ohjelmointiprojektin vaiheet 1. Määrittely 2. Ohjelman suunnittelu (ohjelman rakenne ja ohjelman

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot

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

SQL. ! nykystandardi SQL3 eli SQL'99. ! CREATE TABLE, ALTER TABLE ja DROP TABLE. ! CREATE VIEW ja DROP VIEW. ! CREATE INDEX ja DROP INDEX SQL - perusteet SQL - yleistä Esa Salmikangas InMics SE Oy versio 16.6.2003 SQL - perusteet 1 SQL - perusteet 2 SQL Structured Query Language SQL on tietokantojen käsittelyyn kehitetty kieli yleisimmät

Lisätiedot

5 SQL TIETOKANTAKIELI...33

5 SQL TIETOKANTAKIELI...33 5 SQL TIETOKANTAKIELI...33 5.1 SQL TIETOKANTA...34 5.2 SQL:N KIRJOITUSASU...36 5.3 SQL MÄÄRITTELYKIELENÄ...36 5.3.1 Käyttäjät...36 5.3.2 Oikeudet...37 5.3.3 Kaaviot ja taulut...38 5.3.4 Taulujen rakenteen

Lisätiedot

Relaation tyhjyyden testaaminen

Relaation tyhjyyden testaaminen Tulostaulun tyhjyyden testaaminen Luettele ne asiakkaat, joilla on sekä talletus että laina -konttorissa. (Leikkaus!) useita mahdollisia toteutustapoja INTERSECT sisäkysely sisäkysely + tulostaulun tyhjyyden

Lisätiedot

11. Javan toistorakenteet 11.1

11. Javan toistorakenteet 11.1 11. Javan toistorakenteet 11.1 Sisällys Laskuri- ja lippumuuttujat. Sisäkkäiset silmukat. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

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

Kirjoita jokaiseen erilliseen vastauspaperiin kurssin nimi, tenttipäivä, oma nimesi (selkeästi), opiskelijanumerosi ja nimikirjoituksesi Helsingin yliopisto, Tietojenkäsittelytieteen laitos Tietokantojen perusteet, kurssikoe 29.2.2012 (vastauksia) Liitteenä on tiivistelmä SQL-syntaksista Kirjoita jokaiseen erilliseen vastauspaperiin kurssin

Lisätiedot

SQL:N PERUSTEET MARKKU SUNI

SQL:N PERUSTEET MARKKU SUNI SQL:N PERUSTEET MARKKU SUNI Relaatiomallisen tietokannan käsittely Tietojen saanti, talletus ja päivitys tapahtuu SQL-kielellä Yhtä operaatiota sanotaan kyselyksi (query) Kyselyjä voidaan laittaa peräkkäin

Lisätiedot

Relaatioalgebra. Kyselyt:

Relaatioalgebra. Kyselyt: Relaatioalgebra Relaatiomalliin liittyy malli tietokannan käsittelystä Tietokannasta pitää pystyä hakemaan tietoa ja toisaalta tietokantaa on ylläpidettävä Tietokannan käsittelyn malli relaatioalgebra

Lisätiedot

Tietokannat II -kurssin harjoitustyö

Tietokannat II -kurssin harjoitustyö Tietokannat II -kurssin harjoitustyö Olli Opiskelija (123), olli.opiskelija@foo.fi Maija Mallioppilas (321), maija.mallioppilas@foo.fi 13.3. 2007 1 Sisältö 1 Tietokannan kuvaus 3 1.1 Tietokannan rakenne..................................

Lisätiedot

CSE-A1200 Tietokannat

CSE-A1200 Tietokannat CSE-A1200 Tietokannat 29.3.2016 CSE-A1200 Tietokannat 29.3.2016 1 / 40 Oppimistavoitteet: tämän luennon jälkeen Tiedät, miten tietokannan relaatioiden (taulujen) määrittelyt kirjoitetaan SQL:llä. Osaat

Lisätiedot

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

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisätiedot

1. Omat operaatiot 1.1

1. Omat operaatiot 1.1 1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Opettajana Mika Sorsa, mika.sorsa@koudata.fi, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

Opettajana Mika Sorsa, mika.sorsa@koudata.fi, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija Opettajana Mika Sorsa, mika.sorsa@koudata.fi, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija Opintojaksolla: keskitytään relaatiotietokantojen teoriaan ja toimintaan SQL-kieli kyselykielenä

Lisätiedot

Tutoriaaliläsnäoloista

Tutoriaaliläsnäoloista Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4 Sisällys 12. Näppäimistöltä lukeminen Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä.. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner-luokka.

Lisätiedot

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

Kyselyt: Lähtökohtana joukko lukuja Laskukaava kertoo miten luvuista lasketaan tulos soveltamalla laskentaoperaatioita Relaatioalgebra Relaatiomalliin liittyy malli tietokannan käsittelystä Tietokannasta pitää pystyä hakemaan tietoa ja toisaalta tietokantaa on ylläpidettävä Tietokannan käsittelyn malli relaatioalgebra

Lisätiedot

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

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

Relaatioalgebra. Relaatioalgebra. Relaatioalgebra. Relaatioalgebra - erotus (set difference) Kyselyt: Relaatiomalliin liittyy malli tietokannan käsittelystä Tietokannasta pitää pystyä hakemaan tietoa ja toisaalta tietokantaa on ylläpidettävä Tietokannan käsittelyn malli relaatioalgebra määrittelee operaatiot,

Lisätiedot

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); Tietokannat SQL-peruskomentojen pikaopas CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi); INSERT INTO table VALUES(val1,val2,... ); Lisää tauluun

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 1.3.2010 1 / 36 Monikko Monikko (engl. tuple) muistuttaa listaa, mutta monikon sisältöä ei voi muuttaa sen jälkeen,

Lisätiedot

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

Kirjoita kuhunkin erilliseen vastauspaperiin kurssin nimi, tentin päiväys, oma nimesi, syntymäaikasi ja nimikirjoituksesi. Helsingin yliopisto, Tietojenkäsittelytieteen laitos Tietokantojen perusteet, kurssikoe 4.3.2015, H. Laine Tehtävien mukana jaetaan sql-syntaksin tiivistelmä. Kirjoita kuhunkin erilliseen vastauspaperiin

Lisätiedot

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

Tällä viikolla. Kotitehtävien läpikäynti Aloitetaan Pelifirman tietovaraston suunnittelu Jatketaan SQL-harjoituksia Tällä viikolla Kotitehtävien läpikäynti Aloitetaan Pelifirman tietovaraston suunnittelu Jatketaan SQL-harjoituksia 1.) Mainitse tietokonepelistä (kuvitteellisesta tai todellisesta) esimerkkitilanteita,

Lisätiedot

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

HELIA TIKO-05 1 (22) ICT03D Tieto ja tiedon varastointi E.Räty, O.Virkki 9.3.2010 HELIA TIKO-05 1 (22) SQL SQL... 2 Historiaa... 2 Standardit... 3 Käyttö... 4 Sql-komentojen kirjoittaminen... 5 DDL... 7 Tietokantaobjektien määrittely... 7 SQL:n tietotyypit... 8 Eheyssääntöjen määrittely...

Lisätiedot

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

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

Lisätiedot

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

Koostefunktiot. Viisi standardifunktiota: Esim. montako henkilöä on henkilo-taulussa: Funktiot Koostefunktiot Viisi standardifunktiota: AVG -- keskiarvo MIN -- pienin arvo MAX -- suurin arvo SUM -- summa COUNT-- lukumäärä Esim. montako henkilöä on henkilo-taulussa: SELECT Count(*) AS Lkm

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla

Lisätiedot

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

TIEDONHALLINNAN PERUSTEET - SYKSY 2013 TIEDONHALLINNAN PERUSTEET - SYKSY 2013 Kurssikoodi: Saapumisryhmä: Luento 5 XX00AA79-3013 TU12S2 Pasi Ranne 11.9.2013 11/9/13 Helsinki Metropolia University of Applied Sciences 1 Tietokannan normalisoinnin

Lisätiedot

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

Hakukyselyt: SELECT * FROM taulu WHERE sarake1 = Malli Nimi [WHERE sarake1 LIKE M% ] [WHERE BETWEEN ehto1 AND ehto2] [WHERE sarake1 IN/= (alikysely)] Tällä viikolla Kertaus SQL-asioista jatketaan SQL-tekstifuntio-harjoituksia tehdään pelifirman tietokannasta ER-malli MySQL:llä, tarkastellaan mallin toimivuutta ja korjataan, jos korjattavaa löytyy, tehdään

Lisätiedot

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas Tiedonhallinnan perusteet Viikko 1 Jukka Lähetkangas Kurssilla käytävät asiat Tietokantojen toimintafilosofian ja -tekniikan perusteet Tiedonsäilönnän vaihtoehdot Tietokantojen suunnitteleminen internetiä

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö Tekijät: Eemeli Honkonen Joni Metsälä Työ palautettu: SISÄLLYSLUETTELO: 1 SEMINAARITYÖN KUVAUS... 3 2 TIETOKANTA... 3 2.1 MITÄ TIETOKANNAT SITTEN OVAT?... 3

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

8. Näppäimistöltä lukeminen 8.1

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

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

4.3.1 SQL tietokanta SQL:n kirjoitusasu SQL määrittelykielenä... 36 TIETOKANTOJEN PERUSTEET, OPETUSMONISTE OSA 2 SQL- TIETOKANNAN RAKENNE JA MÄÄRITTELYT Harri Laine 4.3 SQL TIETOKANTAKIELI... 33 4.3.1 SQL tietokanta... 34 4.3.2 SQL:n kirjoitusasu... 36 4.3.3 SQL määrittelykielenä...

Lisätiedot

12. Näppäimistöltä lukeminen 12.1

12. Näppäimistöltä lukeminen 12.1 12. Näppäimistöltä lukeminen 12.1 Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit.

Lisätiedot

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 81122P (4 ov.) 30.5.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan

Lisätiedot

Pedacode Pikaopas. Tietokantaa hyödyntävän sovelluksen luominen

Pedacode Pikaopas. Tietokantaa hyödyntävän sovelluksen luominen Pedacode Pikaopas Tietokantaa hyödyntävän sovelluksen luominen Pikaoppaan sisältö Pikaoppaassa kuvataan, Netbeans-työkalulla luodaan uusi yksinkertainen Java DB -tietokantaa hyödyntävä sovellus. Opas kattaa

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

HOJ Haja-aiheita. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10

HOJ Haja-aiheita. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10 HOJ Haja-aiheita Ville Leppänen HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10 Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h)

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien

Lisätiedot