Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Tietokannat -kurssi KSAO, Datanomit, käytön tuki kevät 2015 Lauri Tapola.

Samankaltaiset esitykset


Esitys aiheesta: "Tietokannat -kurssi KSAO, Datanomit, käytön tuki kevät 2015 Lauri Tapola."— Esityksen transkriptio:

1 Tietokannat -kurssi KSAO, Datanomit, käytön tuki kevät 2015 Lauri Tapola

2 Tietojen yhdistäminen eri taulujen välillä. SQL join 24.3.2015 Lauri Tapola

3 Miksi tietoja pitää yhdistellä? Relaatiotietokannoissa tiettyyn asiaan liittyvä data on vain yhdessä taulussa. Jos esimerkiksi lainaus raportille halutaan asiakkaan nimi asiakas – taulusta ja kirjan nimi kirja –taulusta, niin taulujen data pitää yhdistellä perus- ja viiteavainten avulla.

4 Kuinka tietoja yhdistellään? Avaimet! Ohessa on kirjasto- taulujen avaimet. lainaus –taulusta on viite-avaimet kirja –tauluun sekä asiakas –tauluun. Taulu: kirja Perusavain : kirja_id Taulu: lainaus Perusavain: lainaus_id Viiteavaimet: asiakas_id ja kirja_id Taulu: asiakas Perusavain: asiakas_id

5 Yhdistelmäkyselyt. Perus- ja viiteavaimet. Kun yhdistellään taulujen tietoja, ensiksi annetaan tauluille aliasnimet, jotta kysely lyhenee. Esimerkiksi kirja=kir, asiakas=asi, lainaus=lai. ( Voidaan myös käyttää kokonaisia taulujen nimiä, mutta se on hitaampaa.) SELECT –komennossa valitaan alias-nimet ja kentät: SELECT asi.asiakas_nimi, lai.lainauspaiva, lai.palautuspaiva, lai.kirja_id FROM asiakas asi, lainaus lai WHERE asi.asiakas_id=lai.asiakas_id WHERE –komennossa linkitetään taulut avainkenttien perusteella. Taulu: kirja = kir Perusavain : kirja_id Taulu: lainaus = lai Perusavain: lainaus_id Viiteavaimet: asiakas_id ja kirja_id Taulu: asiakas = asi Perusavain: asiakas_id

6 Taulujen tietojen yhdistämiseksi tarvitaan join- komentoja tai viiteavainten linkitys WHERE ehdossa. Yleisin tapa eri taulujen tietojen yhdistämiseksi on viiteavainten linkitys WHERE ehdossa seuraavan esimerkin mukaisesti: SELECT asi.asiakas_nimi, lai.lainauspaiva, lai.palautuspaiva, lai.kirja_id FROM asiakas asi, lainaus lai WHERE asi.asiakas_id = lai.asiakas_id mitä edellinen kysely palauttaa? JOIN –komennot käydään jatkokurssilla. Jos asia kiinnostaa, katso http://www.w3schools.com/sql/sql_join.asphttp://www.w3schools.com/sql/sql_join.asp INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN.

7 Yhdistelmäkyselyt. Esimerkki1, kirjasto 1.Hae lainatut kirjat. Listaa kirja_id, kirjan nimi ja lainauspäivä. SELECT kir.kirja_id, kir.kirjan_nimi, lai.lainauspaiva FROM kirja kir, lainaus lai WHERE kir.kirja_id = lai.kirja_id Kysely palauttaa 17 riviä. Taulu: kirja = kir Perusavain : kirja_id Taulu: lainaus = lai Perusavain: lainaus_id Viiteavaimet: asiakas_id ja kirja_id

