350 likes | 500 Views
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ä
E N D
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 (Data Definition Language) Tietokannan kuvauskieli Tietokannan taulut CREATE (luonti) ALTER (muutos) DROP (poisto)
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 kyselyjen teko • FETCH kyselyjentulostenkäsittely • INSERT rivien lisäys • UPDATE rivien päivitys • DELETE 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 [DISTINCT] sarakelista [ INTO muuttujalista ] FROM tauluista [ WHERE 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 ottaa mukaan ehdon mukaiset rivit • GROUP 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
EsimerkkitietokantaSeuraavissa esimerkeissä teemme esimerkkihaut seuraavanlaisesta tietokannan taulusta ttekija.
SELECT tnimi, nimikeFROM ttekija ”hae kaikkien työntekijöiden nimet ja nimikkeet” TnimiNimike Salmi Sihteeri Suomi Suunnittelija Jurva Sihteeri Kantola Pääjohtaja Virtanen Suunnittelija Arvila Sihteeri Aaltonen Myyntimies
SELECT tnimi, nimikeFROM ttekijaWHERE palkka=15000 ”hae työntekijä, jonka palkka on 15000 nimi ja nimike” TnimiNimike Aaltonen Myyntimies
SELECT nimikeFROM ttekija • ”tulosta nimikkeet ” Nimike Sihteeri Suunnittelija Sihteeri Pääjohtaja Suunnittelija Sihteeri Myyntimies
DUPLIKAATTIEN ESTO (DISTINCT) SELECT DISTINCT nimikeFROM 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 BETWEEN a AND b IS NULL / IS NOT NULL * / + - AND OR OPERAATTOREITA
SELECT tnimi, palkkaFROM ttekijaWHERE palkka >= 7000 AND palkka <= 9000 ”hae niiden työntekijöiden nimi ja palkka, joiden palkka on vähintään 7000 ja enintään 9000” TnimiPalkka Salmi 7200 Jurva 8800
SELECT tnimi, palkkaFROM ttekijaWHERE palkka BETWEEN 7000 AND 9000
SELECT tnimi, palkkaFROM ttekijaWHERE nimike = ’suunnittelija’ ”hae niiden työntekijöiden nimi ja palkka, joiden nimike on suunnittelija” TnimiPalkka Suomi 19200 Virtanen 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 tnimi, palkkaFROM ttekijaWHERE nimike IN ( ’sihteeri’ , ’suunnittelija’ ) ”hae niiden työntekijöiden nimi ja palkka, joiden nimike on suunnittelija tai sihteeri” TnimiPalkka Salmi 7200 Suomi 19200 Jurva 8800 Virtanen 19200 Arvila 10200
SELECT tnimi, palkkaFROM ttekijaWHERE nimike = ’sihteeri’ ORnimike = ’suunnittelija’
SELECT tnimi, nimikeFROM ttekijaWHERE nimike LIKE ’siht*’ (tai ’siht%’) ”hae niiden työntekijöiden nimi ja nimike, joiden nimike alkaa siht ” TnimiNimike Salmi sihteeri Jurva sihteeri Arvila 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 tnimi, nimikeFROM ttekijaWHERE esimies IS NULL ”hae niiden työntekijöiden nimi ja nimike, joilla ei ole esimiestä (esimies on null) ” TnimiNimike Kantola pääjohtaja
LAJITTELU (ORDER BY) SELECT tnimi, palkkaFROM ttekijaWHERE 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ä” TnimiNimike Arvila sihteeri Jurva sihteeri Salmi sihteeri
nouseva järjestys ASC (oletus) ORDER BY tnimi ASC • laskeva järjestys DESC • ORDER BY tnimi DESC TnimiNimike Salmi sihteeri Jurva sihteeri Arvila 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