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

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

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-kielen perusteet. Tietokantojen perusteet

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

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

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

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

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

Kyselyn yleisrakenne:

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

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

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

HELIA 1 (14) Outi Virkki Tiedonhallinta

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

5 SQL TIETOKANTAKIELI...33

4.3.4 SQL kyselyt... 45

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

SQL - STRUCTURED QUERY LANGUAGE

SELECT-lauseen perusmuoto

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

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

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

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

Tietokantakurssit / TKTL

3. Taulujen määrittely ja muuttaminen

Relaatioalgebra. Kyselyt:

3. TAULUJEN MÄÄRITTELY JA MUUTTAMINEN

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

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

HAAGA-HELIA TIKO-05 1 (19) ICT23a Tietokannan suunnittelu ja toteutus O.Virkki

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

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

HELIA 1 (12) Outi Virkki Tiedonhallinta

CSE-A1200 Tietokannat

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

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

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

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

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

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

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

HELIA 1 (14) Outi Virkki Tiedonhallinta

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

TIETOKANTOJEN PERUSTEET OSIO 11 MARKKU SUNI

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

HELIA 1 (11) Outi Virkki Tiedonhallinta

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

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

HAAGA-HELIA TIKO - Heti09 1 (22) ICT05 Tiedonhallinta ja Tietokannat E.Räty, O.Virkki, M.Laiho

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

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

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

Relaation tyhjyyden testaaminen

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

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

Relaatiomalli ja -tietokanta

2. Käsiteanalyysi ja relaatiomalli

4.1 Yleistä SQL:stä 4.2 SQL-lauseet 4.3 DML: datan hallinta 4.4 DDL: rakenteen määrittäminen 4.5 DCL: valtuuttaminen 4.6 TxCL: tapahtumanhallinta

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

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

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

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

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

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

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2005 relaatiomalli Harri Laine 1.

Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Relaatiomallin peruskäsitteet Harri Laine 1. Relaatiotietokannat DONOTP

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

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

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

HELIA 1 (17) Outi Virkki Tiedonhallinta

Liitokset - haut useaan tauluun

Tietomallit. Näkökulmat tietoon. Näkökulmat tietoon. Mitä malleja olisi tarjolla? Abstraktiotasot tiedon käsittelyssä

CSE-A1200 Tietokannat

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

On autoja, henkilöitä, Henkilöllä on nimi Autolla on omistaja, joka on henkilö. Taulu AUTO(rekno, malli) Taulu HENKILO(nimi, )

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

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

Lohdutus - tietokantadokumentti

SQL:N PERUSTEET MARKKU SUNI

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

Tietokannan eheysrajoitteet ja niiden määrittäminen SQL-kielellä

Yhdiste, leikkaus, erotus ym.

Yleinen SQL. Yleinen SQL. SQL:n kehitys

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

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

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

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

OpenOffice.org Base 3.1.0

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

D B. Tietokannan hallinta - kurssin tavoite. Kurssilla opitaan periaatteet. Edellytyksenä osallistumiselle on Tietokantojen perusteiden hallinta

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

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

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

HELIA 1 (19) Outi Virkki Tietokantasuunnittelu

Treenitietokannan suunnitteludokumentti

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Makrojen mystinen maailma lyhyt oppimäärä

HELIA 1 (13) Outi Virkki Tietokantasuunnittelu

Näkymät ja tiedon suojaus

Transkriptio:

