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

Samankaltaiset tiedostot
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);

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

SQL - STRUCTURED QUERY LANGUAGE

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

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

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

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

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

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

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

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

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

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

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

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

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

HELIA 1 (14) Outi Virkki Tiedonhallinta

SQLite selvitysraportti. Juha Veijonen, Ari Laukkanen, Matti Eronen. Maaliskuu 2010

CSE-A1200 Tietokannat

HELIA 1 (14) Outi Virkki Tiedonhallinta

Liitokset - haut useaan tauluun

Written by Administrator Monday, 05 September :14 - Last Updated Thursday, 23 February :36

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Tietokannat II -kurssin harjoitustyö

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

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

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

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

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

CSE-A1200 Tietokannat

Tuotteiden tiedot: Lisää uuden tuotteen tiedot. Muuta tai poista tuotteen tiedot. Selaa kaikkien tuotteiden tietoja.

SELVITYSRAPORTTI LABRA-VERKON MYSQL:n JA PHP:n KÄYTTÖÖNOTOSTA. Jarkko Kähkönen

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

TIETOKANTOJEN PERUSTEET OSIO 11 MARKKU SUNI

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

Tietokannat II -kurssin harjoitustyö

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

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

Ohjelmoinnin perusteet Y Python

Kuva 7.2 vastaustaulu harjoitukseen 7.2

T Testiraportti TR-3. ETL-työkalu

TIETOKANTOJEN PERUSTEET MARKKU SUNI

OUTER JOIN se vanha kunnon kaveri

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

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

Sisäänkirjaus Uloskirjaus. Yritystieto

Luento 2: Tiedostot ja tiedon varastointi

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

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

Asennusohje. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

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

Ohjelmoinnin perusteet Y Python

Kyselyn yleisrakenne:

MySQL ja PostgreSQL Seminaarityö

Ohjelmoinnin perusteet Y Python

Yhdistäminen. Tietolähteen luominen. Word-taulukko. Joukkokirje, osoitetarrat Työvälineohjelmistot 1(5)

SELECT-lauseen perusmuoto

Ohjelmoinnin perusteet Y Python

Kon Konepajojen tuotannonohjaus: ILOG CPLEX Studion käyttö

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

Elisa Kassa - Tuotetietojen tuonti järjestelmään (Import products)

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

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

Asennusohje. Sahara-ryhmä. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Office_365_loppukäyttäjän ohje Esa Väistö

FinFamily Installation and importing data ( ) FinFamily Asennus / Installation

LINUX-HARJOITUS, MYSQL

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

Opintopiiritehtävä 3: Verkkohuutokauppa

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

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

SQL:N PERUSTEET MARKKU SUNI

ETL-DEMO. Esimerkki ETL-kuvauskielen käyttöstä

Ryhmäkirjeen hyödyntäminen

ECDL Tietokannat. Copyright 2015 ECDL Foundation ECDL Tietokannat Sivu 1 / 7

Valitse ruudun yläosassa oleva painike Download Scilab.

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

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

Johdatus Ohjelmointiin

GALERIE EXHIBITIONS (13) 1 2 EXHIBITIONS 2

DXL Library ja DXL-kielen olemus. Pekka Mäkinen SoftQA Oy http/

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

Ohjelmoinnin peruskurssi Y1

Denormalisointia turvallisesti. Ougf syysseminaari Pörssitalo Helsinki Timo Raitalaakso

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

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

OpenOffice.org Base 3.1.0

CSE-A1200 Tietokannat

TIETOKANNAT JOHDANTO

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

CSE-A1200 Tietokannat

Ohjelmoinnin perusteet Y Python

HELIA 1 (11) Outi Virkki Tiedonhallinta

OpeOodi Opiskelijalistojen tulostaminen, opiskelijoiden hallinta ja sähköpostin lähettäminen

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

HELIA 1 (13) Outi Virkki Tietokantasuunnittelu

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

Transkriptio:

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 uuden tietueen. INSERT INTO opiskelijat VALUES(968625, Iina, Koillinen ); SELECT col1,col2,... FROM tablename WHERE... ; Hakee annetut ehdot täyttäviä tietueita. SELECT etunimi,sukunimi FROM opiskelijat WHERE opnumero=968625; DELETE FROM table WHERE... ; Kuten SELECT, poistaa haetut tietueet. DELETE FROM opiskelijat WHERE opnumero=968625; DROP TABLE table; Poistaa annetun taulun ja kaikki siinä olevat tietueet! DROP TABLE opiskelijat; Hyödyllinen resurssi SQL-komentojen opetteluun: http://www.w3schools.com/sql/sql_quickref.asp 1

