Yleinen SQL. Yleinen SQL. SQL:n kehitys



Samankaltaiset tiedostot
HELIA 1 (14) Outi Virkki Tiedonhallinta

SQL - STRUCTURED QUERY LANGUAGE

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

SELECT-lauseen perusmuoto

3. Taulujen määrittely ja muuttaminen

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

Relaatiomalli ja -tietokanta

3. TAULUJEN MÄÄRITTELY JA MUUTTAMINEN

CSE-A1200 Tietokannat

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

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

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

Liitokset - haut useaan tauluun

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

Kyselyn yleisrakenne:

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

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

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

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

HELIA 1 (12) Outi Virkki Tiedonhallinta

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

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 (17) ICT03D Tieto ja tiedon varastointi Räty, Virkki

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

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

Relaation tyhjyyden testaaminen

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

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

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

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

SQL-kielen perusteet. Tietokantojen perusteet

TIETOKANTOJEN PERUSTEET OSIO 11 MARKKU SUNI

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

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

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

HELIA 1 (14) Outi Virkki Tiedonhallinta

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

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

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

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

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

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

HELIA 1 (17) Outi Virkki Tiedonhallinta

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

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

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

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

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

Yhdiste, leikkaus, erotus ym.

CSE-A1200 Tietokannat

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

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

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

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

Tietokannanhoitaja DBA (Database Administrator) ja tietokannan hallinta

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

CSE-A1200 Tietokannat

HELIA 1 (19) Outi Virkki Tietokantasuunnittelu

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

2. Käsiteanalyysi ja relaatiomalli

Relaatioalgebra. Kyselyt:

13. Loogiset operaatiot 13.1

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

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

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

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

Tietokantojen suunnittelu, relaatiokantojen perusteita

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

HELIA 1 (11) Outi Virkki Tiedonhallinta

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

TIETOKANTOJEN PERUSTEET MARKKU SUNI

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

Denormalisointia turvallisesti. Ougf syysseminaari Pörssitalo Helsinki Timo Raitalaakso

TIETOKANNAT JOHDANTO

Näkymät ja tiedon suojaus

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

OUTER JOIN se vanha kunnon kaveri

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

13. Loogiset operaatiot 13.1

TIETOKANTOJEN PERUSTEET OSIO 14 MARKKU SUNI

HAAGA-HELIA heti09 1 (27) ICT05 Tiedonhallinta ja tietokannat O.Virkki Relaatiomalli

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

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

HELIA 1 (13) Outi Virkki Tietokantasuunnittelu

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

HELIA TIKO-05 1 ( 12) ICT03D Tieto ja tiedon varastointi Martti Laiho

SQL:N PERUSTEET MARKKU SUNI

Tietotyypit ja operaattorit

Java-kielen perusteita

Tietokantakurssit / TKTL

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

5 SQL TIETOKANTAKIELI...33

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

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Tietokannat II -kurssin harjoitustyö

4.3.4 SQL kyselyt... 45

Mikä on tietomalli? Relaatiomallin käsitteitä 1/2 (kuva 5.1) Relaatiomallin taustaa

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

Transkriptio:

.ppt Yleinen sivu 1 Yleinen :n kehitys sivu 2... kokeiluja 1970 E F Codd: A Relational Model of Data for Large Shared Data Banks - Relational View on Data, relaatioalgebra, normalisointi 1974-79 Berkeley Ingress (QUEL), IBM System R (Sequel) (Stonebraker,..) (Chamberlin,...) 1979 Oracle 1981 IBM /DS 1983 IBM DB2 Esvel, IDMS/, Tandem NonStop, HP (Allbase/),.. 1986-87 ANSI : 1 -standardi 1987 IBM SAA 1988 X/Open (Unix) 1989 ANSI + ISO: -89 -standardi (=1 + viite-eheys) 1989 Järjestelmätoimittajat perustivat Access Groupin SAG (Client-Server RDA/CLI) mikrojen RDBMS-boomi... 1992 ISO: -92 -standardi (työnimi 2) 1993 Microsoft: ODBC 1999 ISO: :1999 -standardi (työnimi 3) 2003 :2003 lisätty /XML 2008 :2008