8 Yhdistelmäkyselyt. Esimerkki2, kirjasto 2. Hae lainassa olevat kirjat. Listaa kirja_id, kirjan nimi, lainauspäivä ja palautuspäivä. Jos kirjaa ei ole palautettu, niin palautuspäivä on siis tyhjä isnull(lai.palautuspaiva). SELECT kir.kirja_id, kir.kirjan_nimi, lai.lainauspaiva, lai.palautuspaiva FROM kirja kir, lainaus lai WHERE kir.kirja_id = lai.kirja_id AND ISNULL(lai.palautuspaiva) Kysely palauttaa 10 riviä. Taulu: kirja = kir Perusavain : kirja_id Taulu: lainaus = lai Perusavain: lainaus_id Viiteavaimet: asiakas_id ja kirja_id

9 Yhdistelmäkyselyt. Esimerkki3, kirjasto 3. Hae lainassa olevat kirjat. Listaa kirja_id, kirjan nimi, lainauspäivä, eräpäivä ja Asiakasnimi. Listaa Asiakasnimen ja lainauspäivän mukaisessa järjestyksessä. SELECT kir.kirja_id, kir.kirjan_nimi, lai.lainauspaiva, lai.erapaiva, asi.asiakas_nimi FROM kirja kir, lainaus lai, asiakas asi WHERE kir.kirja_id = lai.kirja_id AND asi.asiakas_id=lai.asiakas_id AND ISNULL(lai.palautuspaiva) ORDER BY asi.asiakas_nimi, lai.lainauspaiva Taulu: kirja = kir Perusavain : kirja_id Taulu: lainaus = lai Perusavain: lainaus_id Viiteavaimet: asiakas_id ja kirja_id Taulu: asiakas = asi Perusavain: asiakas_id

10 Yhdistelmäkyselyt. Esimerkki4, kirjasto 4. Hae myöhässä olevat kirjat. Listaa kirja_id, kirjan nimi, lainauspäivä, eräpäivä, nykyinen päivä, asiakasnimi ja lisäksi teksti ”MYÖHÄSSÄ”. Listaa Asiakasnimen mukaisessa järjestyksessä. SELECT kir.kirja_id, kir.kirjan_nimi, lai.lainauspaiva, lai.erapaiva, date(now()) as tanaan, asi.asiakas_nimi, "MYÖHÄSSÄ" as tila FROM kirja kir, lainaus lai, asiakas asi WHERE kir.kirja_id = lai.kirja_id AND asi.asiakas_id=lai.asiakas_id AND ISNULL(lai.palautuspaiva) AND date(now()) > lai.erapaiva ORDER BY asi.asiakas_nimi, lai.lainauspaiva

11 Oppimistehtävä 6 – kysymys Suunnittele kysely seuraavaan tarpeeseen. h1. Hae Maaliskuussa lainatut kirjat. Listaa niiden nimet ja lainauspäivä. Ohje: hae ensin maaliskuun lainaukset. Select * from lainaus where lainauspaiva >= "2015-03-01" and lainauspaiva < "2015-04-01” Yhdistä lainaus-taulu ja kirja-taulu. WHERE lai.kirja_id = kir.kirja_id Lopuksi valitset sarakkeet yhdistelmäkyselyyn. SELECT kir.kirjan_nimi, lai.lainauspaiva FROM lainaus lai, kirja kir Taulu: kirja Perusavain : kirja_id Taulu: lainaus Perusavain: lainaus_id Viiteavaimet: asiakas_id ja kirja_id

12 Oppimistehtävä 6 – VIHJE Alla on oikeat vastaus, mutta rivit ovat menneet väärään järjestykseen, laita ne oikeaan järjestykseen niin löydät oikean vastauksen. h1. Hae Maaliskuussa lainatut kirjat. Listaa niiden nimet ja lainauspäivä. lai.lainauspaiva >= "2015-03-01" and lai.lainauspaiva < "2015-04-01" FROM lainaus lai, kirja kir SELECT kir.kirjan_nimi, lai.lainauspaiva WHERE lai.kirja_id = kir.kirja_id and Taulu: kirja Perusavain : kirja_id Taulu: lainaus Perusavain: lainaus_id Viiteavaimet: asiakas_id ja kirja_id


Lataa ppt "Tietokannat -kurssi KSAO, Datanomit, käytön tuki kevät 2015 Lauri Tapola."

Samankaltaiset esitykset


Iklan oleh Google