Tietokanta Tietokanta on tietorakenne, johon varastoidaan tietoa järjestettyinä tietueina. Tietokannat ovat tärkeä osa esimerkiksi liiketoiminnan, Internet-palvelujen ja monien jäsenrekisterien hallinnointia. Tietokanta on usein tehokkain tapa varastoida ja käsitellä automaattisesti suuria määriä keskenään samankaltaisista alkioista koostuvaa dataa. Tällä kurssilla käsitellyt tietokannat ovat SQL-relaatiotietokantoja. Tällainen tietokanta koostuu tauluista ja tietueista. Taululla on sarakkeita, jotka vastaavat jotakin tietotyyppiä, kuten opiskelijan etunimeä tai opiskelijanumeroa. Tietue on taulun rivi: se kuvaa kokonaisuutta, kuten opiskelijaa, jolla on omat arvot kussakin sarakkeessa. Taulut siis määrittelevät tietokannan rakenteen, tietueet sisällön. Tietokannan tauluja voi usein tulkita samalla tavalla kuin hyvin järjestettyä Excel-taulukkoa. Ilmeisin ero on, että Excelin kaltaisessa taulukkolaskentaohjelmassa tietojen järjestys on käyttäjän varassa - oikeassa tietokannassa esimerkiksi taulukon ulkopuolelta ei voi valita summittaisesti tyhjää ruutua ja kirjoittaa muistiinpanoja. Tietokanta on Exceliä tehokkaampi ja soveltuu paremmin tietokoneohjelmien ja palveluiden käyttöön. Excel lienee kätevämpi ihmiskäyttäjän toimistotyössä. opnumero etunimi sukunimi koulutusohjelma 801811 Tatu Haavisto TIK 719193 Konstantin Pieninkeroinen ARK 341704 Heli Rautjärvi EST Taulukko 1: Opiskelijatietokannan taulu opiskelijat 2

SQLite Browser -ohje Tällä kurssilla tietokantoja ohjataan SQLite Database Browser 2.2 a -ohjelmalla (SQLite Browser). Ohjelma on pakattu harjoitustehtäväkansioon, alikansioon sqlitebrowser. Sitä ei tarvitse asentaa, vaan ohjelman saa käyntiin suoraan ajamalla tiedoston sqlitestudio2-win.exe. Ohjelman voi myös ladata Internetistä osoitteesta http://sourceforge.net/projects/sqlitedbrowser/ Kun käynnistät SQLite Browserin, avaa ensimmäiseksi käsiteltävä tietokantatiedosto työkaluriviltä (Open an existing database file). SQLite Browserilla voi myös luoda uusia tietokantoja (Create a new database file). 3

Kun avaat tietokannan, ohjelma näyttää oletuksena ensimmäistä välilehteä, Database Structure. Tässä tilassa voit selata tietokantarakennetta, eli tietokannan tauluja: Minkä nimisiä tauluja tietokannassa on ja mitä sarakkeita tauluissa on. Tämä siis kertoo missä muodossa tiedot on esitetty. Kuvan tietokannassa on kaksi taulua: opiskelijat ja tapahtumat. 4

Toisella välilehdellä, Browse Data, voit katsella tietokannan sisältöä, eli kussakin taulussa olevia tietueita. Voit vaihtaa katseltavaa taulua välilehden yläosassa Table-valikosta. Tässä näkymässä voit myös lisätä, muokata ja poistaa tietueita. Tällä kurssilla tietokantamuutokset tehdään kuitenkin pääasiassa manuaalisesti kolmannessa välilehdessä. 5

Kolmannen välilehden, Execute SQL, kautta pääset syöttämään komentoja SQL-kielellä. SQL eli Structured Query Language on tietokantojen käsittelyyn tarkoitettu ohjelmointikieli, josta kerrotaan enemmän seuraavassa luvussa. Kirjoita haluamasi komento SQL string -kenttään ja paina Execute query. Data returned -kenttä näyttää tiedot, jotka komennolla löydettiin (jos teit hakukomennon). Jos komennossa on virheitä, virheilmoitukset tulevat Error message -kenttään. 6