.ppt Yleinen Relaatiomalli: - Relational View on Data sivu 3 arvojoukot (domains) Relaatio: kunnat nimet Hur... Vantaa Espoo... Helsinki osastot D01 D02 D03 palkat käsitemalli nimetyt attribuutit NIMI KUNTA OSNO PALKKA yksilötyyppi ominaisuudet monikko (tuple) monikoilla ei ole määriteltyä järjestystä Hurvinen H. Kurvinen K Vahvanen V. Viininen V. Helsinki D01 7 500 Espoo D03 8 300 Vantaa D01 13 000 Helsinki? 6 000 ominaisuuksien arvot ovat jakamattomia (atomic) puuttuva arvo NULL Yksilöivä perusavain? (primary key) - yksi tai useampi ominaisuus yhdessä Relaatiomalli ja sivu 4 Relaatio: - taulu tt_nrot nimetyt attribuutit - sarakkeet arvojoukot (domains) ~ tietotyypit + CHECK ehto nimet kunnat osastot Hur... Vantaa D01 D02 Espoo... Helsinki D03 TT_# NIMI KUNTA OSNO PALKKA 200 Hurvinen H. Helsinki D01 7 500 palkat käsitemalli yksilötyyppi monikot (tuples) - rivit 100 400 Kurvinen K Vahvanen V. Espoo D03 8 300 Vantaa D01 13 000 300 Viininen V. Helsinki? 6 000 Yksilöivä perusavain (primary key) - usein keinotekoinen avain puuttuva arvo NULL

.ppt Yleinen Käsitemalli sivu 5 yksilötyyppi (entity, relation) yksilötyyppien väliset riippuvuudet kuvataan yhteystyypeillä (relationship) joiden aste kuvaa yhteyden yksilöesiintymien lukumääriä 1 : 1 1 : N N : M Osasto kuuluu omaa Taito johtaa Tyontekija Yhteystyypin kummmankin yksilötyypin osalta määritetään sen ehdollissuus (0) tai pakollisuus ( ) toista yksilötyypistä katsottuna Työvaiheet sivu 6 Tietotarveanalyysi: Tietotarpeet Käsiteanalyysi: Käsitemalli Tietosuunnittelu - normalisointi Relaatiokaavat Viite-eheys ja -määritykset: -taulut

.ppt Yleinen Yhteyden toteutus sivu 7 Kaikki käsitemallissa esiintyvät M:N-yhteydet on syytä purkaa 1:N-yhteyksiksi uuden yhteysyksilötyypin avulla: M:N 1:N 1:M Jokainen yhteys liittää nyt johtotyyppiin (master, parent, isä ) jäsentyypin (detail,child, lapsi ). Jäsenyksilöitä voi olla useita. Yhteys totetetaan viiteavaimella (foreign key), joka muodostetaan siten että jäsentyypin tietoihin täydennetään (ellei ole jo ennestään) johtotyypin perusavainta vastaavat tiedot (sarakkeet). Jäsentyyppi on yhteyden kannalta viittaava ja johtotyyppi viitattu yksilötyyppi. Harjoitusympäristö: HH-taulut sivu 8 OSASTOT OS_NO NIMI OS_PAAL OS_BUDJ -------------------------------------------- D01 Valmistus 110 800 000 D02 Markkinointi 120 1 000 000 D03 Hallinto 130 400 000 TYONTEK TT_NO NIMI KUNTA OS_NO PALKKA ------------------------------------------------------ 200 Hurvinen H. Helsinki D01 7 500 100 Kurvinen K. Espoo D03 8 300 110 Jämerä J. Helsinki D01 15 000 400 Vahvanen V. Vantaa D01 13 000 120 Pamppu P. Kerava D02 18 000 300 Viininen V. Helsinki? 6 000 130 Hirmu H. Sipoo D03 20 000 TAIDOT TT_NO TAITO ----------------- 300 C 110 COBOL 200 FORTRAN 400 COBOL 200 Tehtävä: Ratkaise taulujen perusavaimet ja viiteavaimet

.ppt Yleinen Relationaalisuuden 12 sääntöä (Codd) sivu 9 1. Rakenteen kuvattavuus tekstimuodossa kannan systeemitauluissa (System Catalog) 2. Tiedon taattu löytyvyys relaation nimen, monikon perusavaimen arvon ja tiedon attribuuttinimen perusteella 3. Puuttuvan tiedon (NULL) systemaattinen käsiteltävyys 4. Kannan kuvaustietojen käsiteltävyys tietokantakielellä 5. Yhtenäinen, kattava tietokantakieli - tietomääritykset, - näkymät, - eheysrajoitteet, - oikeudet, - relaatioalgebran mukaiset kyselyt, - tapahtumarajat, - ohjelmallisesti tai vuorovaikutteisesti... Relationaalisuuden 12 sääntöä (Codd) sivu 10 6. Päivitettävyys näkymien kautta, jos teoriassa mahdollista 7. Lisäys, muutos tai poisto yhdellä lauseella 8. Fyysinen tietoriippumattomuus 9. Looginen tietoriippumattomuus 10. Eheysrajoitteet - perusavain, - viite-eheys ja - omat rajoitesäännöt (business policy) voitava kuvata säännön 5 kielellä 11. Hajautusriippumattomuus 12. Rajoitusten ohittamattomuus mahdollisilla muilla käsittelymenetelmillä

