Transcript SQL

SQL

Haaga-Helia Ammattikorkeakoulu Kevät 2008

Sql:n historia

• Sql on laajalti käytössä oleva relaatiotietokantojen ohjauskieli • Kehitettiin SEQUEL kielen pohjalta 80 luvun puolivälissä • Lukemattomia komentoja tietokannan muokkaamiseen ja käsittelemiseen käskyjä • Helppokäyttöinen ja kirjoitusmuodoltaan melko vapaa kieli

SQL

SQL toimii kannankäsittelykielenä (ylläpito) kyselykielenä kannankuvauskielenä kannanvalvontakielenä (käyttöoikeudet, tietohakemisto, varmistukset) SQL on kahdenlaista - komento sql, jota voidaan käyttää tietokannan kyselyliittymässä upotettua, jota käytetään perinteisellä ohjelmointikielellä tehdyssä ohjelmassa upotettuna

Sql

• Sql:n kielioppi on vapaa ja ei ole merkitystä onko asiat jaettu riveille vai ei • Myöskään isoilla ja pienillä kirjaimilla ei ole merkitystä • Usein varatut sanat kirjoitetaan kuitenkin isolla ja käytetään sisennyksiä • Sql jaetaan usein kahteen osaan DML:aan (Data Manipulation Language) ja DDL:aan (Data Definition Language)

TIEDON KUVAUSKIELI (DDL)

kuvauskielen avulla tehdään  tietokannan luonti  tietokannan muutos (rakenne)  tietokannan fyysisen rakenteen määrittely

SQL - DDL Tietokannan kuvauskieli CREATE

(luonti)

ALTER

(muutos)

DROP

(poisto)

(Data Definition Language)

Tietokannan taulut

TIEDON KÄSITTELYKIELI (DML)

käsittelykielen avulla  haetaan tietoja  päivitetään tietokantaa

SQL - DML (Data Manipulation Language) Tietokannan käsittelykieli

Tietokannan taulut

SELECT

(kyselyt)

INSERT

(lisäys)

UPDATE

(muutos)

DELETE

(poisto)

Sql:n DML:n käyttö

• DML:aa käytetään tavallisimmin erilaisten hakutoimintojen suorittamiseen relaatiotietokannoista • Hakuja voidaan esimerkiksi tehdä Access tietokannasta tai vaikkapa jollain ohjelmointikielellä toteutetuun ohjelmaan liitetystä tietokannasta

SQL / DML KÄSKYJÄ

SELECT

FETCH

INSERT

UPDATE

DELETE

kyselyjen teko kyselyjen tulosten käsittely rivien lisäys rivien päivitys rivien poisto

Select käsky

• DML:n tärkein käsky on SELECT, jonka ympärille kyselyt yleensä rakennetaan • SELECT käskyn syntaksissa suluissa [] olevat osat ovat vapaaehtoisia lisämääreitä, joiden avulla käskyjä on mahdollista monipuolistaa ja lisätä erilaisia hakuehtoja

KYSELYT (SELECT)

SELECT [ INTO FROM [ WHERE [DISTINCT] sarakelista muuttujalista ] tauluista hakuehto ] [ GROUP BY ryhmittelysarake [ HAVING ryhmäehto ] ] [ ORDER BY lajittelusarakelista [ASC | DESC ] ]

• SELECT määrittää, mitä tietoja haetaan • FROM määrittää taulun (taulut), joista tietoa haetaan • WHERE • GROUP ottaa mukaan ehdon mukaiset rivit ryhmittelee annetun sarakkeen mukaan rivit ryhmiksi • HAVING ottaa mukaan ehdon mukaiset ryhmät • ORDER BY lajittelee tulosrivit annetun/ annettujen sarakkeiden mukaan nousevaan/laskevaan järjestykseen

Esimerkkitietokanta

Seuraavissa esimerkeissä teemme esimerkkihaut seuraavanlaisesta tietokannan taulusta

ttekija.

Tnimi Nimike Palkka Tpäivä Osnimi Salmi Sihteeri 7200 1.1.1995

Talous Suomi Suunnittelija 19200 4.12.1991

Talous Jurva Kantola Virtanen Arvila Aaltonen Sihteeri Pääjohtaja Suunnittelija Sihteeri Myyntimies 8800 25000 19200 10200 15000 1.4.1997

4.4.1987

1.1.2000

1.1.1999

1.9.1997

Myynti Hallinto Myynti Hallinto Myynti

SELECT FROM tnimi, nimike ttekija ”hae kaikkien työntekijöiden nimet ja nimikkeet” Tnimi Nimike Salmi Suomi Jurva Kantola Virtanen Arvila Aaltonen Sihteeri Suunnittelija Sihteeri Pääjohtaja Suunnittelija Sihteeri Myyntimies

SELECT FROM WHERE tnimi, nimike ttekija palkka=15000 ”hae työntekijä, jonka palkka on 15000 nimi ja nimike” Tnimi Aaltonen Nimike Myyntimies

SELECT FROM nimike ttekija • ”tulosta nimikkeet ” Nimike Sihteeri Suunnittelija Sihteeri Pääjohtaja Suunnittelija Sihteeri Myyntimies

DUPLIKAATTIEN ESTO (DISTINCT)

