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... 13
HELIA 2 (14) SQL Structured Query Language Relaatiotietokantojen määrittely- ja käsittelykieli 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) Nykyään SQL:n sisältäviä relaatiotietokanta- & sovelluskehitysohjelmistoja satoja
HELIA 3 (14) 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 Suurin osa nykyisistä tietokannanhallintajärjestelmistä tukee SQL89:sta on toteuttanut osan SQL92-standardista on toteuttanut standardoimattomia piirteitä eri toimittajien SQL:t eivät välttämättä keskenään yhteensopivia!
HELIA 4 (14) Käyttö a) Itsenäisenä kyselykielenä b) Toisen ohjelmointikielen täydennyksenä c) Osana sovelluskehitysvälinettä DDL - tietokannan luominen ja ylläpito Tietokannan objektien (taulujen ja niihin liittyvien eheys- ym. sääntöjen, indeksien, käyttäjätunnusten, näkymien, ) luominen ja ylläpito 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 5 (14) DDL Tietokantaobjektien määrittely tietokannan (rakenteiden) luominen ja ylläpito 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 6 (14) SQL:n tietotyypit SQL-89 SQL-92 Access Solid 2 Tekstikentät char /character character varying nchar nvarchar Eksaktit numerokentät numeric dec / decimal int / integer smallint Likiarvoiset numerokentät float real double precision char long decimal integer tinyint Aikakentät date time timestamp time with timezone timestamp with timezone interval Muut kentät Bit
HELIA 7 (14) Bit varying
HELIA 8 (14) Esim. Kurssihallinto OPETTAJA Opettajano Ope_sukunimi Ope_etunimi Ope_lyhenne Ope_Puh OPISKELIJA Opiskelijano Opi_sukunimi Opi_etunimi Opi_katuosoite Opi_postino Opi_aloitusvuosi KURSSI Kurssino Kurssin_nimi Vastuuopettajano KURSSITOTEUTUS Kurssino Toteutusno Kurs_Opettajano Aloitus_pvm ILMOITTAUTUMINEN Kurssino Toteutusno Opiskelijano Arvosana Arvosana_pvm
HELIA 9 (14) Eheyssääntöjen määrittely Pääavain [CONSTRAINT nimi] PRIMARY KEY (sarakelista) Viiteavain [CONSTRAINT nimi] FOREIGN KEY (sarakelista) REFERENCES [omistaja.]perustaulu[(sarakelista)] [ON UPDATE [ON DELETE {CASCADE SET NULL SET DEFAULT NO ACTION } ] {CASCADE SET NULL SET DEFAULT NO ACTION } ] Arvojoukkoeheyssääntö [CONSTRAINT nimi] UNIQUE (sarakelista) [,...] [CONSTRAINT nimi] CHECK (riviehto) [,...]
HELIA 10 (14) Esim. CREATE TABLE property_for_rent ( pno VARCHAR (5) NOT NULL, street VARCHAR (25) NOT NULL, area VARCHAR(15), city VARCHAR(15) NOT NULL, pcode VARCHAR(8), type CHAR(1) NOT NULL DEFAULT F, rooms SMALLINT NOT NULL DEFAULT 4, rent DECIMAL(6,2) NOT NULL DEFAULT 0, ono VARCHAR(5) NOT NULL, sno VARCHAR(5) CONSTRANT staff_not_handling_too_much CHECK (NOT EXISTS SELECT sno FROM property_for_rent GROUP BY sno HAVING COUNT(*) > 10)), bno VARCHAR(3) NOT NULL, PRIMARY KEY (pno), FOREIGN KEY (sno) REFERENCES staff ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (ono) REFERENCES owner ON DELETE NO ACTION ON UPDATE CASCADE, FOREIGN KEY (bno) REFERENCES branch ON DELETE NO ACTION ON UPDATE CASCADE);
HELIA 11 (14) Indeksin määrittely Indeksin luominen CREATE [UNIQUE] INDEX index_name ON table_name (column [ASC DESC] [,...]) unique: hakemistoon ei voi laittaa hakemistokenttien duplikaatteja Esim. pääavaimen mukaisen hakemiston luonnissa käytetään UNIQUE-määrettä CREATE UNIQUE INDEX sno_ind ON staff (sno); CREATE UNIQUE INDEX pno_ind ON property_for_rent (pno); Indeksin poistaminen DROP INDEX rent_ind;
HELIA 12 (14) Esim. Kurssihallinto Laadi eheysmäärittelyt Luo indeksit OPETTAJA Opettajano Ope_sukunimi Ope_etunimi Ope_lyhenne Ope_Puh OPISKELIJA Opiskelijano Opi_sukunimi Opi_etunimi Opi_katuosoite Opi_postino Opi_aloitusvuosi KURSSI Kurssino Kurssin_nimi Vastuuopettajano KURSSITOTEUTUS Kurssino Toteutusno Kurs_Opettajano Aloitus_pvm ILMOITTAUTUMINEN Kurssino Toteutusno Opiskelijano Arvosana Arvosana_pvm
HELIA 13 (14) Syntaksikuvaukset 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)] [ON UPDATE {CASCADE SET NULL SET DEFAULT NO ACTION } ] [ON DELETE [,...] } {CASCADE SET NULL SET DEFAULT NO ACTION } ] { [, [CONSTRAINT nimi] CHECK (riviehto) ] [,...] } )
HELIA 14 (14) Taulun muuttaminen ALTER TABLE Puuttuu toistaiseksi... Taulun poistaminen DROP TABLE table_name [RESTRICT CASCADE ] RESTRICT: poisto vain silloin, jos tauluun ei viitata mistään muusta taulusta CASCADE: poistetaan myös sellaiset rivit, joissa viitataan poistettuun tauluun Esim. DROP TABLE property_for_rent;