.ppt Yleinen Relaatioalgebra sivu 11 valinta projektio yhdiste leikkaus erotus a b c x y tulo a a b b c c x y x y x y a1 a2 a3 b1 b1 b2 b1 b2 b3 c1 c2 c3 (luonn.) liitos a1 a2 a3 b1 b1 b2 c1 c1 c2 a a a b b c x y z x y y x y jako a b Tietokantakieli sivu 12 -DDL CREATE Table View Index ALTER Table DROP Table View Index -DML SELECT -DCL INSERT UPDATE DELETE GRANT REVOKE

.ppt Yleinen Tietokantaympäristö sivu 13 kuvaukset Systeemitaulusto (System Catalog) Table Index Column View... Create DB / Start DBE.. NEW SysAdm DBA Grant DBA Tietokanta(ympäristö) Grant resource hakemistot tiedot index table view Create table index view Revoke Select Insert Update Delete User/Creator Grant select, update,... with grant option User/Group User Grant... Rakenneosat (objects) sivu 14 - Tietokanta ("omistaja") -Taulut - sarakkeet ja arvojoukot - rajoitteet - Hakemistot - Näkymät - Proseduurit ja triggerit - Käyttäjät / ryhmät l. roolit -... Tunnistenimet: kirjaimet numerot 0..9 alleviivat - keskellä A..Z _ alettava kirjaimella max 18 merkkiä

.ppt Yleinen Create Table sivu 15 CREATE TABLE [omistaja.] taulu ( sarakenimi tietotyyppi [ DEFAULT vakio systeemimuuttuja ] [ NOT NULL ] [ [ CONSTRAINT rajoitenimi ] CHECK ( sarake-ehto ) ] [, sarakemäärityksiä... ] [, [ CONSTRAINT rajoitenimi ] PRIMARY KEY ( sarakelista ) ] [, [ CONSTRAINT rajoitenimi ] UNIQUE ( sarakelista ) ] [, avainehdokkaiden yksilöivyyden UNIQUE-valvontamäärityksiä... ] [, [ CONSTRAINT rajoitenimi ] FOREIGN KEY ( sarakelista ) REFERENCES [omistaja.] perustaulu [ ( sarakelista) ] [ MATCH { PARTIAL FULL } ] [ ON UPDATE oletus: NO ACTION l. RESTRICT CASCADE SET NULL SET DEFAULT ] [ ON DELETE oletus: NO ACTION l. RESTRICT CASCADE SET NULL SET DEFAULT ] ] [, viiteavainmäärityksiä... ] [, [ CONSTRAINT rajoitenimi ] CHECK ( riviehto ) ] [, CHECK-määrityksiä... ] ) [ säilytysrakenteen tietoja ] Tietotyypit sivu 16-89 -92 muita CHARACTER ( n ) VARCHARACTER ( max ) DECIMAL ( p [, q ] ) INTEGER SMALLINT FLOAT ( r ) REAL DOUBLE PRECISION DATE TIME TIMESTAMP DATETIME INTERVAL BIT [VARYING] GRAPHIC VARGRAPHIC BLOB-tyypit LOGICAL Esim. Nimi char (35) Memo varchar (3000) Palkka dec (9,2) AsukasLuku int LomaPaivat smallint PlaneetanHalk float (7) Proj_AlkPv LahtoAika AikaLeima Kesto date time timestamp interval NimiKirj Video LONG varchar (700000000)

.ppt Yleinen Lausekkeet sivu 17 Valinnoissa, lisäyksissä, muutoksissa ja tulossarakkeilla: Aritmeettiset lausekkeet operaattorit: + - * / ( ) operandit: sarakkeet, literaalit, muuttujat, funktiot Koostefunktiot COUNT, SUM, AVG, MIN, MAX Aikalausekkeet ja muunnokset current_date, current_time date - date = interval, date +- interval = date,... EXCTRACT (kenttä FROM aikalauseke) (-92) Merkkijonofunktiot SUBSTRING UPPER LOWER CONVERT Numeeriset funktiot CHAR_LENGTH POS -DML sivu 18 -DDL CREATE Table View Index ALTER Table DROP Table View Index -DML SELECT INSERT UPDATE DELETE -DCL GRANT REVOKE

.ppt Yleinen INSERT - rivi sivu 19 syntaksi: INSERT INTO taulu [ ( sarake [, sarake... ] ) ] VALUES ( arvo [, arvo... ] ) Lisää yhden rivin Sarakeluettelo suositeltava tietoriippumattomuuden kannalta Sarakkeen arvo aina vastinpaikalla Merkkimuotoinen arvo 'hipsujen' sisään Numeerinen arvo ilman hipsuja esimerkki: Insert into tyontek (tt_no, nimi, kunta, os_no, palkka) values ( 600, 'Huuhanen H', 'Hyvinkää','D02', 9000 ); INSERT - rivijoukko sivu 20 syntaksi: INSERT INTO taulu [ ( sarake [, sarake... ] ) ] SELECT-lause Kohdetaulu ei saa esiintyä SELECT-lauseessa Sarakeluettelo suositeltava tietoriippumattomuuden kannalta ja SELECT-lauseen tulostaulun vastattava sarakeluetteloa Komento lisää kohdetauluun SELECT-lauseen tulostaulun rivit

