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