Datan käsittely MySQL SQL, Structured Query Language

Slides:



Advertisements
Samankaltaiset esitykset
15. Loogiset operaatiot.
Advertisements

@ Leena Lahtinen Helia Ohjelman perusrakenteet 1. PERÄKKÄISRAKENNE 2. VALINTARAKENNE 3. TOISTORAKENNE.
JavaScript (c) Irja & Reino Aarinen, 2007
Ohjelman perusrakenteet
Datan määrittely, MySQL
Relaatiomalli •Ted Codd 1970 •Matemaattinen perusta •Helppo toteuttaa •Helppo omaksua •Käytetyin tietomalli •Muodostaa perustan kurssin myöhemmille asioille.
Tietokanta.
Looginen suunnittelutMyn1 Looginen suunnittelu •Tässä lähdetään liikkeelle käsitemallista. •Laaditaan sisällöstä ja rakenteesta loogisen tason kuvaus,
Rakenteinen ohjelmointi
Aggregaattifunktiot (1)
EXtensible Markup Language
Johdetun luokan määrittely tMyn1 Johdetun luokan määrittely •Kun johdettu luokka periytetään kantaluokasta, saadaan kantaluokan jäsenet enemmän tai vähemmän.
Ohjelmointitaito (ict1td002, 12 op) Syksy 2008
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ VARTEN.
Poikkeuskäsittely- lohkot tMyn1 Poikkeuskäsittelylohkot try-catch Poikkeustilanteiden käsittelymekanismi toteutetaan varatuilla sanoilla try, throw ja.
Ehto- ja toistolauseet
TMA.003 / L3 ( )1 3. Funktioista 3.1. Kuvaus ja funktio Olkoon A ja B ei-tyhjiä joukkoja. Tulojoukon A  B = {(x,y) | x  A, y  B} osajoukko on.
Ohjelmoinnin tekniikkaa Sisällys for -lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely.
Ohjelman perusrakenteet
TIETO JA TIETOKONEOHJELMA TIETOKONEOHJELMA KÄSITTELEE TIETOJA TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA MENETELMILLÄ.
13. Hyvä ohjelmointitapa (osa 1)
Virtuaaliset jäsenfunktiot tMyn1 Virtuaaliset jäsenfunktiot Virtuaalinen jäsenfunktio on esiteltävä monimuotoisessa kantaluokassa. Virtuaalisen jäsenfunktion.
Haaga-Helia Ammattikorkeakoulu
Relaatioalgebra (1) Kokoelma relaatioiden käsittelyyn tarkoitettuja operaatioita Operaatiot muuntavat relaatioita uusiksi relaatioiksi Muodostaa perustan.
Luokan määrittely class-määreellä tMyn1 Luokan määrittely class-määreellä Luokan määrittely tarkoittaa luokan tietojäsenten esittelyä ja jäsenfunktioiden.
Erilaiset liitokset FROM-osassa voidaan määritellä relaatio myös erilaisia liitosoperaatioita käyttäen Vasen, oikea ja täysi puoliliitos eli ulkoliitos.
ict1td002 - Copyright Raine Kauppinen 1 Alkuarvot ja tyyppimuunnokset (1/5)  Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int.
Lomakkeet ja vuorovaikutteisuus
Monikon lisääminen (1) Luetellaan kaikki lisättävän rivin arvot INSERT INTO Asiakas VALUES (4, ’Assi’, ’Asiakas’); Luetellaan vain osa arvoista; muut arvot.
11. Javan toistorakenteet
SQL Standardoitu kieli, jonka avulla voidaan
Tietokannan luominen Tietokanta luodaan komennolla CREATE DATABASE
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Toistorakenne Toistorakennetta käytetään ohjelmissa sellaisissa tilanteissa, joissa jotain tiettyä ohjelmassa tapahtuvaa toimenpidekokonaisuutta halutaan.
Tietokannat –kurssi SQL peruskyselyt
Ohjelman keskeytys virhetilanteessa tMyn1 Ohjelman keskeytys virhetilanteessa Poikkeustilanteet voidaan ryhmitellä logiikkavirheisiin ja muihin ajonaikaisiin.
Tietokannat -kurssi KSAO, Datanomit, käytön tuki kevät 2015 Lauri Tapola.
6. Relaatioalgebra ja relaatiokalkyyli
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
@ Leena Lahtinen Toistorakenne Ohjelmassa toistetaan tiettyjä toimenpiteitä monta kertaa peräkkäin Toisto noudattaa sille kuuluvia tarkkoja standardoituja.
@ Leena Lahtinen TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA:  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ.
Johdetun luokan olion esittely... tMyn1 Johdetun luokan olion esittely ja määrittely Esittelyluokka tarkoittaa olion tunnuksen luokkaa. Määrittelyluokka.
Poikkeustenkäsittely- lohkot tMyn1 Poikkeustenkäsittelylohkot try-catch Poikkeustilanteiden käsittelymekanismi toteutetaan varatuilla sanoilla try, throw.
DO NOT PRINT THIS DOCUMENT SQL -valintaehto CREATE TABLE opettaja ( opetunnus varchar(12) NOT NULL, nimi varchar(40) NOT NULL, puhelin varchar(12), tyohuone.
Visual Basic -ohjelmointi
11. Relaatiotietokannan suunnittelualgoritmit ja lisäriippuvuudet Tällä kurssilla käsitellään kirjan luvusta 11 ainoastaan algoritmi 11.1 häviöttömän liitoksen.
Tietokannat Tietotekniikan perusteet Pekka Orponen.
Kontrollirakenteet laajemmin
Monimuotoinen luokka tMyn1 Monimuotoinen luokka Monimuotoinen luokka mahdollistaa saman jäsenfunktion toteutuksen monella tavalla. Tällöin puhutaan virtuaalisesta.
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
Karteesinen tulo Huomaa attribuuttien nimien tarkentaminen taulujen nimillä.
Fyysinen suunnittelutMyn1 Fyysinen suunnittelu Tässä lähdetään liikkeelle tietokannan loogisesta mallista. Nyt pitää olla tiedossa valittava DBMS-tuote.
Toistorakenne Toistorakennetta käytetään ohjelmissa sellaisissa tilanteissa, joissa jotain tiettyä ohjelmassa tapahtuvaa toimenpidekokonaisuutta halutaan.
Johdetun luokan määrittely tMyn1 Johdetun luokan määrittely Kun johdettu luokka periytetään kantaluokasta, saadaan kantaluokan jäsenet enemmän tai vähemmän.
Tietokannat -kurssi KSAO, Datanomit, käytön tuki kevät 2015 Lauri Tapola.
XSL Teppo Räisänen
XSL Teppo Räisänen
Tietokannat -kurssi KSAO, Datanomit, käytön tuki kevät 2015 Lauri Tapola.
Valintarakenne valintarakenne alkaa aina kysymyksellä eli ehdolla ehto tarkoittaa, että muuttujan sisältöä verrataan toisen muuttujan sisältöön tai vakioon.
Hakemistot Nopeuttavat hakuoperaatioita Hidastavat päivitysoperaatioita Pääavaimelle luodaan aina indeksi; päävain toimii usein hakukriteerinä Luodaan.
KSAO, Datanomit, käytön tuki kevät 2015 Lauri Tapola
Toistorakenne Toistorakennetta käytetään ohjelmissa sellaisissa tilanteissa, joissa jotain tiettyä ohjelmassa tapahtuvaa toimenpidekokonaisuutta halutaan.
Toistorakenne Toistorakennetta käytetään ohjelmissa sellaisissa tilanteissa, joissa jotain tiettyä ohjelmassa tapahtuvaa toimenpidekokonaisuutta halutaan.
SPARQL.
14. Hyvä ohjelmointitapa.
Kontrollirakenteet laajemmin
13. Loogiset operaatiot.
Esityksen transkriptio:

Datan käsittely MySQL SQL, Structured Query Language SQL:n avulla ohjelmoija voi mm. muokata tietokannan rakennetta muuttaa järjestelmän turva-asetuksia lisätä käyttäjän oikeuksia tietokantaan tai tauluihin kysellä tietokannasta tietoja päivittää tietokannan sisältöä Datan käsittely MySQL tMyn

ISO-SQL:ssä on kaksi selkeästi eroteltavaa osaa: SQL sai ANSI-standardin aseman 1986 ja ISO standardoi sen vuotta myöhemmin. ISO-SQL:ssä on kaksi selkeästi eroteltavaa osaa: Datan määrittelyyn keskittyvä osio, Data Definition Language, DDL. Datan käsittelyyn keskittyvä osio, Data Manipulation Language, DML. Perinteisesti siis SQL ei ole soveltunut vuon ohjaus –tyyppisiin tehtäviin, siis ei ole ollut komentoja IF…THEN…ELSE, DO…WHILE jne. Datan käsittely MySQL tMyn

Tästä on seurannut, että SQL:ää on voinut käyttää kahdella tavalla: Interaktiivinen käyttö, tehdään kyselyjä, annetaan komentoja. Upottaa (embed) SQL-komentoja johonkin ohjelmointikieleen. Datan käsittely MySQL tMyn

SQL3 on erityisesti suunniteltu tukemaan oliotietokantojen käsittelyä. Uusimmat versiot kielestä ovat SQL:2003 ja SQL:2006. Datan käsittely MySQL tMyn

Kun kirjoitetaan SQL-lauseita, niin noudatetaan seuraavanlaista BNF (Backus, Naur Form)-notaatiota: varatut sanat kirjoitetaan isoilla kirjaimilla käyttäjän omat määrittelyt kirjoitetaan pienillä kirjaimilla käytetään pystyviivaa ilmaisemaan vaihtoehtoa useista samanarvoisista mahdollisuuksista, siis esim. a|b|c käytetään aaltosulkuja osoittamaan vaadittua, pakollista elementtiä (required element), siis esim. {a} käytetään hakasulkuja osoittamaan vaihtoehtoista elementtiä (optional element), siis esim. [a] käytetään kaarisulkuja osoittamaan mahdollista termin toistoa (optional repetition) nolla tai useamman kerran, siis esim. {a|b}(,c…) tarkoittaa että joko a:n tai b:n jälkeen tulee nolla tai useampi c pilkuilla eroteltuina. Datan käsittely MySQL tMyn

Datan käsittelyyn käytetään seuraavia käskyjä: SELECT – kysytään dataa tietokannasta INSERT – lisätään dataa relaatioon (table) UPDATE – muokata relaation tietoja DELETE – poistaa relaatiosta tietoa SELECT-käsky on näistä monipuolisin, siispä sen esittely on tilaa vievin. Datan käsittely MySQL tMyn

Kohdistetaan DML-käskyt kuuteen tauluun: Toimipiste(tpNro, katuOs, kaupunki, postiNro) Henkilokunta(hloNro, eNimi, sNimi, asema, sPuoli, sAika, palkka, tpNro->Toimipiste) Vuokrattavat(tilaNro, katuOs, kaupunki, postiNro, tyyppi, huoneLkm, vuokra, omistajaNro->Omistaja, hloNro->Henkilokunta, tpNro->Toimipiste) Asiakas(asiakasNro, eNimi, sNimi, puhNro, paremm, maxV) Omistaja(omistajaNro, eNimi, sNimi, osoite, puhNro) Esittely(asiakasNro, tilaNro, esPaiva, komm, asiakasNro->Asiakas, tilaNro->Vuokrattavat) Datan käsittely MySQL tMyn

Toimipiste Henkilokunta Datan käsittely MySQL tMyn

Asiakas Omistaja Datan käsittely MySQL tMyn

Vuokrattavat Esittely Datan käsittely MySQL tMyn

Luodaan taulut MySQL-ympäristöön. Otetaan käyttöön sekä perus- että viiteavaimet: Datan käsittely MySQL tMyn

Datan käsittely MySQL tMyn

Datan käsittely MySQL tMyn

Datan käsittely MySQL tMyn

Datan käsittely MySQL tMyn

Datan käsittely MySQL tMyn

Seuraavaksi sisällöt tauluihin: Datan käsittely MySQL tMyn

Datan käsittely MySQL tMyn

Datan käsittely MySQL tMyn

Datan käsittely MySQL tMyn

Datan käsittely MySQL tMyn

Datan käsittely MySQL tMyn

SELECT-käskyn avulla haetaan tietoa yhdestä tai useammasta taulusta. Tällä käskyllä pystytään suorittamaan relaatio-operaatiot valinta (selection), projektio (projection) ja liitos (join). SELECT-käskyyn liittyvä syntaksi on varsin monipuolinen ja kokonaisuudessaan tuo syntaksi löytyy helpoiten netistä. Tässä käsitellään/otetaan huomioon vain keskeiset piirteet: Datan käsittely MySQL tMyn

[FROM table_references [WHERE where_condition] SELECT select_expr, ... [FROM table_references [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] Datan käsittely MySQL tMyn

Yleisessä määritelmässä esiintyy: SELECT: määrittelee ne sarakkeet jotka valitaan tulostukseen select_expr: sarakkeen (attribuutin) nimi table_references: taulun nimi, taulujen nimet FROM: mitä taulua/tauluja käytetään WHERE: tällä valinta osuu johonkin riviin joka täyttää valitun ehdon GROUP BY: muodostaa joukon rivejä joilla on sama sarakkeen arvo HAVING: valitsee joukon jonkin ehdon perusteella ORDER BY: määrittelee tulostusjärjestyksen Datan käsittely MySQL tMyn

SELECT hloNro, eNimi, sNimi, asema, sPuoli, sAika, palkka, tpNro Esim 1. Haetaan jonkin relaation kaikki rivit ja sarakkeet. Tulosta kaikki yksityiskohdat relaatiosta Henkilokunta, kuva 1. SELECT hloNro, eNimi, sNimi, asema, sPuoli, sAika, palkka, tpNro FROM Henkilokunta; tai sitten SELECT * FROM Henkilokunta; Datan käsittely MySQL tMyn

Kuva 1. Tulostus Henkilokunta-taulun kaikista yksityiskohdista. Datan käsittely MySQL tMyn

SELECT hloNro, eNimi, sNimi, palkka FROM Henkilokunta; Esim 2. Haetaan jonkin taulun kaikki rivit ja jotkin tietyt sarakkeet. Tulosta Henkilokunta-taulusta kaikkien työntekijöiden palkat. Mukaan otetaan henkilön tunnus, etunimi, sukunimi ja palkka, kuva 2: SELECT hloNro, eNimi, sNimi, palkka FROM Henkilokunta; Datan käsittely MySQL tMyn

Kuva 2. Tulostus Henkilokunta-taulun kaikista riveistä ja joistakin sarakkeista. Datan käsittely MySQL tMyn

sitten seuraavaksi duplikaatit poistetaan SELECT DISTINCT tilaNro Esim 3. DISTINCT-määreen vaikutus. Tulostetaan ensiksi kaikkien niiden vuokrattavien tilojen tunnukset joita on käynyt katsomassa joku asiakas, kuvat 3a ja 3b: SELECT tilaNro FROM Esittely; sitten seuraavaksi duplikaatit poistetaan SELECT DISTINCT tilaNro Datan käsittely MySQL tMyn

Kuva 3a. Mahdolliset duplikaatit ovat mukana tulostuksessa. Datan käsittely MySQL tMyn

Kuva 3b. Duplikaatit on poistettu. Datan käsittely MySQL tMyn

SELECT hloNro, eNimi, sNimi, palkka/12 FROM Henkilokunta; Esim 4. Suoritetaan laskutoimituksia jossakin kentässä. Sallittuja operaatioita ovat yhteenlasku, vähennyslasku, kertolasku ja jakolasku. Sulkujen käyttö on myös mahdollista – ja usein suositeltavaa! Tulostetaan kunkin henkilön kuukausipalkka, sarakkeina ovat nyt henkilönumero, etunimi, sukunimi ja tieto kuukausipalkasta: SELECT hloNro, eNimi, sNimi, palkka/12 FROM Henkilokunta; Datan käsittely MySQL tMyn

Kuva 4. Valinta, jossa näkyy henkilönumero, etunimi, sukunimi ja kuukausipalkka. Datan käsittely MySQL tMyn

Äskeisessä esimerkissä 4. sarakkeen nimi oli palkka/12. SQL ISO-standardi mahdollistaa myös sarakkeelle nimen annon, siis: SELECT hloNro, eNimi, sNimi, palkka/12 AS kkpalkka FROM Henkilokunta; Nyt siis laitimmainen sarake saisi nimekseen kkpalkka. Datan käsittely MySQL tMyn

Kyseessä on siis relaatioalgebran valinta-operaatio (selection). Valitaan seuraavaksi vain jotkin rivit, ei kaikkia. Tämä tehdään WHERE-lauseella. WHERE-lauseelle voidaan antaa ISO-standardin mukaisesti seuraavantyyppisiä etsintäperusteita: Comparison: vertaillaan jotakin arvoa toiseen arvoon Range: tutkitaan, sopiiko arvo haluttujen rajojen sisälle Set membership: onko arvo jokin etukäteen määritellyistä arvoista Pattern match: onko merkkijono etsityn muotoinen Null: onko sarakkeen arvo null (tuntematon) Kyseessä on siis relaatioalgebran valinta-operaatio (selection). Datan käsittely MySQL tMyn

SELECT hloNro, eNimi, sNimi, asema, palkka FROM Henkilokunta Esim. 5. Tulostetaan ne henkilöt, joiden vuosipalkka on suurempi kuin 45000€. Valitaan sarakkeiksi henkilönumero, etunimi, sukunimi, asema ja palkka, kuva 5: SELECT hloNro, eNimi, sNimi, asema, palkka FROM Henkilokunta WHERE palkka > 45000; Datan käsittely MySQL tMyn

Kuva 5. Valinta, jossa etsitään tiettyä vuosipalkkaa (ja sitä suurempaa) nauttivat henkilöt. Datan käsittely MySQL tMyn

SQL mahdollistaa seuraavat vertailuoperaattorit: = yhtä suuruus <> erisuuruus (tyypillisesti käy myös !=) < pienempi kuin > suurempi kuin <= pienempi tai yhtä suuri >= suurempi tai yhtä suuri Monimutkaisemmat vertailut voidaan rakentaa loogisilla operaattoreilla AND, OR ja NOT. Käytä sulkeita selkeyden vuoksi!! Datan käsittely MySQL tMyn

WHERE kaupunki=’Mikkeli’ OR kaupunki=’Askola’; Esim 6. Tulostetaan taulusta Toimipiste ne toimipisteet jotka sijaitsevat Mikkelissä tai Askolassa. Otetaan mukaan kaikki sarakkeet, kuva 6: SELECT * FROM Toimipiste WHERE kaupunki=’Mikkeli’ OR kaupunki=’Askola’; Datan käsittely MySQL tMyn

Kuva 6. Tulostetaan ne toimipaikat, jotka sijaitsevat joko Mikkelissä tai Askolassa. Datan käsittely MySQL tMyn

SELECT hloNro, eNimi, sNimi, asema, palkka FROM Henkilokunta Esim. 7. Tulostetaan ne henkilöt, joiden vuosipalkka on 25000€-30000€. Valitaan sarakkeiksi henkilönumero, etunimi, sukunimi, asema ja palkka, kuva 7: SELECT hloNro, eNimi, sNimi, asema, palkka FROM Henkilokunta WHERE palkka BETWEEN 25000 AND 30000; Datan käsittely MySQL tMyn

..tai sitten monimutkaisemmin: SELECT hloNro, eNimi, sNimi, asema, palkka FROM Henkilokunta WHERE palkka >= 25000 AND palkka <= 30000; Datan käsittely MySQL tMyn

Kuva 7. Henkilöt, joiden palkka on tiettyjen rajojen sisäpuolella. Datan käsittely MySQL tMyn

SELECT hloNro, eNimi, sNimi, asema FROM Henkilokunta Esim. 8. Kuuluuko joukkoon mukaan? Tulostetaan ne henkilöt, jotka ovat johtajia tai ryhmäpäälliköitä. Valitaan sarakkeiksi henkilönumero, etunimi, sukunimi ja asema, kuva 8: SELECT hloNro, eNimi, sNimi, asema FROM Henkilokunta WHERE asema IN (’joht’, ’ryhmäp’); Datan käsittely MySQL tMyn

..tai sitten monimutkaisemmin: SELECT hloNro, eNimi, sNimi, asema FROM Henkilokunta WHERE asema=’joht’ OR asema=’ryhmäp’; Datan käsittely MySQL tMyn

Kuva 8. Valinta sen mukaan kuuluuko valittuun joukkoon. Datan käsittely MySQL tMyn

Onko merkkijono etsityn muotoinen? SQL:llä on kaksi symbolia tällaiseen käyttöön: % -merkki: tarkoittaa nolla tai useampia merkkivakioita (wildcard) _ -merkki: edustaa yksittäistä merkkivakiota Siis: LIKE ’H%’ tarkoittaa, että merkkijonon ensimmäinen merkkivakio on H, mutta loput voi olla mitä tahansa. LIKE ’H_ _ _’ tarkoittaa, että merkkijonossa on tasan neljä merkkivakiota joista ensimmäinen on H. LIKE ’%e’ tarkoittaa, että merkkijonon vähimmäispituus on yksi ja viimeinen merkki on e. Datan käsittely MySQL tMyn

NOT LIKE ’H%’ tarkoittaa, että ensimmäinen merkkivakio ei voi olla H. LIKE ’%Patteristonkuja%’ tarkoittaa, että merkkijonon pituus voi olla minimissään 15 merkkiä ja se sisältää osan Patteristonkuja. NOT LIKE ’H%’ tarkoittaa, että ensimmäinen merkkivakio ei voi olla H. Datan käsittely MySQL tMyn

SELECT omistajaNro, eNimi, sNimi, osoite, puhNro FROM Omistaja Esim. 9. Löytyykö omistaja, joka asuisi Kydöntiellä? Valitaan sarakkeiksi omistajaNro, eNimi, sNimi, osoite ja puhNro, kuva 9: SELECT omistajaNro, eNimi, sNimi, osoite, puhNro FROM Omistaja WHERE osoite LIKE ’%Kydöntie%’; Datan käsittely MySQL tMyn

Kuva 9. Valinta sen mukaisesti löytyykö etsityn muotoinen merkkijono. Datan käsittely MySQL tMyn

SELECT asiakasNro, esPaiva FROM Esittely Esim. 10. Kuka oli se asiakas, joka ei kommentoinut mitään erään tietyn kohteen (4) suhteen? Valitaan relaatiosta Esittely sarakkeet asiakasNro ja esPaiva, kuva 10: SELECT asiakasNro, esPaiva FROM Esittely WHERE tilaNro = 4 AND komm IS NULL; HUOM! Käytännössä kyselyn tekijä ei voine nimetä kohdetta perusavaimen arvon perusteella!!! Datan käsittely MySQL tMyn

Kuva 10. Testataan riviä IS NULL –ehdolla. Datan käsittely MySQL tMyn

Järjestys voi olla esim. nouseva (ASC) tai laskeva (DESC). Joskus on tarvetta järjestää jonkin sarakkeen arvot tiettyyn järjestykseen. Järjestys voi olla esim. nouseva (ASC) tai laskeva (DESC). Tällainen järjestäminen hoidetaan ORDER BY –käskyllä, ja se on viimeisenä SELECT-rakenteessa. Järjestäminen voi perustua yhteen tai useampaan sarakkeeseen. Datan käsittely MySQL tMyn

Esim. 11. Yhteen sarakkeeseen kohdistuva järjestäminen. Tulostetaan Henkilokunta-taulu palkan suuruuden mukaan laskevassa järjestyksessä, kuva 11: SELECT hloNro, eNimi, sNimi, palkka FROM Henkilokunta ORDER BY palkka DESC; Datan käsittely MySQL tMyn

SELECT hloNro, eNimi, sNimi, palkka FROM Henkilokunta ORDER BY 4 DESC; tai sitten: SELECT hloNro, eNimi, sNimi, palkka FROM Henkilokunta ORDER BY 4 DESC; Datan käsittely MySQL tMyn

Kuva 11. Tulostus Henkilokunta-taulun kaikista riveistä laskevan palkan mukaan järjestettynä. Datan käsittely MySQL tMyn

SELECT tilaNro, tyyppi, huoneLkm, vuokra FROM Vuokrattavat Esim. 12. Järjestetään Vuokrattavat-taulu tilan tyypin mukaan. Oletusarvo on aakkosjärjestys (ASC) jos muuta ei anneta. Valitaan sarakkeiksi tilaNro, tyyppi, huoneLkm ja vuokra, kuva 12: SELECT tilaNro, tyyppi, huoneLkm, vuokra FROM Vuokrattavat ORDER BY tyyppi; Viimeisellä rivillä ”ORDER BY tyyppi” avain ”tyyppi” on nimeltään major sort key, ensisijainen lajitteluavain. Datan käsittely MySQL tMyn

Kuva 12. Järjestetään taulu Vuokrattavat avaimen ”tyyppi” mukaan. Datan käsittely MySQL tMyn

SELECT tilaNro, tyyppi, huoneLkm, vuokra FROM Vuokrattavat Esim. 13. Muutetaan edellinen esimerkki siten, että aiemman lisäksi järjestys on vuokran mukaan laskevassa järjestyksessä, kuva 13: SELECT tilaNro, tyyppi, huoneLkm, vuokra FROM Vuokrattavat ORDER BY tyyppi, vuokra DESC; Viimeisellä rivillä ”ORDER BY …” avain ”vuokra” on nimeltään minor sort key, toissijainen lajitteluavain. Datan käsittely MySQL tMyn

Kuva 13. Järjestetään taulu Vuokrattavat avaimien ”tyyppi” ja ”vuokra” mukaan. Datan käsittely MySQL tMyn

ISO-standardi määrittelee 5 koostefunktiota (aggregate functions): COUNT() – palauttaa valitun sarakkeen arvojen lukumäärän. SUM() - palauttaa valitun sarakkeen arvojen summan. AVG() - palauttaa valitun sarakkeen arvojen keskiarvon. MIN() - palauttaa valitun sarakkeen arvoista pienimmän. MAX() - palauttaa valitun sarakkeen arvoista suurimman. Datan käsittely MySQL tMyn

SUM()- ja AVG() –funktiot kohdistetaan vain numeerisiin kenttiin. Yllä mainitut funktiot kohdistetaan yksittäiseen sarakkeeseen ja ne palauttavat yhden arvon. SUM()- ja AVG() –funktiot kohdistetaan vain numeerisiin kenttiin. Koostefunktioita voidaan käyttää vain SELECT-käskyn ja HAVING-lauseen kanssa. Datan käsittely MySQL tMyn

COUNT(*)-funktion käyttö. Esim. 14. Kuinka monen kohteen kuukausivuokra on enemmän kuin 450€? Nimetään sarake nimellä lkm, kuva 14: SELECT COUNT(*) AS lkm FROM Vuokrattavat WHERE vuokra>450; Datan käsittely MySQL tMyn

Kuva 14. COUNT(*)-funktion käyttö lukumäärän selville saamiseksi. Datan käsittely MySQL tMyn

COUNT(DISTINCT)-funktion käyttö. Esim. 15. Kuinka monta eri kohdetta näytettiin lokakuussa 2007? Nimetään sarake nimellä eriKohteidenLkm, kuva 14: SELECT COUNT(DISTINCT tilaNro) AS eriKohteidenLkm FROM Esittely WHERE esPaiva BETWEEN ’2007-10-01’ AND ’2007-10-31’; Datan käsittely MySQL tMyn

Kuva 15. COUNT(DISTINCT)-funktion käyttö lukumäärän selville saamiseksi. Datan käsittely MySQL tMyn

COUNT- ja SUM-funktioiden käyttö samassa SELECT-lauseessa. Esim. 16. Tulostetaan johtajien lukumäärä ja heidän palkkojensa summa, kuva 16: SELECT COUNT(hloNro) AS lkm, SUM(palkka) AS summa FROM Henkilokunta WHERE asema=’joht’; Datan käsittely MySQL tMyn

Kuva 16. Johtajien lukumäärä ja palkkojen summa. Datan käsittely MySQL tMyn

MIN()-, MAX()- ja AVG() –funktioiden käyttö. Esim. 17. Selvitetään henkilökunnan keskipalkka, maksimipalkka ja minimipalkka, kuva 17. SELECT MIN(palkka) AS minimi, MAX(palkka) AS maksimi, AVG(palkka) AS keskiarvo FROM Henkilokunta; Datan käsittely MySQL tMyn

Kuva 17. MIN()-, MAX()- ja AVG() –funktioiden käyttö. Datan käsittely MySQL tMyn

Muodostaa joukon rivejä joilla on sama sarakkeen arvo. GROUP BY –ehdon käyttö Muodostaa joukon rivejä joilla on sama sarakkeen arvo. Kyseessä on ryhmittelevä kysely (grouped query). SELECT-lause saa tällaisessa tapauksessa sisältää ainoastaan sarakkeiden nimiä koostefunktioita (aggregate functions) vakioita (constants) lausekkeen, joka koostuu yllä olevista elementeistä Datan käsittely MySQL tMyn

Ne sarakkeet, jotka esiintyvät SELECT-lauseessa esiintyvät myös aina GROUP BY –ehdossa. Ainoa poikkeus on koostefunktiot; niiden yhteydessä voi myös esiintyä sarakkeita, jotka eivät ole mukana GROUP BY-rivillä. Päinvastainen ei ole kuitenkaan totta: voi siis olla, että GROUP BY-rivillä esiintyy sarake, joka ei esiinny SELECT-rivillä. Jos WHERE-ehtoa käytetään GROUP BY –ehdon yhteydessä, niin sellaisessa tapauksessa WHERE-ehto kohdistetaan ensin ja sitten vasta GROUP BY –ehto kohdistetaan jäljelle jääneisiin ehdot täyttäviin riveihin. Datan käsittely MySQL tMyn

SELECT tpNro, COUNT(hloNro) AS lkm, SUM(palkka) AS pSumma Esim. 18. Selvitetään kussakin toimipisteessä olevan henkilökunnan määrä ja kunkin toimipisteen palkkasumma, kuva 18. SELECT tpNro, COUNT(hloNro) AS lkm, SUM(palkka) AS pSumma FROM Henkilokunta GROUP BY tpNro ORDER BY tpNro; Huom! Ei tarvitse sisällyttää sarakkeita hloNro ja palkka GROUP BY –riville, koska kyseiset sarakkeet esiintyvät SELECT-listassa vain koostefunktioiden yhteydessä! Datan käsittely MySQL tMyn

Kuva 18. GROUP BY –ehdon peruskäyttö. Datan käsittely MySQL tMyn

Rajoitetaan ryhmittelyä HAVING-ehdolla WHERE-ehto suodattaa yksittäisiä rivejä (monikkoja) valittaessa lopullista tulostustaulua. HAVING-ehto puolestaan suodattaa ryhmiä valittaessa lopullista tulostustaulua. HAVING-ehdossa esiintyvät sarakkeet tulee olla mukana myös GROUP BY –rivillä (ei tarvitse, jos sarake on osana koostefunktiota). Käytännössä HAVING-ehdossa on aina vähintään yksi koostefunktio – muussa tapauksessa koko HAVING-ehto voidaan tiputtaa pois ja sisällyttää ehto WHERE-lauseeseen. Datan käsittely MySQL tMyn

Huom! Koostefunktioita ei voi käyttää WHERE-ehdossa! Sinänsä HAVING-ehto voidaan aina korvata SELECT-rakenteessa. Datan käsittely MySQL tMyn

SELECT tpNro, COUNT(hloNro) AS lkm, SUM(palkka) AS pSumma Esim. 19. Selvitetään kussakin toimipisteessä olevan henkilökunnan määrä ja kunkin toimipisteen palkkasumma. Huomioidaan nyt ainoastaan sellaiset toimipisteet, joissa on enemmän kuin yksi henkilö palkattuna, kuva 19. SELECT tpNro, COUNT(hloNro) AS lkm, SUM(palkka) AS pSumma FROM Henkilokunta GROUP BY tpNro HAVING COUNT(hloNro)>1 ORDER BY tpNro; Datan käsittely MySQL tMyn

Kuva 19. HAVING –ehdon käyttö. Datan käsittely MySQL tMyn

Sisäkkäisten kyselyjen teko Tutkitaan seuraavaksi SELECT-rakennetta toisen SELECT-rakenteen sisällä (inner SELECT statement, outer SELECT statement). Sisemmän SELECT-rakenteen tuottamaa valintaa käytetään ulommassa SELECT-rakenteessa tuottamaan lopullinen valinta. Sisempi rakenne, subquery, nested query. Datan käsittely MySQL tMyn

On olemassa kolmenlaisia sisempiä SELECT-rakenteita: Skalaarinen valinta, A scalar subquery. Palautuksena on yksittäinen sarake ja yksittäinen rivi, siis yksittäinen arvo. Rivivalinta, A row subquery. Palautuksena on useampi sarake mutta vain yksi rivi. Tauluvalinta, A table subquery. Palautuksena on yksi tai useampi sarake ja useita rivejä. Datan käsittely MySQL tMyn

SELECT hloNro, eNimi, sNimi, asema FROM Henkilokunta Esim. 20. Tulostetaan tiedot (hloNro, eNimi, sNimi, asema) siitä henkilökunnasta, joka työskentelee Seunalantiellä sijaitsevassa toimistossa, kuva 20. SELECT hloNro, eNimi, sNimi, asema FROM Henkilokunta WHERE tpNro=( SELECT tpNro FROM Toimipiste WHERE katuOs=’Seunalant’); Datan käsittely MySQL tMyn

Kuva 20. Se henkilökunta, joka työskentelee tietyn katuosoitteen omaavassa toimipisteessä. Datan käsittely MySQL tMyn

Sisempi valinta on kaarisulkeiden välissä. Seunalantiellä on vain yksi toimipiste, joten edellinen esimerkki oli esimerkkinä skalaarisesta valinnasta sisemmässä rakenteessa. Sisempi valinta on kaarisulkeiden välissä. Äskeisessä esimerkissä ulomman rakenteen WHERE-ehdossa oli yhtä suuruus -operaattori, mutta muutkin relaatio-operaattorit käyvät tarpeen mukaan (<, >, <=, >=, <>). Datan käsittely MySQL tMyn

WHERE palkka>(SELECT AVG(palkka) FROM Henkilokunta); Esim. 21. Käytetään sisemmässä SELECT-rakenteessa koostefunktiota. Tulostetaan tiedot niistä henkilöistä, jotka ansaitsevat yli keskiarvotason – ja tiedon siitä, miten paljon yli keskiarvon, kuva 21. SELECT hloNro, eNimi, sNimi, asema, palkka - (SELECT AVG(palkka) FROM Henkilokunta) AS pEro FROM Henkilokunta WHERE palkka>(SELECT AVG(palkka) FROM Henkilokunta); Datan käsittely MySQL tMyn

Kuva 21. Henkilöt, jotka ansaitsevat yli keskitason. Datan käsittely MySQL tMyn

Huom! Ei voida kirjoittaa WHERE palkka > AVG(palkka) koska WHERE-ehdossa ei voida käyttää koostefunktioita. Datan käsittely MySQL tMyn

Seuraavat säännöt koskevat sisempää valintarakennetta: ORDER BY –ehto ei ole käytettävissä sisemmän valinnan SELECT-rivi koostuu yksittäisistä sarakenimistä paitsi silloin kun käytetään varattua sanaa EXISTS oletusarvoisesti sisemmän valinnan sarakenimet viittaavat samaisen rakenteen FROM-rivillä nimettyyn tauluun Jos sisempi valinta alkaa kahden operandin vertailulla, niin sellaisessa tapauksessa sisempi valinta tulee olla vertailun oikealla puolella. Siis äskeisessä esimerkissä olisi ollut väärin vaihtaa järjestystä… WHERE (SELECT AVG(palkka) FROM Henkilokunta)<palkka ; Datan käsittely MySQL tMyn

SELECT tilaNro, katuOs, kaupunki, postiNro, tyyppi, huoneLKm, vuokra Esim. 22. Tulostetaan ne vuokrakohteet, joita hoitaa Seunalantiellä sijaitseva henkilökunta, kuva 22. SELECT tilaNro, katuOs, kaupunki, postiNro, tyyppi, huoneLKm, vuokra FROM Vuokrattavat WHERE hloNro IN (SELECT hloNro FROM Henkilokunta WHERE tpNro=(SELECT tpNro FROM Toimipiste WHERE katuOs=’Seunalant’)); Datan käsittely MySQL tMyn

Kuva 22. Seunalantien toimipisteen henkilökunnan hoitamat vuokrakohteet. Datan käsittely MySQL tMyn

Huom! On käytettävä varattua sanaa IN (eikä siis yhtäsuuruus-operaattoria =), koska Seunalantiellä työskentelee kaksi henkilöä (Peltonen ja Havia) – nyt siis löytyy useampi ehdot täyttävä rivi sisemmästä kyselystä! Datan käsittely MySQL tMyn

Varattujen sanojen ANY (SOME) ja ALL käyttö. Esim. 23. Tulostetaan ne henkilöt henkilökunnasta, joiden palkka on suurempi kuin ainakin yhdellä henkilöllä toimipisteessä 5, kuva 23. SELECT hloNro, eNimi, sNimi, asema, palkka FROM Henkilokunta WHERE palkka > ANY (SELECT palkka WHERE tpNro=5); Datan käsittely MySQL tMyn

SELECT hloNro, eNimi, sNimi, asema, palkka FROM Henkilokunta Huom! Edellä oleva esimerkki ei ollut kovin tyylikäs. Eihän sovelluksen käyttäjällä luultavasti voi olla selvillä toimipiste 5:sta. Sitä vastoin ”toimipiste, joka on Seunalantiellä” kuulostaa uskottavammalta: SELECT hloNro, eNimi, sNimi, asema, palkka FROM Henkilokunta WHERE palkka > SOME (SELECT palkka WHERE tpNro = (SELECT tpNro FROM Toimipiste WHERE katuOs='Seunalant')); Datan käsittely MySQL tMyn

Kuva 23. Valitaan ANY (SOME)-kriteerillä. Datan käsittely MySQL tMyn

SELECT hloNro, eNimi, sNimi, asema, palkka FROM Henkilokunta Esim. 24. Tulostetaan ne henkilöt henkilökunnasta, joiden palkka on suurempi kuin yhdelläkään henkilöllä Seunalantien toimipisteessä, kuva 24. SELECT hloNro, eNimi, sNimi, asema, palkka FROM Henkilokunta WHERE palkka>ALL (SELECT palkka WHERE tpNro=(SELECT tpNro FROM Toimipiste WHERE katuOs='Seunalant')); Datan käsittely MySQL tMyn

Kuva 24. Valitaan ALL-kriteerillä rivejä. Datan käsittely MySQL tMyn

Kun on tarve saada informaatiota useammasta taulusta, käytetään joko sisäkkäistä kyselyä tai sitten liitosta (join). Jos lopullinen tulostaulu sisältää sarakkeita useammasta taulusta, niin sitten on käytettävä liitosta. Liitosta käytettäessä FROM-riville merkitään useampi kuin yksi taulu – nimet erotellaan pilkulla. FROM-rivillä voidaan asettaa tauluille aliasnimi, tällainen aliasnimi erotetaan alkuperäisestä taulun nimestä välilyönnillä. Datan käsittely MySQL tMyn

Aliasnimi on tyypillisesti hyvin lyhyt. Aliasnimeä voidaan sitten käyttää kätevästi erottelemaan sarakenimiä sellaisessa tapauksessa jossa voisi syntyä sekaannus. Aliasnimi on tyypillisesti hyvin lyhyt. Datan käsittely MySQL tMyn

SELECT a.asiakasNro, eNimi, sNimi, tilaNro, komm Esim. 25. Listataan joitakin tietoja asiakkaista (asiakasNro, eNimi, sNimi) ja ne kohteet joita he ovat käyneet katsomassa. Tulostetaan myös mahdolliset kommentit, kuva 25. SELECT a.asiakasNro, eNimi, sNimi, tilaNro, komm FROM Asiakas a, Esittely e WHERE a.asiakasNro = e.asiakasNro; Datan käsittely MySQL tMyn

Kuva 25. Yksinkertainen liitos Asiakas- ja Esittely -tauluista. Datan käsittely MySQL tMyn

Lajitellaan liitoksen tulostustaulu. Esim. 26. Listataan toimipiste kerrallaan ne henkilöt, jotka hoitavat jotakin vuokrattavaa kohdetta (tpNro, hloNro, eNimi, sNimi) ja nimetään myös kohteet (tilaNro). Tässä tapauksessa tpNro on ”major sort key” sekä hloNro ja tilaNro ovat ”minor sort keys”, kuva 26. SELECT h.tpNro, h.hloNro, eNimi, sNimi, tilaNro FROM Henkilokunta h, Vuokrattavat v WHERE h.hloNro=v.hloNro ORDER BY h.tpNro, h.hloNro, tilaNro; Datan käsittely MySQL tMyn

Kuva 26. Lajiteltu liitos. Datan käsittely MySQL tMyn

Tehdään liitos kolmesta taulusta. Esim. 27. Listataan toimipisteittäin ne henkilöt, jotka hoitavat jotakin vuokrattavaa kohdetta. Otetaan mukaan sarakkeet Toimipiste.tpNro, Toimipiste.kaupunki, hloNro, eNimi, sNimi sekä henkilön hallinnoiman vuokrattavan tilan tpNro. Tarvitaan siis liitos tauluista Toimipiste, Henkilokunta ja Vuokrattavat. Tulostus kuvassa 27. Datan käsittely MySQL tMyn

SELECT t.tpNro, t.kaupunki, h.hloNro, eNimi, sNimi, tilaNro FROM Toimipiste t, Henkilokunta h, Vuokrattavat v WHERE t.tpNro=h.tpNro AND h.hloNro=v.hloNro ORDER BY t.tpNro, h.hloNro, tilaNro; Datan käsittely MySQL tMyn

Kuva 27. Liitos kolmesta taulusta. Datan käsittely MySQL tMyn

Tehdään liitos useamman sarakkeen perusteella. Esim. 28. Tulostetaan tieto siitä miten monta kohdetta kukin henkilökuntaan kuuluva hallinnoi, kuva 28. SELECT h.tpNro, h.hloNro, COUNT(*) AS lkm FROM Henkilokunta h, Vuokrattavat v WHERE h.hloNro=v.hloNro GROUP BY h.tpNro, h.hloNro ORDER BY h.tpNro, h.hloNro; Datan käsittely MySQL tMyn

Kuva 28. Liitos useamman sarakkeen perusteella. Datan käsittely MySQL tMyn

Varattujen sanojen EXISTS ja NOT EXISTS käyttö. Esim. 29. Listataan ne henkilöt jotka työskentelevät Askolan toimistossa, kuva 29. SELECT hloNro, eNimi, sNimi, asema FROM Henkilokunta h WHERE EXISTS (SELECT * FROM Toimipiste t WHERE h.tpNro = t.tpNro AND kaupunki = ’Askola’); Datan käsittely MySQL tMyn

Kuva 29. EXISTS-sanan käyttö. Datan käsittely MySQL tMyn

Relaatioiden sisällön muokkaamiseen on käytössä kolme käskyä: INSERT - lisätään uusi rivi (uusia rivejä) tauluun UPDATE – muokataan olemassa olevaa dataa DELETE – poistetaan rivi/rivejä taulusta Datan käsittely MySQL tMyn

INSERT INTO TableName [columnList] VALUES (dataValueList) Tarkastellaan ensiksi sellaista INSERT-käskyä jolla voidaan lisätä yksi rivi olemassa olevaan relaatioon. Syntaksi on muotoa INSERT INTO TableName [columnList] VALUES (dataValueList) Datan käsittely MySQL tMyn

INSERT INTO Henkilokunta (eNimi, sNimi, asema, Esim 33. Lisää uusi rivi Henkilokunta-relaatioon, annetaan dataa jokaiselle sarakkeelle (ei perusavaimelle): INSERT INTO Henkilokunta (eNimi, sNimi, asema, sPuoli, sAika, palkka, tpNro) VALUES (’Sini’, ’Saaresmäki’, ’joht’, ’N’, ’195810-04’, 52200, 5); Esim 34: Annetaan vain joillekin kentille arvoja: Datan käsittely MySQL tMyn

INSERT INTO Henkilokunta (eNimi, sNimi, asema, sPuoli) VALUES (’Hilja’, ’Aaltonen’, ’joht’, ’N’); Toinen muoto INSERT-käskyä mahdollistaa useampien rivien kopiointia jostakin toisesta relaatiosta haluttuun relaatioon. Syntaksi on muotoa INSERT INTO TableName [columnList] SELECT … Datan käsittely MySQL tMyn

Sitten taulun henkilökunta sisältö tipautetaan tauluun Valiaikainen: Esim 35. Luodaan taulu Valiaikainen, joka on täsmälleen samanlainen kuin olemassa oleva taulu Henkilokunta. Sitten taulun henkilökunta sisältö tipautetaan tauluun Valiaikainen: INSERT INTO Valiaikainen SELECT * FROM Henkilokunta; Datan käsittely MySQL tMyn

Syntaksi on perusteiltaan muotoa UPDATE TableName UPDATE-käskyllä voidaan olemassa olevan relaation rivin sisältöä muuttaa halutulla tavalla. Syntaksi on perusteiltaan muotoa UPDATE TableName SET columnName1 = dataValue1[, columnName2 = dataValue2…] [WHERE searchCondition] Datan käsittely MySQL tMyn

Esim 36: Annetaan koko henkilökunnalle 3%:n palkankorotus: UPDATE Henkilokunta SET palkka = palkka*1.03; Esim 37: Rahat ovat vähissä, annetaan vain johtajille palkankorotus: SET palkka = palkka*1.05 WHERE asema = ’joht’; Datan käsittely MySQL tMyn

SET asema = ’joht’, palkka = 51000 WHERE hloNro=3; Esim. 38: Ylennetään Kirsi Kallio johtajaksi ja nostetaan palkka vuositasolla 51000€:oon. UPDATE Henkilokunta SET asema = ’joht’, palkka = 51000 WHERE hloNro=3; Datan käsittely MySQL tMyn

DELETE-käskyllä voidaan relaatiosta poistaa rivi/rivejä. Syntaksi on muotoa DELETE FROM TableName [WHERE searchCondition] Jos WHERE-valintaa ei ole mukana, niin kaikki rivit poistetaan. Jäljelle jää vain relaation määrittelyt. Jos halutaan poistaa koko relaatio, käytetään DROP TABLE –käskyä. Datan käsittely MySQL tMyn

Poistetaan Esittely-relaatiosta kaikki nykyiset tiedot: Esim 39: Poistetaan relaatiosta Esittely kaikki rivit liittyen tilanumeroon 4: DELETE FROM Esittely WHERE tilaNro=4; Poistetaan Esittely-relaatiosta kaikki nykyiset tiedot: DELETE FROM Esittely; Datan käsittely MySQL tMyn