.ppt Yleinen UPDATE sivu 21 syntaksi: UPDATE taulu SET sarake = lauseke [, sarake = lauseke... ] [ WHERE hakuehto ] Päivittää SET-määreen mukaiset muutokset kaikille niille kohdetaulun riveille, joille hakuehto on tosi, tai WHERE-määreen puuttuessa taulun kaikille riveille SET-määreen lausekkeissa esiintyvät sarakenimet edustavat kukin rivillä nimetyssä sarakkeessa ennen päivitystä ollutta arvoa Merkkimuotoinen arvo 'hipsujen' sisään Numeerinen arvo ilman hipsuja esimerkki: Update tyontek set palkka = palkka * 1.1, os_no = 'D01' where tt_no = 300 ; DELETE sivu 22 syntaksi: DELETE FROM taulu WHERE hakuehto Poistaa kohdetaulusta kaikki ne rivit, joille hakuehto on tosi Huom: viite-eheyden vaikutukset esimerkki: a) Delete from taidot where tt_no = 300 ; b) Delete from tyontek where tt_no = 300 ;

.ppt Yleinen HH-harj: Insert, Update, Delete sivu 23 1) 2) Laadi -komennot, joilla TYONTEK-tauluun lisätään henkilön nro 500 tiedot: nimi: Lurvinen L. kunta: Lahti osasto: D03 palkka: 12 000 ja TAIDOT-tauluun ko. henkilön taidot Konekirj. Neuvottelu 3) 4) 5) Laadi -komento, jolla kaikkien osastojen budjetteihin lisätään 10 %. Laadi -komento, jolla osaston 'D01' budjetin arvoksi korjataan 900000 mk. Laadi -komennot, joilla Viinisen (tt_no = 300) tiedot poistetaan tietokannasta. SELECT sivu 24 * SELECT [ DISTINCT ] lauseke [,... ] FROM taulu [viite] [,... ] [ WHERE hakuehto ] [ GROUP BY sarake [,... ] ] [ HAVING ryhmäehto ] [ ORDER BY sarake [ ASC DESC] [,... ] ] Huom. tuloslausekkeena on yleensä viite.sarake * tulostaa kaikki sarakkeet

.ppt Yleinen Select - projektio sivu 25 TYONTEK TT_NO NIMI KUNTA OS_NO PALKKA ------------------------------------------------------ 200 Hurvinen H. Helsinki D01 7 500 100 Kurvinen K. Espoo D03 8 300 110 Jämerä J. Helsinki D01 15 000 400 Vahvanen V. Vantaa D01 13 000 120 Pamppu P. Kerava D02 18 000 300 Viininen V. Helsinki? 6 000 130 Hirmu H. Sipoo D03 20 000 SELECT OS_NO, KUNTA FROM TYONTEK ; SELECT DISTINCT OS_NO, KUNTA FROM TYONTEK ; tulostaulu: OS_NO KUNTA ------------------- D01 Helsinki D03 Espoo D01 Helsinki D01 Vantaa D02 Kerava? Helsinki D03 Sipoo tulostaulu: OS_NO KUNTA ------------------- D01 Helsinki D03 Espoo D01 Vantaa D02 Kerava? Helsinki D03 Sipoo Select - valinta sivu 26 tulostaulu: TYONTEK TT_NO NIMI KUNTA OS_NO PALKKA ------------------------------------------------------ 200 Hurvinen H. Helsinki D01 7 500 100 Kurvinen K. Espoo D03 8 300 110 Jämerä J. Helsinki D01 15 000 400 Vahvanen V. Vantaa D01 13 000 120 Pamppu P. Kerava D02 18 000 300 Viininen V. Helsinki? 6 000 130 Hirmu H. Sipoo D03 20 000 SELECT * FROM TYONTEK WHERE OS_NO = 'D01'; TT_NO NIMI KUNTA OS_NO PALKKA ------------------------------------------------------ 200 Hurvinen H. Helsinki D01 7 500 110 Jämerä J. Helsinki D01 15 000 400 Vahvanen V. Vantaa D01 13 000 vertailupredikaatti tulostaulu? SELECT * FROM TYONTEK WHERE OS_NO <> 'D01';

