72
HELIA 1 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Luento: SQL Johdanto Sql:ään ............................................................................... 2 Sql-komentojen kirjoittaminen ........................................................ 3 Backus Naur Form, BNF ............................................................. 5 Tietojen käsittely (Data Manipulation) ................................................ 6 Yksinkertaisia kyselyjä.................................................................... 7 Distinct-määre ............................................................................. 9 Rivien valinta eli WHERE ehto .................................................. 11 Lajittelu (Order By) .................................................................... 20 SQL operaatioita ja funktioita ....................................................... 22 Koostefunktiot (Aggregate Functions) .......................................... 24 Ryhmittely (GROUP BY) ........................................................... 27 HAVING - määre ....................................................................... 29 LIITOS eli Monen taulukon kyselyt (JOIN) ................................... 31 Karteesinen tulo ........................................................................ 37 Ulkoliitos (Outer join) ................................................................. 38 Alikyselyt (subqueries).................................................................. 43 ANY ja ALL................................................................................ 46 EXISTS ja NOT EXISTS ........................................................... 48 Yhdiste (union), Leikkaus (intersect), Erotus (except) ................. 49 Tietokannan datan muokkaus .......................................................... 53 Lisäys, INSERT ............................................................................ 53 Päivitys, UPDATE......................................................................... 58 Poisto, DELETE............................................................................ 59 TIEDON MÄÄRITTELY (Data Definition) ......................................... 60 Tietotyypit ..................................................................................... 61 Tietokannan luonti ........................................................................ 66 Tietokannan poisto ....................................................................... 67 Taulun luonti (Create Table .......................................................... 68 Taulun poistaminen (Drop Table) ................................................. 70 Näkymän luonti (Create View) ...................................................... 71 Indeksin luonti (Create Index)....................................................... 72

Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 1 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Luento: SQL

Johdanto Sql:ään............................................................................... 2Sql-komentojen kirjoittaminen ........................................................ 3

Backus Naur Form, BNF............................................................. 5Tietojen käsittely (Data Manipulation)................................................ 6

Yksinkertaisia kyselyjä.................................................................... 7Distinct-määre ............................................................................. 9Rivien valinta eli WHERE ehto.................................................. 11Lajittelu (Order By) .................................................................... 20

SQL operaatioita ja funktioita ....................................................... 22Koostefunktiot (Aggregate Functions) .......................................... 24

Ryhmittely (GROUP BY) ........................................................... 27HAVING - määre ....................................................................... 29

LIITOS eli Monen taulukon kyselyt (JOIN) ................................... 31Karteesinen tulo ........................................................................ 37Ulkoliitos (Outer join)................................................................. 38

Alikyselyt (subqueries).................................................................. 43ANY ja ALL................................................................................ 46EXISTS ja NOT EXISTS ........................................................... 48

Yhdiste (union), Leikkaus (intersect), Erotus (except)................. 49Tietokannan datan muokkaus.......................................................... 53

Lisäys, INSERT ............................................................................ 53Päivitys, UPDATE......................................................................... 58Poisto, DELETE............................................................................ 59

TIEDON MÄÄRITTELY (Data Definition)......................................... 60Tietotyypit ..................................................................................... 61Tietokannan luonti ........................................................................ 66Tietokannan poisto ....................................................................... 67Taulun luonti (Create Table .......................................................... 68Taulun poistaminen (Drop Table) ................................................. 70Näkymän luonti (Create View)...................................................... 71Indeksin luonti (Create Index)....................................................... 72

Page 2: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 2 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Johdanto Sql:ään

• SQL on ensimmäinen ja ainoa laajasti hyväksyttytietokantakieli

• ISO:n (International Standards Organization) ja ANSI:n(American National Standards Institute)hyväksymä kieli

1. SQL892. SQL923. SQL99

• SQL:ssä on 2 pääkomponenttia:

• Tiedon määrittelykieli(Data Definition Language = DDL)

• Tietokantarakenteen määrittelyyn

• Tiedon käsittelykieli(Data Manipulation Language = DML)

• Tiedon hakuun ja päivittämiseen

• SQL:ää voidaan käyttää kahdella tavalla:

1. Interaktiivisesti työasemalta2. Upotettuna proseduraaliseen kieleen

Page 3: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 3 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Sql-komentojen kirjoittaminen

• SQL-lauseet muodostuvat seuraavista osista:

Varatut sanat

• Kirjoitettava ja käytettävä tiukan säännön mukaan• Kirjoitetaan yleensä isoilla kijaimilla

(pienetkin menevät kääntäjästä läpi)

Käyttäjän määrittelemät sanat

• Yleisesti ottaen voidaan kirjoittaa isoilla tai pienilläkirjaimilla

• Dataa käsiteltäessä on kirjaimet kirjoitettava isoilla taipienillä sen mukaan,mitä ne todellisuudessa ovat elimiten ne on talletettu tietokantaan

esim.sukunimi = ‘SMITH’

Page 4: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 4 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

• Vaikka lauseiden kirjoittaminen on varsin vapaata,suositellaan seuraavien ohjeiden noudattamista:

• Kukin määre lauseessa (clause)pitäisi alkaa uudelta riviltä

• kukin määre lauseessa samalla linjalla

Esim.

SELECT sno, fname, lname,position FROM staff WHERE position = ‘Manager’;

• jos määre sisältää useita osia, käytetään sisennystä,jotta määreen merkitys tulisi paremmin näkyviin

Esim.

SELECT sno, fname, lname, position, bno FROM staff WHERE position = ‘Manager’;

Page 5: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 5 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Backus Naur Form, BNF

• SQL-syntaksin kuvauksessa käytetty kuvauskieli:

− ISOJA KIRJAIMIA käytetään esittämään varattuja sanojaja ne on kirjoitettava määrämuotoisina

− Pieniä kirjaimia käytetään ilmaisemaan käyttäjänmäärittämiä sanoja

− Pystyviiva tarkoittaa valintaa vaihtoehtojen välillä;

Esim. a|b|c a tai b tai c

− Aaltosulut tarkoittavat vaadittua elementtiä;

Esim. {a}

− Hakasulut tarkoittavat vapaavalintaista elementtiä;

Esim. [a]

− Kolme peräkkäistä pistettä (...) tarkoittavatvalinnaista toistoa 0 tai useamman kerran;

Esim. {a|b}[,c...]

Page 6: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 6 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Tietojen käsittely (Data Manipulation)

DML-käskyt

• SELECT tietokannan kysely

• INSERT tiedon lisäys

• UPDATE tiedon päivitys

• DELETE tiedon tuhoaminen

• Literaalit ovat SQL:ssä käytettäviä vakioita

• Niitä erotetaan tässä kaksi päätyyppiä:

→ Yksinkertaisissa lainausmerkeissä olevat (‘)

Ei-numeeriset arvot ilmoitetaan näin,esim. ‘Manager’

Päivämäärät esim. ‘2000-09-20’

→ Ilman lainausmerkkejä olevat

Numeeriset arvot ilmoitetaan näin,esim. 45

Page 7: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 7 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Yksinkertaisia kyselyjä

• Lauseen SELECT tehtävänä on etsiä ja näyttää tietoayhdestä tai useammasta tietokannan taulusta

• Lauseen SELECT yleinen muoto on seuraava:

SELECT [DISTINCT|ALL] {*| [column_expression [AS new_name]] [,...]}

FROM table_name [alias] [,...]

[WHERE condition]

[GROUP BY comlumn_list] [HAVING condition]

[ORDER BY column_list]

select- lauseen järjestys:

FROM määräätään taulukot, joita käytetään

WHERE määrätään ehdon täyttävät rivit

GROUP BY ryhmitellään edellinen tulos

HAVING ryhmien valinta ehdon mukaan

SELECT määrätään sarakkeet, jotka valitaan

ORDER BY lajittelu

Page 8: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 8 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Esim. Kaikki sarakkeet, kaikki rivit. Listaa kaikkien henkilöiden kaikki tiedot.

SELECT sno, fname, lname, address, tel_no, position, sex,dob, salary, nin, bno

FROM staff;

tai

SELECT * FROM staff;

Esim. Tietyt sarakkeet, kaikki rivit (vrt. PROJEKTIO)

Listaa kaikkien henkilöiden numerot, nimet ja palkat.

SELECT sno, fname, lname, salary FROM staff;

sno

SL21SG37SG14SA9SG5SL41

fname

JohnAnnDavidMarySusanJulie

lname

WhiteBeechFordHoweBrandLee

address

...

tel_no

...

position

ManagerSnr AsstDeputyAssistantManagerAssistent

sex

MFMFFF

dob

...

salary

30000.0012000.0018000.009000.0024000.009000.00

nin

...

bno

B5B3B3B7B3B5

sno

SL21SG37SG14SA9SG5SL41

fname

JohnAnnDavidMarySusanJulie

lname

WhiteBeechFordHoweBrandLee

salary

30000.0012000.0018000.009000.0024000.009000.00

Page 9: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 9 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Distinct-määre

• DISTINCT sarake ==> valitaan vain yksi rivi yhtäsarakkeen arvoa kohti (dublikaatit jää pois)

• DISTINCT:N vastakohta on ALL, joka toimii oletuksena. Eisiis tarvitse kirjoittaa.

Esim. Hae kaikki vuokrattavien kohteiden numerot, joilla on ollutnäyttö

ratkaisu 1:

SELECT pno ==> Tulos FROM viewing;

ratkaisu 2:

SELECT DISTINCT pno ==> Tulos FROM viewing;

pno

PA14PG4PG4PA14PG36

pno

PA14PG4PG36

Page 10: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 10 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Esim. Lasketut kentät

Tuota lista henkilöiden numeroista, nimistä ja palkoista siten,että henkilön palkka tulostetaan kukkausipalkkana

SELECT sno, fname, lname, salary/12 FROM staff;

tai SELECT sno, fname, lname, salary/12 AS

monthly_salary FROM staff;

• Kentän uusi nimi kerrotaan siis varatun sanan ASjälkeen

sno

SL21SG37SG14SA9SG5SL41

fname

JohnAnnDavidMarySusanJulie

lname

WhiteBeechFordHoweBrandLee

col4

2500.001000.001500.00

750.002000.00

750.00

sno

SL21SG37SG14SA9SG5SL41

fname

JohnAnnDavidMarySusanJulie

lname

WhiteBeechFordHoweBrandLee

Monthly_salary

2500.001000.001500.00

750.002000.00

750.00

Page 11: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 11 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Rivien valinta eli WHERE ehto

A) Vertailu (comparison): vertaa lauseketta toiseen

vertauluoperaattorit:

=, < , > , <= , >=

<> (erisuuruus ISO standardi),

!= (erisuuruus ei ISO)

Esim. Listaa kaikki henkilöt, joiden palkka on suurempi kuin10 000 £.

SELECT sno, fname, lname, salary FROM staff WHERE salary > 10000;

sno

SL21SG37SG14SG5

fname

JohnAnnDavidSusan

lname

WhiteBeechFordBrand

salary

30000.0012000.0018000.0024000.00

Page 12: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 12 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

B) Loogiset operaattorit:

OR, AND , NOT

• lausekkeen evaluointi vasemmalta oikealla

• suluissa oleva evaluoidaan ensin

• operaatoreiden prioriteettijärjestys: NOT, AND ja OR

Esim. Tulosta henkilönumerot henkilöiltä, joiden nimi onJohn White

SELECT sno FROM staff WHERE fname = ‘John’ AND lname = ‘White’;

sno

SL21

Page 13: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 13 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Esim. Listaa sellaisten haarakonttoreiden osoitteet, jotkasijaitsevat Lontoossa tai Glasgow:ssa.

SELECT bno, street, area, city, pcode FROM branch WHERE city = ‘London’ OR city = ‘Glasgow’;

Bno

B5B3B2

Street

22m Deer Rd163 Main St56 Clover Dr

Area

SidcupPatrick

City

LondonGlasgowLondon

Pcode

SW1 4EHG11 0QXNW10 6EU

Page 14: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 14 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

C) Arvoväli (range): testaa kuluuko lausekkeen arvo tiettyjen arvojen väliin

BETWEEN tai NOT BETWEEN

Esim. Listaa sellaisten henkilöiden tiedot, joiden palkka onvälillä 20 000 £ – 30 000 £

SELECT sno, fname, lname, position, salary FROM staff WHERE salary BETWEEN 20000 AND 30000;

