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... 10 Syntaksikuvaukset... 13 Backus Naur Form... 13 Taulun luonti... 14 Taulun muuttaminen... 15 Taulun poistaminen... 16 DML... 17 Lisäys, INSERT... 18 Poisto, DELETE... 21 Haku, SELECT... 22
HELIA TIKO-05 2 (22) SQL ~ Structured Query Language ~ Relaatiotietokantojen määrittely- ja käsittelykieli SQL on ensimmäinen ja ainoa laajasti hyväksytty tietokantakieli 1. DDL = Data Definition Language Tietokannan taulujen ja eheyssääntöjen määrittely 2. DML = Data Manipulation Language Tietokannan tietojen haku ja päivitys Historiaa 1970 Codd:n artikkeli relaatiotietokannoista 1974 SEQUEL kyselykieli / IBM 1979 1. kaupallinen SQL-tuote: Relational Software (nyk. Oracle) 1986 1. standardi Nykyään SQL:n sisältäviä relaatiotietokanta- (& sovelluskehitysohjelmistoja) satoja
HELIA TIKO-05 3 (22) Standardit ISOn (International Standards Organization) ja ANSIn (American National Standard Institute) hyväksymä standardi 1. SQL86 - SQL1 uudistettu 1989 2. SQL92 - SQL2 3. SQL99 - SQL3 (SQL2003: mm. XML-tuki) Suurin osa nykyisistä tietokannanhallintajärjestelmistä tukee SQL89:ä on toteuttanut osan SQL92 -standardista on toteuttanut osan SQL99 -standardista on toteuttanut standardoimattomia piirteitä eri toimittajien SQL:t eivät välttämättä ole keskenään kokonaan yhteensopivia! suuri osa ymmärtää standardin mukaista SQL:ää (mutta ei sen kaikkia ominaisuuksia)
HELIA TIKO-05 4 (22) Käyttö 1. Itsenäisenä kyselykielenä (interaktiivisesti työasemalta) 2. Toisen ohjelmointikielen täydennyksenä (upotettuna) 3. Osana sovelluskehitysvälinettä DDL - tietokannan luominen ja ylläpito Tietokannan objektien (taulujen ja niihin liittyvien eheyssääntöjen ym. tietokantaobjektien) luominen, muuttaminen, poisto create-, alter-, drop lauseet Käyttöoikeuksien hallinta grant-, revoke-lauseet DML - tietojen päivitys ja hyödyntäminen 1. Tietojen haku select lause 2. Tietojen päivitys insert-, update-, delete laus. 3. Tapahtumankäsittely commit-, rollback lauseet
HELIA TIKO-05 5 (22) Sql-komentojen kirjoittaminen Varatut sanat kirjoitetaan ja käytetään täsmälleen syntaksin mukaan voidaan kirjoittaa isoilla tai pienillä kirjaimilla (yleensä isoilla kirjaimilla ) Käyttäjän määrittelemät sanat esim. sarakkeiden ja taulujen nimet voidaan kirjoittaa isoilla tai pienillä kirjaimilla (yleensä pienillä kirjaimilla) Dataa käsiteltäessä kirjaimet kirjoitetaan isoilla tai pienillä sen mukaan, miten ne on tallennettu tietokantaan Esim: WHERE sukunimi = SMITH vrt. WHERE sukunimi = 'Smith'
HELIA TIKO-05 6 (22) lauseiden (clause) kirjoittaminen on vapaata, mutta seuraavien ohjeiden noudattamista suositellaan: 1. Kukin määre lauseessa alkaa uudelta riviltä 2. Kukin määre lauseessa samalla linjalla Esim. SELECT FROM WHERE sno, fname, lname,position staff position = Manager ; 3. Jos määre sisältää useita osia, käytetään sisennystä, jotta määreen merkitys tulisi paremmin näkyviin Esim. SELECT FROM WHERE sno, fname, lname, position, bno staff position = Manager ;
HELIA TIKO-05 7 (22) DDL Tietokantaobjektien määrittely tietokannan (rakenteiden) luominen ja ylläpito Esim: Create lause CREATE TABLE opettaja (opettajanro INTEGER PRIMARY KEY, etunimi VARCHAR(20) NOT NULL, sukunimi VARCHAR(30) NOT NULL, puhelin CHAR(15), lyhenne CHAR(10) NOT NULL ); Alter lause ALTER TABLE opettaja ADD (syntpvm DATE); ALTER TABLE opettaja ALTER (lyhenne CHAR(6)); Drop lause DROP TABLE opettaja;
HELIA TIKO-05 8 (22) SQL:n tietotyypit Merkkijonot CHAR (n) VARCHAR(n) n välillä 1..255 n:n mittainen merkkijono (kiinteämittainen) korkeintaan n:n mittainen merkkijono (vaihtuvamittainen) Esim. hloid CHAR (5) titteli VARCHAR (30) Tarkka luku DECIMAL desimaaliluku [pituus[,desimaalin pituus]] INTEGER kokonaisluku [-2 147 483648, 2 147 483647] SMALLINTEGER kokonaisluku [-32 768, 32 767] NUMERIC Esim. Hloid SMALLINT Palkka DECIMAL (7,2) ==> ylin arvo 99 999.99 Liukuluku FLOAT Liukuluku välillä [ 5,4*1079 7,2*1075] REAL DOUBLE PRECISION Esim. 10E3 5.2E6 0.2E 4
HELIA TIKO-05 9 (22) Aika DATE TIME [time_precision] [WITH TIME ZONE] TIMESTAMP [time_precision] [WITH TIME ZONE] INTERVAL time_precision Päivämäärä Kellonaika: tunti minuutti ja sekunti Kalenteriaika +kellonaika sekuntien tarkkuus, oletus 0 eli kokonaiset sekunnit Esim. tentti_pvm DATE aloitus_aika TIME Bittijono BIT [n] BIT VARYING [n] Kiinteämittainen bittijono Vaihtuvamittainen bittijono Esim. bit_jono BIT (5) bit_jono BIT VARYING (30)
HELIA TIKO-05 10 (22) Eheyssääntöjen määrittely Eheyssääntö voidaan kirjoittaa a) Taulukohtaisesti (onnistuu aina) b) Sarakekohtaisesti (jos sääntö kohdistuu vain 1 sarakkeeseen) Pääavain a) [CONSTRAINT nimi] PRIMARY KEY (sarakelista) b) PRIMARY KEY Viiteavain a) [CONSTRAINT nimi] FOREIGN KEY (sarakelista) REFERENCES [omistaja.]perustaulu[(sarakelista)] b) FOREIGN KEY REFERENCES [omistaja.]perustaulu[(sarakelista)] Huom! Hakasulut tarkoittavat vapaavalintaista komennon osaa Esim. [constraint nimi]
HELIA TIKO-05 11 (22) Esim. Taulukohtaiset eheyssäännöt CREATE TABLE property_for_rent (pno VARCHAR (5) NOT NULL,street VARCHAR (25) NOT NULL,city VARCHAR(15) NOT NULL,type CHAR(1) NOT NULL DEFAULT F,rooms SMALLINT NOT NULL DEFAULT 4,rent DECIMAL(6,2) NOT NULL DEFAULT 0,checked DATE NOT NULL,ono VARCHAR(5) NOT NULL,sno VARCHAR(5),bno VARCHAR(3) NOT NULL,PRIMARY KEY (pno),foreign KEY (sno) REFERENCES staff,foreign KEY (ono) REFERENCES owner,foreign KEY (bno) REFERENCES branch ); Esim. Sarakekohtaiset eheyssäännöt CREATE TABLE property_for_rent (pno VARCHAR (5) NOT NULL PRIMARY KEY,street VARCHAR (25) NOT NULL,city VARCHAR(15) NOT NULL,type CHAR(1) NOT NULL DEFAULT F,rooms SMALLINT NOT NULL DEFAULT 4,rent DECIMAL(6,2) NOT NULL DEFAULT 0,checked DATE NOT NULL,ono VARCHAR(5) NOT NULL FOREIGN KEY REFERENCES owner,sno VARCHAR(5) FOREIGN KEY REFERENCES staff,bno VARCHAR(3) NOT NULL FOREIGN KEY REFERENCES branch );
HELIA TIKO-05 12 (22) Esim. Kurssihallinto OPETTAJA Opettajano Ope_sukunimi Ope_etunimi Ope_lyhenne Ope_puh KURSSI Kurssino Kurssin_nimi Vastuuopettajano KURSSITOTEUTUS Kurssino Toteutusno Kurs_Opettajano Aloitus_pvm OPISKELIJA Opiskelijano Opi_sukunimi Opi_etunimi Opi_katuosoite Opi_postino Opi_aloitusvuosi CREATE TABLE opettaja (opettajano INTEGER PRIMARY KEY,ope_sukunimi VARCHAR(30) NOT NULL,ope_etunimi VARCHAR(20) NOT NULL,ope_lyhenne CHAR(5) VARCHAR(20),ope_puh ); CREATE TABLE kurssitoteutus (kurssino CHAR(6) NOT NULL,toteutusno INT NOT NULL,kurs_opettajano INT NOT NULL,aloitus_pvm DATE NOT NULL,CONSTRAINT pk_krstot PRIMARY KEY (kurssino,toteutusno),constraint fk_krstot_krs FOREIGN KEY (kurssino) REFERENCES kurssi(kurssino),constraint fk_krstot_ope FOREIGN KEY (kurs_opettajano) REFERENCES opettaja(opettajano) ); ILMOITTAUTUMINEN Kurssino Toteutusno Opiskelijano Arvosana Arvosana_pvm
HELIA TIKO-05 13 (22) Syntaksikuvaukset Backus Naur Form ~ BNF ~ SQL-syntaksin kuvauksessa käytetty kuvauskieli: 1. ISOT KIRJAIMET esittävät varattuja sanoja; ne on kirjoitettava määrämuotoisina 2. pienet kirjaimet esittävät käyttäjän määrittämiä sanoja 3. Pystyviiva tarkoittaa valintaa vaihtoehtojen välillä Esim. a b c a tai b tai c 4. Aaltosulut tarkoittavat vaadittua (=pakollista) elementtiä Esim. { a } 5. Hakasulut tarkoittavat vapaavalintaista elementtiä Esim. [ a ] 6. Kolme peräkkäistä pistettä (...) tarkoittavat valinnaista toistoa 0 tai useamman kerran Esim. { a b } [, c...]
HELIA TIKO-05 14 (22) Taulun luonti CREATE TABLE [omistaja.] taulu ( {sarakenimi tietotyyppi [,...] [DEFAULT vakio systeemimuuttuja] [NOT NULL] [[CONSTRAINT nimi] (sarake-ehto)] [,[CONSTRAINT nimi] PRIMARY KEY (sarakelista)] {[,[CONSTRAINT nimi] UNIQUE (sarakelista)] [,...]} {[,[CONSTRAINT nimi] FOREIGN KEY (sarakelista) [,...] } ); REFERENCES [omistaja.]perustaulu[(sarakelista)]
HELIA TIKO-05 15 (22) Taulun muuttaminen ALTER TABLE taulunimi ADD ( {sarakenimi tietotyyppi [,...] [DEFAULT vakio systeemimuuttuja] [NOT NULL] [[CONSTRAINT nimi] (sarake-ehto)] [,[CONSTRAINT nimi] PRIMARY KEY (sarakelista)] {[,[CONSTRAINT nimi] UNIQUE (sarakelista)] [,...]} {[,[CONSTRAINT nimi] FOREIGN KEY (sarakelista) [,...] } ); REFERENCES [omistaja.]perustaulu[(sarakelista)] ALTER TABLE taulunimi ALTER ( {sarakenimi [tietotyyppi] [DEFAULT vakio systeemimuuttuja] [NOT NULL] [[CONSTRAINT nimi] (sarake-ehto)] [,...] [,[CONSTRAINT nimi] PRIMARY KEY (sarakelista)] {[,[CONSTRAINT nimi] UNIQUE (sarakelista)] [,...]} {[,[CONSTRAINT nimi] FOREIGN KEY (sarakelista) [,...] } ); REFERENCES [omistaja.]perustaulu[(sarakelista)]
HELIA TIKO-05 16 (22) Taulun poistaminen DROP TABLE taulunimi [RESTRICT CASCADE ] ; RESTRICT: poisto vain silloin, jos tauluun ei viitata mistään muusta taulusta CASCADE: poistetaan myös sellaiset rivit, joissa viitataan poistettavaan tauluun
HELIA TIKO-05 17 (22) DML ~ Data Manipulation ~ Tietojen käsittely INSERT UPDATE DELETE SELECT tiedon (rivien) lisäys tauluun taulussa olevan tiedon muuttaminen / päivitys tiedon (rivien) poisto taulusta kysely tietokannasta Literaalit ovat SQL:ssä käytettäviä vakioita Niitä erotetaan tässä kaksi päätyyppiä: 1. Yksinkertaisissa lainausmerkeissä olevat ( ) Ei-numeeriset arvot Manager Päivämäärät 2000-09-20 2. Ilman lainausmerkkejä olevat numeeriset arvot 45
HELIA TIKO-05 18 (22) Lisäys, INSERT kahdenlaisia lisäyksiä: a) sallii yhden rivin lisäämisen nimettyyn tauluun b) useamman rivin kopiointi taulusta toiseen (tätä käsitellään kurssin lopulla)
HELIA TIKO-05 19 (22) a) Yhden rivin lisäämisen nimettyyn tauluun INSERT INTO table_name [ (column_list) ] VALUES (data_value_list) ; table_name column_list data_value_list taulun (tai näkymän) nimi yksi tai useampi sarakenimi pilkulla erotettuna / vapaaehtoinen: jos puuttuu SQL hakee listan CREATE TABLE kuvauksen mukaan lisättäviä arvoja on oltava yhtä monta kuin taululla on sarakkeita jos sarakenimiä on puuttuvat sarakkeet alustetaan oletusarvoilla tai NULL-arvoilla yhteensopiva column_list:n kanssa: arvojen lukumäärä sama järjestys sama arvon kuuluttava ko. sarakkeen arvojoukkoon sovelluksen koodiin sarakenimet kannattaa aina laittaa
HELIA TIKO-05 20 (22) Esim. Lisää staff-tauluun uusi henkilö. INSERT INTO staff VALUES ( SG16, Alan,, Brown,, 67 Endrick Rd, Glasgow G32 9QX, 0141-211-3001, Assistent, M,DATE 1957-05-25,8300, WN848391H, B3 ); Esim. Lisää työntekijä, jonka tiedoista tiedetään vain numero, nimi, asema, sukupuoli, palkka ja haarakonttori INSERT INTO staff (sno, fname, lname, position, sex, salary, bno) VALUES ( SG44, Anne, Jones, Assistent, F, 8300, B3 );
HELIA TIKO-05 21 (22) Poisto, DELETE DELETE FROM table_name [WHERE search_condition]; Jos WHERE-määre esiintyy, poistetaan vain ehdon täyttävät rivit, muuten poistetaan taulun kaikki rivit Esim. Poista kaikki asuntokohteiden näytöt. DELETE FROM viewing; Esim. Poista kaikki asuntokohteelle PG4 tapahtuneet näytöt. DELETE FROM viewing WHERE pno= PG4 ;
HELIA TIKO-05 22 (22) Haku, SELECT SELECT-lause etsii ja näyttää tietoja yhdestä tai useammasta tietokannan taulusta SELECT [DISTINCT ALL] { * [column_expression [AS new_name]] [,...]} FROM table_name [alias] [,...] [WHERE condition] [GROUP BY comlumn_list ] [HAVING condition] [ORDER BY column_list] Esim. SELECT * FROM staff; SELECT-komentoon tutustutaan seuraavilla viikoilla