.ppt Yleinen Hakuehto sivu 27 Hakuehto on ehtolauseke, joka muodostuu yhdestä tai useammasta ehdosta l. predikaatista ja näitä kytkevistä konnektiiveista: NOT negaatio eli EI (vert. aritm. miinus-etumerkki) AND konjunktio eli JA (vert. kertomerkki) OR disjunktio eli TAI (vert. plus-merkki) Konnektiivit määräävät ehtolausekkeen totuusarvon laskentajärjestyksen kuten vastaavat aritmeettiset operaattorit ja samoin laskentajärjestystä voidaan muuttaa käyttämällä sulkeita. - Sulkeet selventävät aina! Esimerkkejä: WHERE os_no = 'D01' AND kunta = 'Helsinki' OR kunta = 'Vantaa'' WHERE os_no = 'D01' AND (kunta = 'Helsinki' OR kunta = 'Vantaa') WHERE os_no = 'D01' AND NOT (kunta = 'Helsinki' OR kunta = 'Vantaa') Totuustaulut sivu 28 predikaatti (s,..) = T tosi? tuntematon (jos s on NULL) F epätosi Hakuehto voi muodostua yhdestä tai useammasta predikaatista ja näiden välisistä NOT, AND, OR-konnektiiveista. Totuusarvon laskentajärjestystä voidaan ohjata sulkein ( ). Näin muodostettujen loogisten lausekkeiden totuusarvot noudattavat seuraavaa 3-arvologiikkaa: AND T? F OR T? F NOT ------------- ------------ ------- T T? F T T T T T F??? F? T???? F F F F F T? F F T

.ppt Yleinen NULL-arvot sivu 29 aritmeettisen lausekkeen arvo NULL, jos joku operandi on NULL predikaatin totuusarvo - jos vertailu, between, in, like tai määräpredikaatin jonkin argumentin arvona on NULL, on predikaatin totuusarvo tuntematon - NULL-arvon tutkimista varten on käytettävissä NULL-predikaatin muodot: IS NULL ja IS NOT NULL loogiset operaatiot NOT, AND, OR ks totuustaulut koostefunktiot: COUNT, SUM, AVG, MIN, MAX jos sarakkeella NULL, niin rivi ohitetaan, paitsi COUNT (*) jos tyhjä joukko, eli ei yhtään riviä, palautetaan NULL, paitsi COUNT(*):n arvoksi 0 kahta NULL-arvoa pidetään samoina seuraavissa lajittelussa (ORDER BY) kaksosten eliminoinnissa (DISTINCT ja UNION) ryhmittelyssä (GROUP BY) Koostefunktiot (aggregate functions) sivu 30 - Käytettävissä vain ryhmätasolla tai loppusummatasolla! COUNT ( * ) COUNT ( s ) COUNT ( DISTINCT s ) SUM ( s ) AVG ( s ) MIN ( s ) MAX ( s ) rivien lukumäärä rivien lukumäärä, joilla s ei ole NULL sarakkeella esiintyneiden eri arvojen lukumäärä sarakkeella s esiintyneiden kaikkien arvojen summa sarakkeella s esiintyneiden kaikkien arvojen keskiarvo pienin sarakkeella s esiintynyt arvo suurin sarakkeella s esiintynyt arvo

.ppt Yleinen SELECT-lauseen tulostaulutyypit sivu 31 yksikkörivit: välisummat: loppusummat: SELECT s1, r1, s2+s3 SELECT g1, SUM(s1), AVG(s2)... GROUP BY g1 g - vrt raportin osat SELECT SUM(s1), AVG(s2) 1xx 1xx... 1xx 2xx 2xx sum avg 2xx sum avg... 9xx 9xx 9xx sum avg sum avg SELECT-lauseen toimintamalli sivu 32 Rick van der Lans: FROM valitsee kohdetaulut... WHERE poimii rivit työtauluun GROUP BY ryhmittelee työtaulun rivit HAVING poimii ehdon täyttävät ryhmät SELECT poimii/laskee tulastaulun sarakkeet ORDER BY lajittelee tulostaulun rivit tulostaulu:

.ppt Yleinen Liitos sivu 33 - Tulostetaan lapsitaulun rivien tietoja täydennettynä vastaavien isärivien tiedoilla. Tietomalli: Ilmentymä: Isätaulu perusavain isätaulu Liitosta käyttävä kysely (-89): lapsitaulu laps_perusavain viiteavain SELECT... FROM lapsitaulu C, isätaulu F WHERE C.viiteavain = F.perusavain Tyypillinen liitospredikaatti lapsitaulu Viiteavaimen arvona on vastaavan "isärivin" avaimen arvo Huom -92 tuntee FROM-määreessä erityisen JOIN operaattorin Select FROM - liitokset sivu 34 Syntaksi: FromMääre ::= TauluMääre ( FromMääre ) INNER FromMääre NATURAL LEFT [OUTER] RIGHT [OUTER] JOIN TauluMääre ( FromMääre ) INNER FromMääre LEFT [OUTER] RIGHT [OUTER] JOIN TauluMääre ON hakuehto ( FromMääre ) USING (sarakelista) Esimerkki: SELECT... FROM lapsitaulu NATURAL JOIN isätaulu - jos avaimet samannimiset ja ei muita samannimisiä sarakkeita! SELECT... FROM lapsitaulu JOIN isätaulu USING (avain) - jos avaimet samannimiset!