tai

SELECT sno, fname, lname, position, salary FROM staff WHERE salary >=20000 AND salary <=30000;

sno

SL21SG5

fname

JohnSusan

lname

WhiteBrand

position

ManagerManager

salary

30000.0024000.00

Page 15: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 15 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

D) Joukko (set membership): testaa kuuluuko lausekkeenarvo johonkin arvojoukkoon

IN tai NOT IN

Esim. Listaa kaikki “managerit“ ja “deputyt“.

SELECT sno, fname, lname, position FROM staff WHERE position IN (‘Manager’, ‘Deputy’);

tai

SELECT sno, fname, lname, position FROM staff WHERE position =‘Manager’

OR position=‘Deputy’;

sno

SL21SG14SG5

fname

JohnDavidSusan

lname

WhiteFordBrand

position

ManagerDeputyManager

Page 16: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 16 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

E) Kaava (pattern match): testaa noudattaako merkkijonotiettyä kaavaa

LIKE tai NOT LIKE

% tarkoitta mitä tahansa merkkijonoa

– tarkoittaa mitä tahansa merkkiä

Esimerkkejä

sarake LIKE ‘H%’ sarakkeen arvo alkaa H:lla, loput mitä tahansa

sarake LIKE ‘H----’ sarakkeen arvo alkaa H:lla ja sitäpitää seurata 4 merkkiä

sarake LIKE ‘%e’ mikä tahansa merkkijono, jonka pituus on vähintään 1

ja joka päättyy kirjaimeen ‘e’

sarake NOT LIKE ‘H%’ sarkkeen arvo ei saa alkaa H:lla

sarake ‘15#%’ ESCAPE ‘#’ sarakkeen arvo 15%

Page 17: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 17 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Esim. Etsi kaikki henkilöt, joiden osoitekentässä on ‘Glasgow’-merkkijono

SELECT sno, fname, lname,address FROM staff WHERE address LIKE ‘%Glasgow%’;

sno

SG37SG14SG5

fname

AnnDavidSusan

lname

BeechFordBrand

address

81 George St,Glasgow PA1 2JR63 Ashby St, Patrick,Glasgow G115 Gt Western Rd,Glasgow G12

Page 18: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 18 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

F) Tyhjä (Null): testaa onko sarakkeen arvo tyhjä

IS NULL

tai

IS NOT NULL

Esim. Etsi sellaisten näyttöjen katsojien numerot, kohteidennumerot ja päivämäärät, joissa ei ole kommentteja

SELECT rno, pno, date FROM viewing WHERE comment IS NULL;

rno

CR56CR56

pno

PG4PG36

date

26-May-9528-Apr-95

Page 19: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 19 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

PÄIVÄMÄÄRÄSTÄ

• Päivämäärille on olemassa tyypit

• Date pelkkä päivämäärä

• Timestamp päivämäärä ja aika

• Tiedot talletetaan muodossa yyyy-mm-dd

• Jos päiväyksestä halutaan saada erikseen esim. vuosikäytetään extract –funktiota

Esim.

SELECT EXTRACT (YEAR FROM date) FROM viewing WHERE comment IS NULL;

• Samoin toimivat päivä (DAY) ja kuukausi (MONTH)

Page 20: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 20 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Lajittelu (Order By)

• lajittelu perustuu sarakkeiden nimiin

• ORDER BY -sivulauseeseen liitetään sarakkeidennimet, joiden mukaan lajitellaan

• lajittelu voi olla nouseva (ASCENDING, ASC , oletus)tai laskeva (DESCENDING, DESC)

• Jos lajittelusarakkeita useita, erotetaan ne toisistaanpilkulla

Esim. Listaa henkilöstö aakkosjärjestyksessä nimen mukaan

SELECT sno, fname, lname, salary FROM staff ORDER BY lname, fname;

sno

SG37SG5SG14SA9SL41SL21

fname

AnnSusanDavidMaryJulieJohn

lname

BeechBrandFordHoweLeeWhite

salary

12000.0024000.0018000.009000.009000.0030000.00

Page 21: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 21 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Esim. Listaa vuokrattavat huoneiston tyypin mukaisessajärjestyksessä

SELECT pno, type, rooms, rent FROM property_for_rent ORDER BY type;

Esim. Listaa vuokrattavat huoneiston tyypin mukaisessajärjestyksessä siten, että kalleimmat ensin

SELECT pno, type, rooms, rent FROM property_for_rent ORDER BY type, rent DESC;

Type

FlatFlatFlatFlatHouseHouse

Rooms

433465

Rent

400350375450650600

Pno

PL94PG4PG36PG16PA14PG21

Type

FlatFlatFlatFlatHouseHouse

Rooms

443365

Rent

450400375350650600

Pno

PG16PL94PG36PG4PA14PG21

Page 22: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 22 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

SQL operaatioita ja funktioita

|| Katenoi kaksi merkki-, tai bittijonoa Esim. fname || lname

UPPER muuttaa pienet kirjaimet suuriksi

LOWER muuttaa suuret kirjaimet pieniksi

CHAR_LENGTH palauttaa merkkijonon pituudenEsim. CHAR_LENGTH(‘Beech’) palauttaa 5

SUBSTRING palauttaa osajonon merkkijonostaEsim. SUBSTRING(‘Beech’ FROM 1 to 3)palauttaa merkkijonon ‘Bee’

POSITION palauttaa merkkijonon position toisestamerkkijonostaEsim. POSITION (‘ee’ IN ‘Beech’) palauttaa 2

TRIM poistaa merkkijonosta johtavat (LEADING),lopettavat (TRAILING) tai molemmat merkitEsim. TRIM (BOTH ‘*’ FROM ‘*** Hello World ***’)palauttaa merkkijonon ‘Hello World’

CAST konvertoi lausekkeen arvon toisen tyyppiseksiEsim. CAST(5E3 AS INTEGER)

Page 23: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 23 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

CURRENT_DATE palauttaa nykyisen päivämäärän

CURRENT_TIME palauttaa nykyisen ajanhetken Esim. CURRENT_TIME(2) palauttaa ajan sadasosasekunnin tarkkuudella