SQL tietokantakieli Relaatiomalliin pohjautuvat tietokannat Perustana relaatiomallin mukainen näkemys tietojen rakenteesta ja käsittelystä Tietokantojen rakenteen määrittelyssä ja käsittelymahdollisuuksissa on paljon piirteitä, joihin abstrakti relaatiomalli ei ota kantaa, esim. Miten tietokantakaavio käytännössä esitetään Millaista tietoa tietokantaan voi tallettaa Miten esitetään tietokantaan kohdistuvat kyselyt Miten tietokantaa ylläpidetään Miten hallitaan tietokannan käyttöoikeuksia Miten hallitaan samanaikaisia tietojen käyttöä Miten kytketään ohjelmat tietokantaan Useita toteutuksia, joissa keskeisenä osana SQLtietokantakieli 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 käyttöön tehdä päivityksiä tietokantaan (muuttaa dataa) vuorovaikutteisesti sovellusohjelman kautta 1 2 SQL tietokantakieli SQL on standardoitu viimeisin standardi vuodelta 2003 murteita mutta kuitenkin yhteinen ydin Vaihto toteutuksesta toiseen ei välttämättä ole kuitenkaan yksinkertaista SQL-tietokanta SQL-tietokanta muodostuu yhden tai useamman kaavion (schema) määrittelemistä tauluista (table) Kullakin kaaviolla on omistaja (=käyttäjätili), joka omistaa myös kaavion määrittelemät taulut. Taulu muodostuu riveistä (row) Taulu vastaa relaatiomallin relaatiota, mutta sallii etenkin kyselyiden tuloksissa samanlaisen rivin toistumisen (duplikaatit) matemaattisesti monijoukko (multiset) 3 4 SQL SQL määrittelykieli (DDL) käyttäjät ja oikeudet tietokannan rakenne tietokantaproseduurit SQL Käsittelykieli (DML) kyselyt ylläpito-operaatiot SQL-kielessä avainsanat, taulu- käyttäjä- ja sarakenimet voi kirjoittaa joko suur- tai pienaakkosina eli select merkki SELECT MerKKI Tietokannassa olevan datan suhteen kieli on kuitenkin herkkä kirjainmuodolle eli Merkki= Ford on eri kuin Merkki= FORD joissain järjestelmissä tätä käyttäytymistä voidaan säätää asennusparametrein tai jopa kyselykohtaisesti. 5 6 Harri Laine 1

SQL tiedonmäärittelykieli Tiedonmäärittelykielessä on lauseita tietokantaelementtien {user, role, schema, table, domain, procedure, function, trigger, } luontiin, muokkaukseen ja poistoon create -luo alter - muokkaa drop - poistaa SQL taulun luonti create table määrittelee taulun rakenteen create table tablename ( column definition 1,., column definition n [, constraint 1, ] ) sarakemäärittely ::= column_name datatype [not null] [default value] [ column constraint ] 7 8 Taulun määrittely create table Ordered ( OrderId integer not null, WhenMade timestamp(0) not null, Customer integer not null, WayIssued varchar(20), PaymentBy varchar(20) not null, TotalPrice decimal(6,2) not null, constraint pk_order primary key (OrderId), constraint fk_ordercustomer foreign key (Customer) references Customer ); 9 Taulun määrittely Aikaleima, create table Ordered ( ei sekunnin osia OrderId integer not null, WhenMade timestamp(0) not null, Customer integer not null, vaihtuvamittainen WayIssued varchar(20), Merkkijono PaymentBy varchar(20) not null, Maksimipituus 20 TotalPrice decimal(6,2) not null, constraint pk_order primary key (OrderId), constraint fk_ordercustomer foreign key (Customer) references Customer ); desimaaliluku kokonaisluku kokonaispituus 6, desimaaliosa 2 10 Taulun määrittely create table Ordered ( pakollinen OrderId integer not null, tieto WhenMade timestamp(0) not null, Customer integer not null, WayIssued varchar(20), PaymentBy varchar(20) not null, TotalPrice decimal(6,2) not null, constraint pk_order primary key (OrderId), constraint fk_ordercustomer foreign key (Customer) references Customer ); avain viiteavain 11 SQL tiedonmäärittely Aikoja Date päiväys Time kellonaika Timestamp(x) päiväys ja kellonaika (sekunnin osat x desimaalin tarkkuudella) Interval aikaero Aikoja voidaan verrata ja niillä voi laskea Olkoon this_day date-tyyppinen, this_day + interval 3 day on kolmen päivän päästä Huom: Harjoittelukannassa oleva date-tietotyyppi käyttäytyy kuten timestamp(0) = Oraclen vanha tapa. Päiväykseen voi lisätä aikaa desimaalilukuina, joissa kokonaisosa kertoo vuorokausien lukumäärän esim this_day+0.5 on 12 tunnin päästä this_day arvosta. 12 Harri Laine 2