.ppt Yleinen Ulkoliitokset sivu 35 lapsitaulu LEFT OUTER JOIN isätaulu => liitos + lapset joilla ei isää (isän tiedoissa NULL-arvot) lapsitaulu RIGHT OUTER JOIN isätaulu => liitos + isät joilla ei lapsia (lasten tiedoissa NULL-arvot) Liitospolku sivu 36 Kaikkien niiden taulujen kesken, joiden tietoja tarvitaan tulostauluun, voidaan tehdä liitokset. Ensin ratkaistaan mistä taulusta saadaan tulostaulun yksikkörivit. Tästä taulusta rakennetaan hakuehtoon liitospolut jokaiseen muuhun tauluun käyttäen liitospredikaattia ja käyttäen AND konnektiivia predikaattien välissä D A C C.d=D.d B.a=A.a B B.c=C.c (Liitosviuhkan juuri ) SELECT B.b, A.n, C.k, D.z,... FROM B, A, C, D WHERE B.a = A.a AND B.c = C.c AND C.d = D.d

.ppt Yleinen Korrelaationimet sivu 37 Jos sama taulu esiintyy liitospoluilla eri rooleissa, on taulun kullekin roolille annettava ns. korrelaationimi (viitenimi, aliasnimi) SELECT-lauseen FROM-määreessä ja taulusta saa käyttää SELECT-lauseen muissa osissa vain näitä korrelaationimiä. D A.d=D2.d A C C.d=D1.d B.a=A.a B B.c=C.c (Liitosviuhkan juuri ) SELECT B.b, A.n, D2.m, C.k, D1.m FROM B, A, C, D D1, D D2 WHERE B.a = A.a AND A.d = D2.d AND B.c = C.c AND C.d = D1.d Indeksit sivu 38 Syntaksi: CREATE [ UNIQUE ] [ CLUSTERING CLUSTERED ] INDEX hakemistonimi ON perustaulu ( sarake [ASC DESC ] [,... ] ) Indeksi (hakemisto) nopeuttaa hakua avaimella. Luodaan aina perusavaimella ja viiteavaimille (eheyden tarkistus, liitokset). Perusavaimelle UNIQUE-indeksi yleensä automaattisesti. UNIQUE ja CLUSTERING -hakemisto luodaan ennen rivien kirjoittamista. Huom ALLABSE/:ssä Clustering hakemisto kannattaa luoda vasta kun lajitellut rivit on ladattu tauluun.

.ppt Yleinen (Non-clustering) INDEX sivu 39 hakemistosivut ja avaimet juuri 50 82 95 Matching index scan 12 32 50 58 70 82 Range scan: 6 8 12 15 18 32 35 40 50 51 58 60 62 70 71 78 82 83 85 89 89 95 91 95 lehtitaso Non-matching index scan taulutilan sivut ja taulun rivit serial scan Clustering INDEX sivu 40 hakemistosivut ja avaimet juuri 50 82 95 12 32 50 58 70 82 89 95 6 8 12 15 18 32 35 40 50 51 58 60 62 70 71 78 82 83 85 89 91 95 lehtitaso taulutilan sivut ja taulun rivit

.ppt Yleinen Clustered INDEX sivu 41 hakemistosivut ja avaimet juuri 50 82 95 12 32 50 58 70 82 89 95 Lehtitason muodostavat taulun sivut! taulutilan sivut ja taulun rivit... Predikaatit sivu 42 Hakuehto on siis yhdestä yhdestä tai useammasta ehdosta eli predikaatista konnektiiveilla NOT, AND ja OR sekä mahdollisesti sulkeilla yhdistetty looginen lauseke. -standardi tuntee seuraavat predikaatit: Vertailupredikaatti: <, <=, =, >=, >, <> BETWEEN-predikaatti: BETWEEN alaraja AND yläraja IN-predikaatti: IN (arvo, arvo,... ) LIKE-predikaatti: LIKE malli NULL-predikaatti: IS NULL Ei siis: = NULL Määräpredikaatti: vertailu ALL, ANY, SOME ( ) EXISTS-predikaatti: on olemassa ( )