CURRENT_TIME_STAMP palauttaa nykyisen päivämäärän ja ajan Esim. CURRENT_TIME_STAMP(0) palauttaa päivämäärän ja ajan sekunnin tarkkuudella

EXTRACT palauttaa ajan tai jakson osan Esim. EXTRACT (YEAR FROM staff.dob)

CURRENT_USER palauttaa nykyisen käyttäjän tunnuksen tai USER

SESSION_USER palauttaa istunnon hallitsijan tunnuksen

SYSTEM_USER palauttaa systeemikäyttäjän tunnuksen

CASE palauttaa arvon esimerkiksi seuraavasti CASE type WHEN ‘House’ THEN 1 WHEN ‘Flat’ THEN 2 ELSE 0 END

Page 24: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 24 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Koostefunktiot (Aggregate Functions)

• ISO:n standardissa määritellään 5 ryhmäfunktiota

COUNT: palauttaa valitun sarakkeen arvojen lukumäärän

SUM: palauttaa valitun sarakkeen summan

AVG: palauttaa valitun sarakkeen arvojen keskiarvon

MIN: palauttaa valitun sarakkeen pienimmän arvon

MAX: palauttaa valitun sarakkeen suurimman arvon

Page 25: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 25 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Esim. Kuinka monen vuokrattavan vuokra on enemmän kuin350 £?

SELECT COUNT(*) AS Lukumäärä FROM property_for_rent WHERE rent > 350;

Esim. Montako eri vuokrattavaa näytettiin toukokuussa 1995?

SELECT COUNT (DISTINCT pno) AS Lukumäärä FROM viewing WHERE date BETWEEN ‘1-May-95’ AND

‘31-May-95’;

Lukumäärä

5

Lukumäärä

2

Page 26: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 26 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Esim. Laske kaikkien managerien lukumäärä ja palkkojensumma.

SELECT Count (sno) AS lkm, SUM (salary) AS summa

FROM staff WHERE position = ‘Manager’;

Esim. Etsi pienin ja suurin palkka sekä palkkojen keskiarvo.

SELECT MIN(salary) AS pienin, MAX(salary) AS suurin, AVG(salary) AS keskiarvo FROM staff;

• Huomaa, että koostefunktioita käyttäessäsi, et voi tulostaataulun varsinaisia kenttiä. (Paitsi, jos käytät GROUP BY:ta)

lkm

2

summa

54000.00

keskiarvo

17000.00

suurin

30000.00

pienin

9000.00

Page 27: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 27 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Ryhmittely (GROUP BY)

• ryhmittelee valitut rivit ja tuottaa jokaisesta ryhmästäyhden rivin

• SÄÄNTÖ: select-lause voi sisältää

→ niitä sarakkeita, jotka esiintyvät myös GROUP BY-määreessä

→ koostefunktioita

→ vakioita

→ lausekkeen, joka sisältää edellisten kombinaatioita

• ISO-STANDARDI: jos kahdella rivillä on ryhmittelysarakkeen arvo NULL

==> rivit joutuvat samaan ryhmään

Page 28: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 28 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Esim. Laske jokaisen haarakonttorin työntekijät ja palkkojensumma haarakonttoreittain

SELECT bno, COUNT (sno) AS lkm, SUM(salary) AS summa

FROM sfaff GROUP BY bno;

Mitä tapahtuu:

bno sno salary COUNT(sno) SUM(salary)

B5 SL21 30000.00 2 39000.00 B5 SL41 9000.00

B3 SG37 12000.00 B3 SG14 18000.00 3 54000.00 B3 SG5 24000.00

B7 SA9 9000.00 1 9000.00

==>

ryhmitellään valitutsarakkeet ja rivit bno:nmukaan järjestykseen

lasketaan lukumäärä jasumma ryhmittäin

bno

B5B3B7

lkm

231

summa

39000.0054000.009000.00

==>

Page 29: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 29 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

HAVING - määre

• asettaa ehdon ryhmien valintaan eli valitaan siis HAVING-ehdon täyttävät ryhmät

• ISO-STANDARDI: sarakkeet, jotka esiintyvät HAVING-ehdossa, täytyy esiintyä GROUP BY-määreessä tai olla koostefunktionparametrina

Esim. Laske sellaisten haarakonttorien työntekijät japalkkojen summat, joilla on työntekijöitä enemmänkuin yksi.

SELECT bno, COUNT(sno) AS lkm, SUM(salary) AS summa FROM staff GROUP BY bno HAVING COUNT (sno) > 1;

bno

B5B3

lkm

23

summa

39000.0054000.00

Page 30: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 30 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

WHERE VS. HAVING

• HAVING –osuutta ei voi käyttää ilman GROUP BY –osuutta

• WHERE –osuuteen tulevat ehdot kohdistuvat kuhunkin riviin

• HAVING –osuuden ehdot kohdistuvat ryhmiin ts. millaisiaryhmiä muodostetaan.

• HAVING –osuutta tarvitaan yleensä vain silloin, kun tarvitaanehtoon joku kooste

Page 31: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 31 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

LIITOS eli Monen taulukon kyselyt (JOIN)

A) JOIN-operaatio

Esim: Listaa sellaisten vuorkaajien nimet, joille on näytetty vähintään yksi vuokrattavana

oleva kohde.

SQL-89:

SELECT r.rno, fname, lname, pno, comment FROM renter r, viewing v WHERE r.rno = v.rno;

tauluille annettualiasnimet:renter = rviewing = v

viittaus renterinsarakeeseen rno

viittaus renterinsarakeeseen rnoja viewinginsarakkeeseen rno

rno

CR76CR56CR56CR56CR62

comment

too remote

too small

no dining room

fname

JohnAlineAlineAlineMary

lname

KayStewartStewartStewartTregear

pno

PG4PG36PA14PG4PA14

Page 32: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 32 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

SQL-92 JOIN OPERAATIOT:

SELECT r.rno, fname, lname, pno, comment FROM renter r JOIN viewing v ON r.rno = v.rno;

SELECT rno, fname, lname, pno, comment FROM renter JOIN viewing USING rno;

SELECT rno, fname, lname, pno, comment FROM renter NATURAL JOIN viewing;