SQL SQL, Structured Query Language, on ohjelmointikieli, jota käytetään hallinnoimaan tietokantoja. SQL:llä ei ole käytännöllistä, tai edes mahdollista, ratkaista yleisiä ohjelmointiongelmia. Peruskomentoja SQL:ssä ovat taulujen ja tietueiden lisääminen, haku ja poisto. Taulu Uuden taulun luominen tapahtuu komennolla CREATE TABLE table(col1 type1,col2 type2,... );. Luodaan esimerkkinä uusi taulu henkilökunta : >> CREATE TABLE henkilökunta >> (id INTEGER PRIMARY KEY, >> etunimi TEXT, >> sukunimi TEXT, >> työnimike TEXT, >> ikä INTEGER, >> huomautukset TEXT >> ); id etunimi sukunimi työnimike ikä huomautukset - - - - - - - - - - - - - - - - - - - - - - - - Taulukko 2: Uusi henkilökuntataulu Kokonaisen taulun voi poistaa komennolla DROP TABLE table;. Ole varovainen, sillä taulun poistaminen tuhoaa kaikki tauluun säilötyt tietueet. Mitään varmistuskysymyksiä SQL:ssä ei ole - kun komento on annettu, se suoritetaan. Tietue Tauluun lisätään uusi tietue komennolla INSERT INTO table VALUES(value1, value2,... );. Lisätään henkilökuntatauluun esimerkillinen luennoitsija: >> INSERT INTO henkilökunta >> VALUES(1,"Anna","Malli","Luennoitsija",35,"Esimerkillinen"); 7

Jos halutaan antaa arvo vain osaan kentistä, täytyy komennossa erikseen luetella, mihin sarakkeisiin tietoa ollaan laittamassa: >> INSERT INTO henkilökunta (etunimi,sukunimi,työnimike,ikä) >> VALUES("Vistor","Aalto","Tutkimusapulainen",20); id etunimi sukunimi työnimike ikä huomautukset 1 Anna Malli Luennoitsija 35 Esimerkillinen 2 Vistor Aalto Tutkimusapulainen 20 NULL - - - - - - - - - - - - Taulukko 3: Lisäysten jälkeen taulu näyttää tältä Tyhjäksi jätetyn kentän arvoksi tulee NULL eli tyhjä. Poikkeuksena on primääriavainkenttä, esimerkissämme id. Se on kenttä, johon tietokanta valitsee itse uniikin arvon, ellei sitä erikseen ole annettu. Avaimista kerrotaan myöhemmässä luvussa enemmän. Haku Tietokannasta hakeminen tehdään komennolla SELECT col1,col2,... FROM table WHERE conditions... ; Esimerkiksi seuraava komento hakisi kaikki tiedot henkilökuntataulusta: >> SELECT * FROM henkilökunta; 1 Anna Malli Luennoitsija 35 Esimerkillinen 2 Vistor Aalto Tutkimusapulainen 20 NULL SELECT FROM -lauseen ehdollisuuteen käyvät useimmat tavalliset operaattorit kuten =,< ja >. Luonnollisesti ehtoja voi myös yhdistellä AND ja OR -rakenteilla. Muista, että tekstivertailussa täytyy käyttää lainausmerkkejä. >> SELECT sukunimi,etunimi FROM henkilökunta WHERE ikä<25; Aalto Vistor >> SELECT sukunimi,etunimi FROM henkilökunta WHERE etunimi="anna"; Malli Anna >> SELECT * FROM henkilökunta WHERE sukunimi=työnimike; 8