.ppt Yleinen Predikaatit: syntaksien raidekaavio sivu 43 lauseke vert.op. lauseke sisäkysely lauseke lauseke sarake sarake lauseke EXISTS BETWEEN lauseke AND lauseke NOT IN sisäkysely NOT,, ( arvovakio ) lauseke LIKE malli NOT ESCAPE merkki IS NULL NOT vert.op. ALL sisäkysely ANY SOME sisäkysely BETWEEN-predikaatti sivu 44 BETWEEN-predikaatti on tyypillisesti muotoa sarake BETWEEN alaraja AND yläraja ja sillä tutkitaan onko sarakkeen arvo annetulla arvovälillä, arvovälin rajat mukaan lukien. Syntaksin mukaan sarakkeen, alarajan tai ylärajan paikalla voi olla myös aritmeettinen lauseke. Predikaatti on yhtäpitävä seuraavan loogisen lausekkeen kanssa: sarake >= alaraja AND sarake <= yläraja Predikaatin komplementtimuoto on sarake NOT BETWEEN alaraja AND yläraja

.ppt Yleinen IN-predikaatti sivu 45 IN-predikaatilla tutkitaan onko sarakkeen (yleistäen: lausekkeen) arvoja jokin suluissa luetelluista arvoista eli arvojoukon arvoista. Vertailun arvojoukko voidaan määrittää 1. luettelemalla arvojoukon alkiot eksplisiittisesti esim. Sarake IN (1, 3, 5, 9) 2. käyttämällä sisäkyselyä, jonka yksisarakkeinen tulostaulu tuottaa vertailun arvojoukon dynaamisesti tietokannan tietojen perusteella esim. tt_no IN (select tt_no from taidot where taito='c') 3. käyttämällä arvojoukon paikalla lauseketta (tämä vastaa vertailupredikaatin muotoa: sarake = lauseke) LIKE-predikaatti sivu 46 sarake LIKE malli [ESCAPE vaihtomerkki] mallissa voidaan käyttää seuraavia jokerimerkkejä _ täsmää mihin tahansa yhteen merkkiin % täsmää mihin tahansa merkkijonoon vaihtomerkki jokerimerkin edessä tekee siitä tarkan merkin, johon sarakkeen vastaavan merkin on täsmättävä. Kaikki muut ovatkin tarkkoja merkkejä. Esimerkkejä: Select nimi from hh.tyontek where nimi LIKE '_ur%'; Select asno, alennus from tilkas.asiakas where alennus LIKE '!%%' escape!;

.ppt Yleinen NULL-predikaatti sivu 47 Sarakkeen puuttuvaa arvoa sanotaan NULL-arvoksi. NULL-arvoinen sarake tuottaa vertailupredikaatille ja sen johdannaisille (BETWEEN, IN ja määräpredikaatit) totuusarvon tuntematon. Jos halutaan ottaa myös NULL-arvon mahdollisuus huomioon, tätä ei voi testata vertailupredikaatilla sarake = NULL vaan on käytettävä NULL-predikaatin muotoa: sarake IS NULL esim. Sarake IN (1, 3, 5, 7) OR sarake IS NULL Sisäkysely sivu 48 SELECT, UPDATE tai DELETE-komennon hakuehdon sisällä tietyissä predikaateissa voi esiintyä sulkeissa SELECT-lause. Tätä kutsutaan sisäkyselyksi (subquery, alikysely) ja sen tulostaulu toimii siis ulomman lauseen (komennon) rivien valintaperusteena. Sisäkyselyn tuloksia ei siis tulosteta ulommassa lauseessa. Esim. Select tt_no, tt_nimi from tyontek where tt_no IN (select tt_no from taidot where taito='c'); Sisäkysely voidaan usein korvata liitoksella, joka voi olla myös suorituksen kannalta tehokkaampi Select T.tt_no, tt_nimi from tyontek T, taidot D where taito = 'C' and D.tt=no = T.tt_no;

.ppt Yleinen... Sisäkyselyn tulostaulutyyppi sivu 49 Predikaatista riippuen tulostaulu on muotoa a) alkio (vertailupredikaatti) b) sarake, jonka eri riveille tulostuvat arvot muodostavat arvojoukon (IN, ALL, ANY, SOME) c) taulu, jonka olemassaoloa testataan EXISTS-predikaatissa Select... From A, B Where... (Select...) From A B Where A. B. työrivi: arvo: (Select... ) tulostaulu? arvojoukko Määräpredikaatti sivu 50 vertailuoperaattori: < <= = >= > <> Verrataan sarakkeen arvoa sisäkyselyllä muodostetun arvojoukon arvoihin ALL sarake ANY (sisäkysely) SOME ANY ja SOME ovat synonyymejä s ALL (a, b,... ) <=> s a AND s b AND... s ANY (a, b,... ) <=> s a OR s b OR... s <> ALL (... ) <=> s NOT IN (... ) s = ANY (... ) <=> s IN (... )