Page 33: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 33 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Esim. Listaa jokaisen haarakonttorin työntekijät, joilla onhoidettavanaan vuokrattava kohde.

SQL-89:

SELECT s.bno, s.sno, fname, lname, pno FROM staff s, property_for_rent p WHERE s.sno = p.sno;

SQL-92:

SELECT s.bno, s.sno, fname, lname, pno FROM staff s JOIN property_for_rent p ON s.sno=p.sno;

SELECT staff.bno, sno, fname, lname, pno FROM staff JOIN property_for_rent USING sno;

SELECT staff.bno, sno, fname, lname, pno FROM staff NATURAL JOIN property_for_rent;

sno

SG37SG37SG14SG14SA9SL41

fname

AnnAnnDavidDavidMaryJulie

lname

BeechBeechFordFordHoweLee

pno

PG21PG36PG4PG16PA14PL94

bno

B3B3B3B3B7B5

Page 34: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 34 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Esim. Listaa jokaisen haarakonttorin työntekijät, joilla on hoidettavanaan vuokrattava kohde listausjärjestys

haarakontteittain, työntekijöittäin ja kohteittain.

SQL-89:

SELECT s.bno, s.sno, fname, lname, pno FROM staff s, property_for_rent p WHERE s.sno = p.sno ORDER BY s.bno, s.sno, pno;

SQL-92:

SELECT s.bno, s.sno, fname, lname, pno FROM staff s JOIN property_for_rent p ON s.sno=p.sno ORDER BY s.bno, s.sno, pno;

SELECT staff.bno, sno, fname, lname, pno FROM staff JOIN property_for_rent

USING sno ORDER BY staff.bno, sno, pno;

sno

SG14SG14SG37SG37SL41SA9

fname

DavidDavidAnnAnnMaryJulie

lname

FordFordBeechBeechHoweLee

pno

PG4PG16PG21PG36PL94PA14

bno

B3B3B3B3B5B7

Page 35: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 35 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Esim. Kolmen taulukon liitos:

Listaa jokaisen haarakonttorin työntekijät, joilla onhoidettavanaan vuokrattava kohde – listausjärjestyshaarakontteittain, työntekijöittäin ja kohteittain. Listaahaarakonttorin lisäksi haarakonttorin kaupunki.

SQL-89:

SELECT b.bno, b.city, s.sno, fname, lname, pno FROM branch b, staff s, property_for_rent p WHERE b.bno = s.bno

AND s.sno = p.sno ORDER BY b.bno, s.sno, pno;

SQL-92:

SELECT b.bno, b.city, s.sno, fname, lname, pno FROM branch b JOIN staff s ON b.bno=s.bno JOIN property_for_rent p ON s.sno=p.sno ORDER BY b.bno, s.sno, pno;

SELECT bno, b.city, sno, fname, lname, pno FROM branch b JOIN staff s USING bno JOIN property_for_rent USING sno ORDER BY bno, sno, pno;

Esim: Laske jokaisen haarakonttorin työntekijöittäin

sno

SG14SG14SG37SG37SL41SA9

fname

DavidDavidAnnAnnMaryJulie

lname

FordFordBeechBeechHoweLee

pno

PG4PG16PG21PG36PL94PA14

bno

B3B3B3B3B5B7

city

GlasgowGlasgowGlasgowGlasgowLondonAberdeen

Page 36: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 36 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

vuokrattavana olevat kohteet.

SQL-89:

SELECT s.bno, s.sno, COUNT (*) as lkm FROM staff s, property_for_rent p WHERE s.sno=p.sno GROUP BY s.bno, s.sno ORDER BY s.bno, s.sno

SQL-92:

SELECT s.bno, s.sno, COUNT (*) as lkm FROM staff s JOIN property_for_rent p ON s.sno=p.sno GROUP BY s.bno, s.sno ORDER BY s.bno, s.sno;

SELECT s.bno, sno, COUNT (*) as lkm FROM staff s JOIN property_for_rent

USING sno GROUP BY s.bno, sno ORDER by s.bno, sno;

bno

B3B3B5B7

sno

SG14SG37SL41SA9

lkm

2211

Page 37: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 37 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Karteesinen tulo

SELECT [DISTINCT|ALL] {* | column_list } FROM table_name1 CROSS JOIN table_name2;

SELECT [DISTINCT|ALL] {* | column_list } FROM table_name1, table_name2;

Liitoksen tuottaminen:

1. Tee ensin karteesinen tulo

2. Jos lauseessa on WHERE-määre, poista kaikki ne rivitjotka eivät toteuta where-ehtoa

3. Jätä vain lauseessa luetellut sarakkeet

4. Jos SELECT DISTINCT on määritelty, poista duplikaatit

5. Jos lause sisältää ORDER BY-määreen, lajitteletaulukko

Page 38: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 38 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Ulkoliitos (Outer join)

Esim.

BRANCH PROPERTY_FOR_RENT

(Sisä)liitos:

Esim: Listaa sellaisista haarakonttoreista, jotka sijaitsevatsamassa kaupungissa kuin vuokrattana oleva kohde,osastonumero ja kaupunki sekä vuokrattavastakohteesta kohdenumero ja sijaintikaupunki.

SELECT b.bno, b.bcity, p.pno, p.pcity FROM branch b JOIN property_for_rent ON

b.bcity = p.pcity;

bno

B3B4B2

bcity

GlasgowBristolLondon

pno

PA14PL94PG4

pcity

AberdeenLondonGlasgow

bno

B3B2

bcity

GlasgowLondon

pno

PG4PL94

pcity

GlasgowLondon

Page 39: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 39 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

VASEMMANPUOLEINEN ULKOLIITOS (left outer join)

Esim. Listaa haarakonttorit ja vuokrattavat kohteet, jotkasijaitsevat samassa kaupungissa. Listaa myössellaiset haarakonttorit, joiden kaupungissa ei olekohdetta.

SELECT b.bno, b.bcity, p.pno, p.pcity FROM branch b LEFT JOIN property_for_rent p

ON b.bcity=p.pcity;

• FROM lauseen VASEMMAN puoleisen taulunkaupungin mukaan tehdään vertailu. Jos oikeanpuoleisesta ei löydy sopivaa, tulostetaan sesarakkeisiin null.

bno

B3B4B2

bcity