Tekstin osaa voi hakea LIKE-rakenteella: >> SELECT * FROM henkilökunta WHERE sukunimi LIKE "v%"; 2 Vistor Aalto Tutkimusapulainen 20 NULL Haku toimii niin, että prosenttimerkin kohdalle voi korvata mitä vain. Annettu esimerkki siis hakee kaikki sukunimet, jotka alkavat v-kirjaimella. Hakukomennon perään voi liittää myös ORDER BY column käskyn, jolloin rivit palautuvat tietyn sarakkeen mukaan järjestettyinä. Poistokomento on hyvin samankaltainen kuin haku: DELETE FROM table WHERE conditions... ;. Muista aina olla varovainen poistoja kirjoittaessasi! Avain Tietokantataulussa primääriavain on tietotyyppi, joka on varmasti uniikki kaikilla taulun tietueilla. Esimerkiksi opiskelijanumero voisi toimia opiskelijataulun primääriavaimena. Usein tietokantataululla on kuitenkin primääriavaimena oma sisäinen id, joka ei tarkoita tietokannan ulkopuolella mitään. Avaimien avulla voidaan toteuttaa relaatioita tietueiden välillä. Taulun sarake voidaan määrätä niin, että sen arvot vastaavat saman tai toisen taulun saraketta, yleensä primääriavainta. id etunimi sukunimi työnimike esimies 1 Tuuli Metso 10 NULL 2 Anna Malli 11 1 3 Vistor Aalto 12 2 4 Tiina Niminen 12 2 - - - - - id nimi selvennys 10 Rehtori Johtaa ja suunnittelee 11 Luennoitsija Luennoi, opettaa, selittää 12 Tutkimusapulainen Tekee mitä käsketään Taulukko 4: Henkilökuntataulun työnimike on vierasavain, joka viittaa työnimike-tauluun Esimerkissämme Vistor ja Tiina ovat molemmat tutkimusapulaisia. Voisimme kirjoittaa työnimikkeen ja selvennyksen suoraan henkilökunta-taulun 9

alkioihin, mutta silloin joutuisimme kirjoittamaan työnimikkeen tiedot jokaiseen alkioon erikseen. Tehdään sen sijaan työnimike-sarakkeesta vierasavain: sarakkeeseen taltioidaan nyt numero, joka vastaa toisessa taulussa olevaa idsaraketta. Kun halutaan selvittää Vistorin työnimike, haetaan henkilökunta-taulusta Vistorin tietue ja luetaan työnimike = 10. Sitten haetaan työnimike-taulusta sellaista alkioita, jonka id = 10. Todetaan, että löydetyn tietueen nimi on tutkimusapulainen. Vastaavasti vierasavain voi viitata samaankin tauluun: esimies-sarakkeessa on luku, joka viittaa id-sarakkeeseen. Nähdään esimerkiksi, että Annan esimies = 1. Tietue, jossa id = 1, on Tuuli Metso. Tuuli on siis Annan esimies. Haku vierasavaimella Hakurakenteeseen voidaan lisätä lause JOIN. Sen avulla hakukoneelle kerrotaan, mitkä kentät vastaavat toisiaan. Koska nyt käsitellään eri taulujen sarakkeita, on paras kirjoittaa jokaisen sarakkeen nimen eteen myös taulun nimi: table.column. Näin hakukone varmasti tietää, minkä taulun sarakkeesta puhutaan. >> SELECT henkilökunta.etunimi,henkilökunta.sukunimi >> FROM henkilökunta >> JOIN työnimike ON työnimike.id = henkilökunta.työnimike >> WHERE työnimike.nimi="tutkimusapulainen"; Vistor Aalto Tiina Niminen Samaan tauluun viitatessa tarvitaan alias JOIN table alias, jotta viittauksen alku- ja loppupää erottuvat toisistaan. >> SELECT * FROM henkilökunta >> JOIN henkilökunta pomo ON pomo.id = henkilökunta.esimies >> WHERE pomo.etunimi = "Tuuli"; 2 Anna Malli 11 1 1 Tuuli Metso 10 Koska moni tietue voi viitata samaan kohteeseen, haku voi palauttaa joskus saman tietueen monta kertaa. Haetaan esimerkiksi kaikki henkilöt, joilla on alaisia. >> SELECT pomo.etunimi,pomo.sukunimi FROM henkilökunta >> JOIN henkilökunta pomo ON pomo.id = henkilökunta.esimies; Tuuli Metso Anna Malli Anna Malli 10