.ppt Yleinen määräpredikaatit, esimerkkejä sivu 51 Oletetaan, että sisäkysely tuottaa arvojoukon: ( 10, 20, 30 ) S = ANY (10, 20, 30) S < ANY (10, 20, 30) S > ANY (10, 20, 30) S = ALL (10, 20, 30) S < ALL (10, 20, 30) S > ALL (10, 20, 30) Jos S on 10, niin tosi Jos S on 5, niin epätosi Jos S < 30, niin tosi Jos S >= 30, niin epätosi Jos S > 10, niin tosi Jos S <= 10, niin epätosi Jos joukossa eri suuria alkioita, niin epätosi Jos S < 10, niin tosi Jos S >= 10, niin epätosi Jos S > 30, niin tosi Jos S <= 30, niin epätosi Sisäkkäisiä kyselyitä sivu 52 Kysymys Kenen johtamalla osastolla on C-kielen taitoisia? voidaan ratkaista esimerkiksi seuraavalla monitasoisella kyselyllä Select tt_nimi from tyontek where tt_no IN (select os_paal from osastot where os_no IN (select os_no from tyontek where tt_no IN (select tt_no from taidot where taito = 'C') ) ) ; Sisäkkäisiä kyselytasoja voi järjestelmästä riippuen olla jopa 15

.ppt Yleinen Korreloitu sisäkysely sivu 53 Ulomman kyselyn taulujen näkyvyysalue (scope) ulottuu sisäkyselyihin.. Jos ulomman kyselyn taulun saraketta käytetään sisäkyselyn hakuehdossa, sanotaan sisäkyselyä korreloiduksi. Esim. C-taitoiset henkilöt voitaisiin selvittää seuraavalla korreloitua sisäkyselyä käyttävällä kyselyllä Select tt_no, tt_nimi from tyontek where 'C' = SOME (select taito from taidot where tyontek.tt_no =taidot.tt_no); EXISTS-predikaatti sivu 54 Tutkitaan tuottaako sisäkysely tulostaulun (jolloin predikaatin totuusarvo on TRUE) vai ei (jolloin totuusarvo on FALSE) EXISTS (sisäkysely) Sisäkysely on tässä yleensä korreloitu ja sillä selvitetään esimerkiksi - onko isällä ehdon täyttäviä lapsia, tai - onko lapsella ehdon täyttävä isä Esim. Select tt_no, tt_nimi from tyontek T where EXISTS (select * from taidot S where taito= C and S.tt_no = T.tt_no);

.ppt Yleinen Korrelaationimi sisäkyselyssä sivu 55 Esim Jos korreloitu sisäkysely kohdistuu samaan tauluun kuin ulompi kysely, on näille taulun rooleille annettava omat korrelaationimet Select nimi, palkka from tyontek A where palkka > (select AVG(palkka) from tyontek B where A.os_no = B.os_no); TYONTEK (Select AVG(palkka)... Select.. from A where palkka from B os_no palkka os_no where A.os_no = B.os_no > AVG(palkka) Yhdiste, Leikkaus, Erotus sivu 56 Relaatioalgebran mukainen yhdiste toteutetaan seuraavasti (ilman UNION-operaattorin ALL-määrettä): -87: UNION SELECT... UNION [ ALL ] [ ORDER BY... ] SELECT... -92: UNION INTERSECT EXCEPT Oracle: MINUS - oltava saman rakenteisia

.ppt Yleinen View sivu 57 View eli näkymä (johdettu taulu, johdos) on a) osa perustaulusta - voi olla päivittävä b) muunnos - välisumma, summa, liitos, yhdiste,... - ei päivittävä Näkymien avulla toteutetaan ohjelmien looginen tietoriippumattomuus - perustaulun muutos ei aina edellytä ohjelmamuutoksia, säästyy ylläpitotyötä - käsittelyä ulos ohjelmista - tietotarkastuksia - tulostaulun kokoaminen -> ohjelmat yksinkertaistuvat - suojauskeino Päivitys näkymän kautta sivu 58 nakyma K L Select perustaulu A B C D E Create View nakyma ( K, L) as Select B, D From perustaulu Insert Update Delete Where B between 100 and 200 With Check Option ; 1:1

.ppt Yleinen Rakenneosien käyttöoikeudet sivu 59 Rakenneosien käyttöoikeuksien myöntäminen GRANT ALL PRIVILEGES SELECT INSERT DELETE [,... ] UPDATE [ (sarakelista ) ] REFERENCES [ (sarakelista)] ON [kanta.] taulu TO käyttäjä [,... ] [ WITH GRANT OPTION ] Käyttöoikeuksien peruminen REVOKE valtuusluettelo ON [kanta.] taulu FROM käyttäjä [,...] käyttäjä tark. käyttäjätunnus rooli PUBLIC