GlasgowBristolLondon

pno

PG4nullPL94

pcity

GlasgownullLondon

Page 40: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 40 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

OIKEANPUOLEINEN ULKOLIITOS (right outer join)

Esim. Listaa haarakonttorit ja vuokrattavat kohteet, jotkasijaitsevat samassa kaupungissa. Listaa myössellaiset vuokrattavat kohteet, joiden kaupungissa eiole haarakonttoria.

SELECT b.bno, b.bcity, p.pno, p.pcityFROM branch b RIGHT JOIN property_for_rent p

ON b.bcity=p.pcity;

• FROM lauseen OIKEAN puoleisen taulun kaupunginmukaan tehdään vertailu. Jos vasemman puoleisestaei löydy sopivaa, tulostetaan sen sarakkeisiin null.

bno

nullB3B2

bcity

nullGlasgowLondon

pno

PA14PG4PL94

pcity

AberdeenGlasgowLondon

Page 41: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 41 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

MOLEMMINPUOLEINEN ULKOLIITOS (Full outer join)

Esim. Listaa haarakonttorit ja vuokrattavat kohteet, jotkasijaitsevat samassa kaupungissa. Listaa myössellaiset haarakonttorit, joiden kaupungissa ei olekohdetta sekä vuokrattavat, joiden kaupungissa eiole haarakonttoria.

SELECT b.bno, b.bcity, p.pno, p.pcity FROM branch1 b FULL JOIN property_for_rent1 p

ON b.bcity=p.pcity;

• Kummalta puolelta tahansa voi sopiva rivi puuttua.

bno

nullB3B4B2

bcity

nullGlasgowBristolLondon

pno

PA14PG4nullPL94

pcity

AberdeenGlasgownullLondon

Page 42: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 42 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

• Olennaisesti ulkoliitokset koostuvat kahdesta kyselystä

1. Listaa haarakonttorit ja vuokrattavat kohteet, jotkasijaitsevat samassa kaupungissa.

2. Listaa myös sellaiset vuokrattavat, joidenkaupungissa ei ole haarakonttoria.

Voidaan käyttää UNION –operaatiota kts. vähänmyöhemmin materiaalissa.

(SELECT b.bno, b.bcity, p.pno, p.pcity FROM branch b, property_for_rent p WHERE b.bcity = p.pcity) UNION (SELECT ‘ ‘, ‘ ‘ , p.pno, p.pcity FROM branch b, property_for_rent p

WHERE p.pcity NOT IN (SELECT b.bcity FROM branch b)) ;

• Epästandardin mukainen ulkoliitos (Ei toimi Solidissa, eikäsaa käyttää kokeessa)

Esim. Listaa haarakonttorit ja vuokrattavat kohteet, jotkasijaitsevat samassa kaupungissa. Listaa myössellaiset vuokrattavat, joiden kaupungissa ei olehaarakonttoria.

SELECT b.bno, b.bcity, p.pno, p.pcityFROM branch b, property_for_rent p

WHERE + b.bcity = p.pcity ;

Page 43: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 43 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Alikyselyt (subqueries)

• SELECT, INSERT, UPDATE ja DELETE-lauseet voivatsisältää sisäkkäisen SELECT-lauseen

• sisäkkäisen SELECT_lauseen tulosta käytetäänulkoisessa lauseessa taulukkona/kohteena

• alikysely ympäröidään suluilla ( )

• sääntöjä:

1. ORDER BY-määrettä ei saa käyttää alikyselyssä(ulkoisessa lausessaa kyllä)

2. alikysely voi sisältää vain yhden sarakkeen tai yhdenlausekkeen, paitsi silloin kun käytetään EXISTS-avainsanaa

3. alikyselyn tulee olla vertailun oikealla puolella

Page 44: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 44 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Esim. Listaa henkilöt, jotka ovat töissä ‘163 Main St’ sijaitsevassa haarakonttorissa.

SELECT sno, fname, lname, positionFROM staffWHERE bno =

(SELECT bno FROM branch WHERE address=‘163 Main St’);

Esim. Listaa henkilöt, joiden palkka on korkeampi kuinkaikkien työntekijöiden keskiarvo.

SELECT sno, fname, lname, position, salaryFROM staffWHERE salary >

(SELECT AVG(salary) FROM; staff);

sno

SG37SG14SG5

fname

AnnDavidSusan

lname

BeechFordBrand

position

Snr AsstDeputyManager

sno

SL21SG14SG5

fname

JohnDavidSusan

lname

WhiteFordBrand

position

ManagerDeputyManager

salary

30000.0018000.0024000.00

Page 45: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 45 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

• Jos on alikysely voi palauttaa enemmän kuin yhden rivin, eivoida käyttää >, <, = operaatioita.

• IN-operaatiota voidaan käyttää.

Esim. Listaa vuokrattavat kohteet, joiden vuokrauksen hoitaahenkilöt, jotka työskentelevät ‘163 Main St’:nhaarakonttorissa.

SELECT pno, street, area, city,pcode, type, rooms, rentFROM property_for_rentWHERE sno IN

(SELECT sno FROM staff WHERE bno =

(SELECT bno FROM branch WHERE street = ‘163 Main St’));

street

6 Lawrence St2 Monor Rd18 Dale Rd5 Novar Dr

area

Patrick

HyndlanHyndlan

city

GlasgowGlasgowGlasgowGlasgow

pcode

G11 0QXG32 4QXG12G12 9AX

type

FlatFlatHouseFlat

rooms

3354

rent

350375600450

pno

PG4PG36PG21PG16

Page 46: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 46 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

ANY ja ALL

• käytetään alikyselyissä, jotka palauttavat vain yhdensarakkeen arvot

ALL:

kaikki alikyselyn rivit täyttävät ehdon taijos alikyselyn tuottama tulos on tyhjä ==>TRUE

ANY tai SOME:

jos jokin alikysyelyn rivi täyttää ehdon==> TRUE

Page 47: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 47 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Esim. Listaa henkilöt, joiden palkka on suurempi kuinyhdenkään haarakonttorin B3 työntekijän.

SELECT sno, fname, lname, position, salaryFROM staffWHERE salary > ANY

(SELECT salary FROM staff WHERE bno=‘B3’);