Jos haluat, että kukin alkio voi esiintyä vain kerran, kirjoita SELECT DIS- TINCT. JOIN-lauseita voi olla samassa käskyssä useita. Osaatko sanoa, mitä tämä komento hakee? >> SELECT DISTINCT etunimi,sukunimi >> FROM opiskelijat >> JOIN koulutusohjelmat >> ON opiskelijat.koulutusohjelma=koulutusohjelmat.id >> JOIN tapahtumailmo >> ON opiskelijat.opnro=tapahtumailmo.opnro >> JOIN tapahtumat >> ON tapahtumailmo.tapahtuma=tapahtumat.id >> WHERE koulutusohjelmat.tunnus="tik" AND tapahtumat.nimi="sitsit"; Matematiikka SQL-haussa SQL-hakukomennot ovat näppärä tapa laskea yksinkertaista matematiikkaa tietokannan tiedoilla. nimi hinta varastossa kpl myyty kpl polkupyörä 200 3 2 jakoavain 15 4 30 vatupassi 8 19 12 porakone 90 2 6 Taulukko 5: Hinnasto-taulu kaupan tietokannassa Sarakkeen arvojen summan saa haettua funktiolla SUM(): >> SELECT SUM(myyty_kpl) FROM hinnasto; 50 Vastaavalla tavalla voidaan hakea keskiarvo AVG(), rivien määrä COUNT(), minimiarvo MIN() tai maksimiarvo MAX(). Funktiovalintaan voi tietenkin lisätä myös ehtoja tutulla WHERE-lauseella: >> SELECT COUNT(*) FROM hinnasto where hinta<100; 3 Eri kenttien tiedoilla voi myös tehdä laskutoimituksia: 11

>> SELECT nimi,varastossa_kpl+myyty_kpl FROM hinnasto; polkupyörä 5 jakoavain 34 vatupassi 31 porakone 8 Jos on tarpeen tehdä jotakin monimutkaisempaa, SQL-käskyjä voi kirjoittaa useamman sisäkkäin: >> SELECT nimi FROM hinnasto >> WHERE myyty_kpl>(select avg(myyty_kpl) FROM hinnasto); jakoavain SQL-kutsut Python-ohjelmassa Tietokantojen sisältöä käsitellään usein hyvin suurissa määrissä, tai muusta syystä manuaalinen komentojen kirjoittelu ei ole mahdollista. Esimerkiksi Internetin palveluissa halutaan usein muuttaa käyttäjän tietueeseen viimeisin kirjautumisaika joka kerta kun tämä kirjoittaa salasanansa. Tietokantakutsuja täytyy siis voida automatisoida. Tällä kurssilla käytetään tietokantayhteyttä Pythonin ja SQLite-tietokannan välillä. Käytämme tietokantayhteyteen Python-kirjastoa sqlite3. Luodaan aluksi tietokantayhteys komennolla sqlite3.connect(filename). Yhteyden voi muodostaa oman koneen lisäksi myös Internetin yli toisessa koneessa olevaan tietokantaan. import sqlite3 conn = sqlite3.connect("tietokanta.db") Lisäksi tarvitaan tietokantakursori. Kursori tarkoittaa tässä yhteydessä sitä osaa ohjelmastasi, joka antaa tietokannalle käskyjä ja vastaanottaa siltä tietoa. c = conn.cursor() Tehdään SQL-komentoja c.execute()-metodilla: c.execute("select * FROM myyntitapahtumat") c.execute( INSERT INTO myyntitapahtumat VALUES(1.45,"14:40","Energiapatukka") ) 12

Kuten on helppo huomata, SQL-käskyt ovat aivan samanlaisia kuin suoraan tietokantaan annettuna. Jos halutaan kirjoittaa komentoja, jotka eivät ole vakiomuotoisia (eli halutaan käyttää Python-muuttujia komennoissa), kannattaa käyttää kysymysmerkkikorvausta: arvo = 5.00 aika = "16:07" nimi = "Lautanen" c.execute( INSERT INTO myyntitapahtumat VALUES(?,?,?),[arvo,aika,nimi]) Toisena argumenttina annetussa listassa olevat arvot korvaavat kysymysmerkit siinä järjestyksessä kuin ne on listassa annettu. SQL-komento on ennen suoritusta tavallista Python-tekstiä, joten muuttujat voisi korvata Pythonin tutulla.format()-metodilla. Tähän liittyy kuitenkin tietoturvariskejä, joten on parasta opetella käyttämään yllä kuvattua rakennetta. Jotta tehdyt muutokset tallentuisivat lopuksi, on ohjelman lopuksi vielä tallennettava muutokset ja suljettava yhteys (siinä järjestyksessä!): conn.commit() conn.close() Kun esimerkkiohjelma ajetaan, tietokantaan tulee kaksi uutta myyntitapahtumaa: >> SELECT * FROM myyntitapahtumat; 1.45 14:40 Energiapatukka 5.0 16:07 Lautanen 13