Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Datan käsittely MySQL SQL, Structured Query Language

Samankaltaiset esitykset


Esitys aiheesta: "Datan käsittely MySQL SQL, Structured Query Language"— Esityksen transkriptio:

1 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

2 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

3 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

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

5 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

6 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

7 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

8 Toimipiste Henkilokunta Datan käsittely MySQL tMyn

9 Asiakas Omistaja Datan käsittely MySQL tMyn

10 Vuokrattavat Esittely Datan käsittely MySQL tMyn

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

12 Datan käsittely MySQL tMyn

13 Datan käsittely MySQL tMyn

14 Datan käsittely MySQL tMyn

15 Datan käsittely MySQL tMyn

16 Datan käsittely MySQL tMyn

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

18 Datan käsittely MySQL tMyn

19 Datan käsittely MySQL tMyn

20 Datan käsittely MySQL tMyn

21 Datan käsittely MySQL tMyn

22 Datan käsittely MySQL tMyn

23 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

24 [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

25 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

26 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

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

28 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

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

30 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

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

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

33 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

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

35 Ä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

36 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

37 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

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

39 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

40 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

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

42 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 AND 30000; Datan käsittely MySQL tMyn

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

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

45 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

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

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

48 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

49 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

50 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

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

52 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

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

54 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

55 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

56 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

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

58 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

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

60 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

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

62 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

63 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

64 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

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

66 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 ’ ’ AND ’ ’; Datan käsittely MySQL tMyn

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

68 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

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

70 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

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

72 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

73 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

74 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

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

76 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

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

78 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

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

80 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

81 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

82 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

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

84 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

85 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

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

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

88 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

89 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

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

91 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

92 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

93 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

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

95 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

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

97 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

98 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

99 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

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

101 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

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

103 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

104 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

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

106 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

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

108 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

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

110 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

111 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

112 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’, ’ ’, 52200, 5); Esim 34: Annetaan vain joillekin kentille arvoja: Datan käsittely MySQL tMyn

113 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

114 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

115 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

116 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

117 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

118 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

119 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


Lataa ppt "Datan käsittely MySQL SQL, Structured Query Language"

Samankaltaiset esitykset


Iklan oleh Google