SQL tiedonmäärittely Viiteavainmäärittelyyn voidaan liittää toimintasääntö: mitä tehdään operaation rikkoessa viite-eheyden foreing key (sarakkeet) references taulu [(sarakkeet2)] [ on delete {restrict cascade nullify} ] [ on update {restrict cascade nullify} ] Kun viitteen kohde katoaa: restrict estää rikkovan operaation (oletusarvo) cascade vyöryttää= poistaa tai muuttaa viittaavat rivit nullify tyhjentää viittaukset valinta sen perusteella mikä on tarkoituksenmukaista SQL -kysely Kyselyn yleisrakenne: select tulostietomäärittely from taulut [where valintaehdot] [group by ryhmitystekijät] [having ryhmärajoitteet] [order by järjestysperusta] Kysely tuottaa nimettömän tulostaulun. 13 14 SQL-kysely select merkki, reknro order by merkki, reknro SQL -kysely select merkki, reknro melkein projektio valinta order by merkki, reknro Vuoden 1996 mallia olevien punaisten merkiltään Fo -alkuisten autojen merkki ja rekisterinumero merkin ja saman merkin sisällä rekisterinumeron mukaan järjestettynä Vuoden 1996 mallia olevien punaisten merkiltään Fo -alkuisten autojen merkki ja rekisterinumero merkin ja saman merkin sisällä rekisterinumeron mukaan järjestettynä 15 16 SQL-kysely Tulostietomäärittelyn elementeille lasketaan normaalitapauksessa arvo jokaista valintaehdot täyttävää riviä (riviyhdistelmää) kohden select merkki order by merkki Jos taulussa auto olisi 100 punaista vuoden 1996 Fordia tulisi merkki Ford tulostauluun 100 kertaa. Toimii siis toisin kuin relaatioalgebran projektio, joka poistaa tuplat SQL -kysely Projektion kaltainen toistuvien arvojen karsinta saadaan aikaan liittämällä tulostietomäärittelyn alkuun avainsana distinct select distinct merkki order by merkki Nyt Ford tulisi tulokseen vain kerran 17 18 Harri Laine 3

SQL-kysely Kyselyn ehto-osassa voidaan verrata saraketta, vakiota, funktion arvoa tai lausekkeen arvoa sarakkeeseen, vakioon, funktion arvoon, lausekkeen arvoon arvojoukkoon maskiin Voidaan myös tutkia sarakkeen tyhjyyttä Jos vertailun toisena osapuolena on tyhjäarvo on tulos tuntematon. Rivi tulee valituksi tulokseen vain jos ehdon arvo on tosi (). AND Totuusarvot tosi () ja epätosi () käyttäytyvät loogisissa lausekkeissa kuten ohjelmointikielten yhteydessä Kolmas totuusarvo tuntematon käyttäytyy seuraavasti NOT 19 20 SQL-kyselyt OR Sarake is null: tuottaa tuloksen, jos sarakkeessa on tyhjäarvo, muuten Sarake is not null: tuottaa tuloksen, jos sarakkeessa on tyhjäarvo, muuten Tietotyypistä riippuen sarakearvoilla voi tulostietomäärittelyissä ja ehdoissa suorittaa laskentaoperaatioita (+,-,*,/, merkkijonoille katenaatio (peräkkäin laittaminen)) pituus*paino, etu suku Merkkijonovakiot hipsuihin, numeeriset ilman Päiväykset muodossa date 2005-11-24 On mahdollista käyttää myös skalaarifunktioita esim. merkkijonon pituus length(sarake), funktiovalikoima vaihtelee Sarake = null: tuottaa aina tuloksen 21 22 SQL- kyselyt esimerkkikanta Kyselyn from -osassa yksi tai useampi taulu (tai alikysely) Jos tauluja on vain yksi, on kyseessä valinta Jos tauluja on monta, on kyseessä ristitulo, ellei ehto-osassa ole liitosehtoa (hyvin harvoin halutaan tulokseksi ristitulo) Jos tauluja on monta ja ehto-osassa on liitosehto, on kyseessä liitos muista siis liitosehto opetunnus puhelin tyohuone ilmoittautuminen Opisknro ilm_aika harjoitusryhma viikonpaiva alkamisaika sali Kurssi opintoviikot luennoija opiskelija paa_aine kaupunki aloitusvuosi 23 24 Harri Laine 4