Esim. Listaa henkilöt, joiden palkka on suurempi kuinjokaisen haarakonttorin B3 työntekijän.

SELECT sno, fname, lname, position, salaryFROM staffWHERE salary > ALL

(SELECT salary FROM staff WHERE bno = ‘B3’);

sno

SL21SG14SG5

sno

SL21

fname

JohnDavidSusan

fname

John

lname

WhiteFordBrand

lname

White

position

ManagerDeputyManager

position

Manager

salary

30000.0018000.0024000.00

salary

30000.00

Page 48: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 48 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

EXISTS ja NOT EXISTS

• EXISTS sopii vain alikyselyn kanssa

• palauttaa true/false tuloksen

• Alikyselyssä voi olla miten monta attribuuttia tahansa

EXISTS TRUE , jos alikysely tuottaa vähintään yhden rivin

EXISTS FALSE, jos alikysely tuottaa tyhjän tuloksen

Esim. Listaa kaikki työntekijät, jotka työskentelevät Lontoonhaarakonttorissa

SELECT sno, fname, lname, position FROM staff s WHERE EXISTS (SELECT * FROM branch b WHERE s.bno = b.bno AND b.city=‘London’);

sno SL21 SL41

fname John Julie

lname White Lee

position Manager Assistent

Page 49: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 49 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Yhdiste (union), Leikkaus (intersect),Erotus (except)

• voidaan käyttää vain samarakenteisille taulukoille

ISO-standardi:

operator [ALL] [ CORRESPONDING [ BY {column1 [,...] }]]

• jos CORRESPONDING BY -määre on lauseessa

==> operaatio tehdään määreen perässä oleviensarakkeiden perusteella

• jos ALL-määre on lauseessa

==> taataan, että kaikki mahdolliset rivit tulevatmukaan

• oletuksena kaikki duplikaattirivit poistetaan

Page 50: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 50 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Esim. YHDISTE (UNION)

Tuota lista alueista, joissa sijaitsee joko haarakonttoritai vuokrattava kohde.

(SELECT area FROM branch WHERE area IS NOT NULL)

UNION

(SELECT area FROM property_for_rent WHERE area IS NOT NULL);

tai

(SELECT * FROM branch WHERE area IS NOT NULL)

UNION CORRESPONDING BY area

(SELECT * FROM property_for_rent WHERE area IS NOT NULL);

area Sidcup Dyce Patrick Leigh Dee Kilburn Hyndland

area Sidcup Dyce Patrick Leigh Dee Kilburn Hyndland

Page 51: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 51 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Esim. LEIKKAUS (INTERSECT)

Tuota lista kaupungeista, joissa sijaitsee sekähaarakonttori että vuokrattava.

(SELECT city FROM branch)

INTERSECT

(SELECT city FROM property_for_rent);

tai

(SELECT * FROM branch)

INTERSECT CORRESPONDING BY city

(SELECT * FROM property_for_rent);

city Aberdeen Glasgow London

city London Aberdeen Glasgow

Page 52: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 52 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Esim. EROTUS (EXCEPT)

Listaa kaupungit, joissa on haarakonttori, mutta ei olevuorattavia.

(SELECT city FROM branch )

EXCEPT

(SELECT city FROM property_for_rent);

tai

(SELECT * FROM branch)

EXCEPT CORRESPONDING BY city

(SELECT * FROM property_for_rent);

city Bristol

city Bristol

Page 53: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 53 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Tietokannan datan muokkaus

• INSERT rivien lisäys taulukkoon

• UPDATE olemassa olevan tiedon päivitys

• DELETE taulukon rivien poisto

Lisäys, INSERT

kahdenlaisia lisäyksiä

a) sallii yhden rivin lisäämisen nimettyyn tauluun

b) useamman rivin kopiointi taulusta toiseen

Page 54: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 54 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

a) Yhden rivin lisäämisen nimettyyn tauluun

INSERT INTO table_name [ (column_list) ]

VALUES (data_value_list)

table_name:

• joko perustaulu tai näkymä

column_list:

• yksi tai useampi sarakenimi erotettuna pilkulla

• vaihtoehtoinen

• jos puuttuu ==> SQL hakee listan CREATETABLE kuvauksen mukaan

• jos puuttuu ==> lisättäviä kenttien arvoja onoltava yhtä monta kuin taululla on olemassakenttiä

• jos sarakenimiä on ==> puuttuvat sarakkeetalustetaan oletusarvoilla tai NULL-arvoilla

• sovelluksen koodiin sarakenimet kannattaaaina laittaa

data_value_list:

• listan täytyy olla “samanlainen“ kuin column_list

Page 55: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 55 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

→ arvojen lukumäärä sama

→ järjestys sama

→ arvon kuuluttava ko. sarakkeen arvojoukkoon

Esim. Lisää staff-taulukkoon 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’);

Page 56: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 56 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

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’);

Page 57: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 57 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

b) useamman rivin kopiointi taulusta toiseen

INSERT INTO table_name [ (column_list) ] SELECT ....

Esim. Oletetaan, että on olemassa relaatio

staff_prop-count (sno, fname, lname, prop_cnt)

• Lisää em. tauluun työntekijät ja heidän hoitamiensavuokrattavien kohteiden lukumäärät.

INSERT INTO staff_prop_count (SELECT s.sno, fname, lname, COUNT (*) FROM staff s, property_for_rent p WHERE s.sno=p.sno GROUP BY s.sno, fname, lname) UNION (SELECT sno, fanme, lname, 0 FROM staff WHERE sno NOT IN (SELECT sno FROM property_for_rent));

sno SL21 SG37 SG14 SA9 SG5 SL41

fname John Ann David Mary Susan Julie

lname White Beech Ford Howe Brand Lee

prop_cnt

0 2 2 1 0 1

Page 58: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 58 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Päivitys, UPDATE

UPDATE table_name

SET column_name1=data_value1 [,column_name2=data_value2...]

[WHERE search_condition];

• Jos WHERE-määre esiintyy, päivitetään vain ehdontäyttävät rivit, muuten päivitetään taulukon kaikki rivit

Esim. Lisää jokaisen työntekijän palkkaa 3 %:lla.

UPDATE staff SET salary = salary * 1.93;

Esim. Anna managereille 5 %:n palkankorotus.