SELECT FROM DISTINCT nimike ttekija ”tulosta kukin nimike vain kertaalleen” Nimike sihteeri suunnittelija pääjohtaja myyntimies

OPERAATTORIEN SUORITUSJÄRJESTYS

1. vertailuoperaattorit 2. NOT 3. AND 4. OR

= <> > < >= <= NOT IN (lista) LIKE

OPERAATTOREITA

BETWEEN a AND b IS NULL / IS NOT NULL * / + AND OR

SELECT FROM WHERE tnimi, palkka ttekija palkka >= 7000 AND palkka <= 9000 ”hae niiden työntekijöiden nimi ja palkka, joiden palkka on vähintään 7000 ja enintään 9000” Tnimi Salmi Jurva Palkka 7200 8800

SELECT FROM WHERE tnimi, palkka ttekija palkka BETWEEN 7000 AND 9000

SELECT FROM WHERE tnimi, palkka ttekija nimike = ’suunnittelija’ ”hae niiden työntekijöiden nimi ja palkka, joiden nimike on suunnittelija” Tnimi Suomi Virtanen Palkka 19200 19200

Merkkijonoista...

• Sql:ssä merkkijonot suljetaan yksinkertaisten heittomerkkien sisään (‘) • HUOMAA, että heittomerkkien sisällä isot ja pienet kirjaimet ovat merkitseviä!!!

– ‘virtanen’

ei ole sama kuin

‘Virtanen’ • Numeroiden kirjoittamisessa ei heittomerkkejä tarvita, vaan numeeriset vakiot kirjoitetaan sellaisenaan.

SELECT FROM tnimi, palkka ttekija WHERE nimike IN ( ’sihteeri’ , ’suunnittelija’ ) ”hae niiden työntekijöiden nimi ja palkka, joiden nimike on suunnittelija tai sihteeri” Tnimi Salmi Suomi Jurva Virtanen Arvila Palkka 7200 19200 8800 19200 10200

SELECT tnimi, palkka FROM ttekija WHERE nimike = ’sihteeri’ OR nimike = ’suunnittelija’

SELECT FROM WHERE tnimi, nimike ttekija nimike LIKE ’siht*’ (tai ’siht%’) ”hae niiden työntekijöiden nimi ja nimike, joiden nimike alkaa siht ” Tnimi Salmi Jurva Arvila Nimike sihteeri sihteeri sihteeri

JOKERIMERKIT * / % tarkoittaa kuinka monta mitä tahansa merkkiä – Virtanen

on sama kuin

Virta

* /

Virta% ? /_ tarkoittaa yhtä mitä tahansa merkkiä – Nieminen

on sama kuin

?iemine? / _iemine_

SELECT FROM WHERE tnimi, nimike ttekija esimies IS NULL ”hae niiden työntekijöiden nimi ja nimike, joilla ei ole esimiestä (esimies on null) ” Tnimi Kantola Nimike pääjohtaja

LAJITTELU (ORDER BY)

SELECT FROM WHERE tnimi, palkka ttekija nimike LIKE ’siht*’ tai (’siht%’) ORDER BY tnimi ”hae niiden työntekijöiden nimi ja palkka, joiden nimike alkaa siht. Tulosta nimen mukaan nousevassa järjestyksessä” Tnimi Arvila Nimike sihteeri Jurva Salmi sihteeri sihteeri

nouseva järjestys ASC (oletus) ORDER BY tnimi ASC Tnimi Salmi Jurva Arvila laskeva järjestys DESC - ORDER BY tnimi DESC Nimike sihteeri sihteeri sihteeri

Tehtävä

• Tee Accessilla opiskelijatietokanta, johon luot sarakkeiksi jokaiselle opiskelijalle sotun, Sukunimen, Etunimen, Katuosoitteen, postinumeron, Puhelinnumeron ja aloitusvuoden • Mieti tarkoin millaisia millaisia tietotyyppejä sarakkeissa kannattaa käyttää ja millaisia ehtoja niille kannattaa asettaa

Tehtävä...

• Syötä taulukkoosi noin kymmennen mielikuvituksellista opiskelijaa • Tee seuraavat Sql harjoitukset liittyen taulukkoosi: – Hae taulukosta kaikkien opiskelijoiden Etu- ja sukunimet – Kokeile mitä DISTINCT määre vaikuttaa haun tulokseen

Tehtävä...

– Tee haku, jossa haet kaikkien opiskelijoiden kaikki tiedot – Tee haku, jossa haet esimerkiksi Matti nimisen opiskelijan kaikki tiedot – Tee haku, jossa haet kaikkien muiden opiskelijonden tiedot paitsi Matti etunimisen – Hae opiskelijoiden tiedot, jotka ovat aloittaneet ennen vuotta 1995 – Entäpä kuinka hakisit kaikki 1999 aloittaneet opiskelijat

Tehtävä...

• Kuinka hakisit opiskelijat, jotka ovat aloittaneet ennen 1998 ja joiden etunimi ei ole Matti • entäpä kuinka hakisit 1995 aloittaneet ja Matti nimiset • Kuinka hakisit 1995 tai myöhemmin aloittaneet ja tulostaisit tuloksen laskevaan aakkosjärjestykseen