Opettajien nimet: select from ; Opiskelijoiden pääaineet select distinct paa_aine from opiskelija; Tietojenkäsittelytieteen pääaineopiskelijoiden nimet select from opiskelija where paa_aine = TKT ; Espoossa asuvat matematiikan opiskelijat select * from opiskelija where paa_aine= MAT and kaupunki= Espoo ; Opiskelijat joiden suku on Tele select * from opiskelija where like Tele % ; (esimerkkitaulussa nimet ovat muodossa suku+ space +etu) Opiskelijat, joiden etu alkaa L:llä select * from opiskelija where like % L% ; 25 26 Kyselyn from-osassa voi olla useita tauluja Kaikki ne taulut, joiden dataa halutaan mukaan tulokseen on annettava from-osassa Arto Wiklan luennoimat kurssit Select kurssi. from kurssi, where.= Arto Wikla and kurssi.luennoija=.opetunnus; liitosehto täytyy täsmentää koska sama sarake kahdessa taulussa 27 Tauluille voidaan from-osassa antaa tilapäinen kyselyn sisäinen (alias, correlation name) from taulu [AS] alias liitettävillä tauluilla on usein samansiä sarakkeita, joten taulunimeä on käytettävä tarkenteena - alias voi olla lyhenne, joka vähentää kirjoitusvaivaa as ei käy Oraclessa 28 Jos sama taulu esiintyy from -osassa useaan kertaan, on taulun esiintymät erotettava käyttämällä aliasta Tyypillinen virhe liitoksissa on jättää jokin liitosehto pois, jolloin tuloksen rivijoukko tulee huomattavasti suuremmaksi kuin pitäisi Esim.: Kurssiparit, joilla on sama luennoija select A., B. from kurssi A, kurssi B where A.luennoija=B.luennoija and A.<B. order by A., B. ehto A.<B. estää saman parin toistumisen eri järjestyksissä 29 jos from-osassa on n kpl liitettäviä tauluja tarvitaan vähintään n-1 liitosehtoa. Taulujen liittäminen voi perustua useaan sarakkeeseen, jolloin ehtolausekkeessa tarvittavien alkeisehtojen määrä voi moninkertaistua. 30 Harri Laine 5

Yleensä kyselyt rakentuvat siten, että niissä on jokin keskeinen taulu, johon muita liitetään. Voi olla, ettei tuosta keskeisestä taulusta tule mitään dataa tulokseksi. liitokset Keskeinen taulu Laadi raportti kurssin Java-ohjelmointi harjoitusryhmistä Mitä halutaan tulokseen: Ryhmän numero (taulussa harjoitusryhmä) Ohjaajan (taulussa ) kokoontumispäivä (taulussa harjoitusryhmä) alkamisaika (taulussa harjoitusryhmä) opiskelijan (taulussa opiskelija) Taulut, harjoitusryhmä ja opiskelija on välttämättä otettava kyselyn from osaan Taulu ilmoittautuminen tarvitaan opiskelijoiden kytkemiseksi ryhmiin ja taulu kurssi, jotta saataisiin selville Java ohjelmoinnin 31 32 opetunnus puhelin tyohuone ilmoittautuminen Opisknro ilm_aika harjoitusryhma viikonpaiva alkamisaika sali Kurssi opintoviikot luennoija opiskelija paa_aine kaupunki aloitusvuosi 33 opetunnus puhelin tyohuone opetunnus= ilmoittautuminen Opisknro ilm_aika harjoitusryhma Kurssi opintoviikot viikonpaiva = alkamisaika and luennoija sali = ryhmänro opisknro= = opiskelija paa_aine kaupunki aloitusvuosi 34 select H. rno, Ope. ope, H.viikonpaiva, H.alkamisaika, O. Nimi opiskelija from Harjoitusryhma H, Ope, opiskelija O, ilmoittautuminen I, kurssi K where H.=K. and I.=H. and I.=H. and Ope.Opetunnus=H.Opettaja and I.Opisknro=O. and K.= Java ohjelmointi order by H., O.; 35 Harri Laine 6