UPDATE staff SET salary = salary * 1.05 WHERE position = ‘Manager’;

Esim. Ylennä David Ford (sno=‘SG14’) manageriksi ja vaihdapalkka 18000 £.

UPDATE staff SET position=‘Manager’, salary=18000 WHERE sno=‘SG14’;

Page 59: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 59 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Poisto, DELETE

DELETE FROM table_name

[WHERE search_condition];

• Jos WHERE-määre esiintyy, poistetaan vain ehdontäyttävät rivit, muuten poistetaan taulukon kaikki rivit

Esim. Poista kaikki kohteelle PG4 tapahtuneet näytöt.

DELETE FROM viewing WHERE pno=‘PG4’;

Esim. Poista kaikki näytöt.

DELETE FROM viewing;

Page 60: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 60 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

TIEDON MÄÄRITTELY (Data Definition)

SQL:n TUNNUKSET (SQL Identifiers)

• Käyttäjän määrittämä tunnus muodostuumerkkijoukosta

• ISO-standardi hyväksyy seuraavat:

• Isot kirjaimet (ylärekisteri) A ... Z

• Pienet kirjaimet (alarekisteri) a ...z

• Numerot 0 ... 9

• Alaviiva _

• Kun käytetään taulun nimeä tai kenttää, onyhdentekevää kääntäjän kannalta, kirjoitetaankomerkit isolla vai pienellä. (Toisin kuin käytettäessäsarakkeeseen talletettua dataa)

Page 61: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 61 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Tietotyypit

A) MERKKI/MERKKIJONO

CHAR(n) n:n mittainen merkkijono

VARCHAR(n) korkeintaan n:n mittainen merkkijono

n välillä [0, 255]

• merkkijono voi

1) kiinteämittainen

Esim. sno CHAR (5)

2) vaihtuvamittainen

Esim. address VARCHAR (30)

maksimipituus

Page 62: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 62 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

B) BITTI/BITTIJONO

BIT [VARYING] [pituus]

• bittijono voi

1) kiinteämittainen

Esim. bit_jono BIT (5)

2) vaihtuvamittainen

Esim. bit_jono BIT VARYING (30)

maksimipituus

Page 63: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 63 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

C) TARKKA LUKU

DECIMAL[precision [ , scale]] precision on kentänpituus ja scale on desimaalienlukumäärä

INTEGER kokonaisluku välillä [-2 147 483648, 2 147 483647]

SMALLINT kokonaisluku välillä [-32 768, 32 767]

Esim.

rooms SMALLINT

salary DECIMAL (7,2) ==> ylin arvo 99 999.99

Page 64: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 64 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

D) LIUKULUKU

FLOAT liukuluku välillä [–5.4x1079, 7.2x1075]

Esim.

10E3

5.2E6

–0.2E–4

Page 65: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 65 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

E) AIKA

DATE

TIME [time_precision] [WITH TIME ZONE]

TIMESTAMP [time_precision] [WITH TIME ZONE]

time_precision: sekunttien tarkkuus, oletus 0 eli kokonaiset sekunnit

kalenteriaika +kellonaika

kellonaika: tunti, minuutti jasekuntti

Page 66: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 66 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Tietokannan luonti

• Vaihtelee tuotteittain

CREATE SCHEMA [name | AUTHORIZATION creator-identifiter]

CREATE DATABASE database_name

Esim.

CREATE SCHEMA sql_tests AUTHORIZATON Smith;

Page 67: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 67 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Tietokannan poisto

DROP SCHEMA name [RESTRICT | CASCADE]

RESTRICT: tietokannan on oltava tyhjä ennenpoistoa (oletus)

CASCADE: tyhjyystarkistusta ei ole

Page 68: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 68 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Taulun luonti (Create Table

(CREATE TABLE)

CREATE TABLE [omistaja.] taulu

( {sarakenimi tietotyyppi [DEFAULT vakio | systeemimuuttuja] [NOT NULL] [[CONSTRAINT rnimi] CHECK(sarake-ehto)] [ , ...] }

[,[CONSTRAINT rnimi] PRIMARY KEY (sarakelista)]

{[,[CONSTRAINT rnimi] UNIQUE (sarakelista)] [,...]}

{[,[CONSTRAINT rnimi] 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 rnimi] CHECK (riviehto) ] [,...] } )

CASCADE: automaattinen muutos

Page 69: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 69 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

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

Page 70: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 70 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Taulun poistaminen (Drop Table)

(DROP TABLE)

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;

Page 71: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 71 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Näkymän luonti (Create View)

(CREATE VIEW)

• Näkymät luodaan perustauluista

• Näkymä voi kohdistua yhteen tai useampaan tauluun

Esim 1

CREATE VIEW pof AS(SELECT pno, street, area cityFROM property_for_rentWHERE ono = ‘CO46’);

Esim 2

CREATE VIEW allpersons(nro, etunimi, sukunimi) AS(SELECT sno, fname, lnameFROM staff)UNION(SELECT rno, fname, lnameFROM renter);

Näkymän poisto

DROP VIEW allpersons;

Page 72: Luento: SQL - Myy servermyy.haaga-helia.fi/~virou/TIHA/mats/TH_luXX_SQL_DML.pdfHELIA 5 (72) Räty, Virkki, Kurki Lahtinen Tiedonhallinta 9.3.2001 TH_luXX_SQL.doc 09.03.01 16:54 Backus

HELIA 72 (72)Räty, Virkki, Kurki LahtinenTiedonhallinta 9.3.2001

TH_luXX_SQL.doc 09.03.01 16:54

Indeksin luonti (Create Index)

(CREATE INDEX)

• hakemistoja voidaan luodan vain perustauluille

CREATE [UNIQUE] INDEX index_name

ON table_name (column [ASC | DESC] [,...])

• unique: hakemistoon ei voi laittaa hakemistokenttienduplikaatteja

Esim.pääavaimen mukaisen hakemiston luonnissakäytetään UNIQUE-määrettä

CREATE UNIQUE INDEX sno_indON staff (sno);

CREATE UNIQUE INDEX pno_indON property_for_rent (pno);

CREATE INDEX rent_indON property_for_rent (area,rent);

Indeksin poistaminen

DROP INDEX rent_ind;