Yhdiste, leikkaus, erotus ym.



Samankaltaiset tiedostot
Esimerkki. pankkien talletus- ja lainatietokanta: Yhdiste, leikkaus, erotus ym. Leikkaus (intersect) Yhdiste (Union) Erotus (except/minus) Leikkaus

Relaation tyhjyyden testaaminen

CSE-A1200 Tietokannat

TIEDONHALLINTA - SYKSY Luento 10. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

Liitokset - haut useaan tauluun

HELIA TIKO-05 1 (17) ICT03D Tieto ja tiedon varastointi Räty, Virkki

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 SQL- osa Harri Laine 1. SQL-valintaehto. SQL-valintaehto.

Helsingin yliopisto/tktl Kyselykielet, s 2006 Relaatiokalkyylit. Harri Laine 1

HAAGA-HELIA Heti-09 1 (12) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Näkymät

CS-A1150 Tietokannat CS-A1150 Tietokannat / 39

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-valintaehto. SQL-valintaehto. Opettajien nimet: Opiskelijoiden pääaineet

Helsingin yliopisto/ tktl DO Tietokantojen perusteet, s 2000 Relaatioalgebra Harri Laine 1. Relaatioalgebra

HELIA 1 (14) Outi Virkki Tiedonhallinta

Helsingin yliopisto, Tietojenkäsittelytieteen laitos Tietokantojen perusteet, , H.Laine

HELIA TIKO-05 1 (15) ICT03D Tieto ja tiedon varastointi Räty, Virkki

SELECT-lauseen perusmuoto

SQL:N PERUSTEET MARKKU SUNI

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

Kyselyt: Lähtökohtana joukko lukuja Laskukaava kertoo miten luvuista lasketaan tulos soveltamalla laskentaoperaatioita

Relaatioalgebra. Kyselyt:

Relaatioalgebra. Relaatioalgebra. Relaatioalgebra. Relaatioalgebra - erotus (set difference) Kyselyt:

FROM-lausekkeessa voidaan määritellä useampi kuin yksi taulu, josta tietoja haetaan: Tuloksena on taululistassa lueteltujen taulujen rivien

SQL - STRUCTURED QUERY LANGUAGE

TIEDONHALLINTA - SYKSY Luento 8. Saapumisryhmä: Pasi Ranne /9/13 Helsinki Metropolia University of Applied Sciences

Kyselyn yleisrakenne:

joukko operaatioita, joilla relaatioista voidaan muodostaa uusia relaatioita joukko opin perusoperaatiot yhdiste, erotus, ristitulo, leikkaus

Helsingin yliopisto/ tktl D Tietokantojen perusteet, s 2000 Relaatioalgebra. Harri Laine 1. Relaatioalgebra.

811120P Diskreetit rakenteet

Hohde Consulting 2004

2. Haet työntekijöiden tiedot etunimen mukaan nousevasti järjestettyinä. (ORDER BY) SELECT * FROM employees ORDER BY firstname ASC;

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

Helsingin yliopisto/tktl Tietokantojen perusteet, s 2007 SQL:n perusteet. Harri Laine 1. SQL tietokantakieli. SQL tietokantakieli

CSE-A1200 Tietokannat

Kirjoita jokaiseen erilliseen vastauspaperiin kurssin nimi, tenttipäivä, oma nimesi (selkeästi), opiskelijanumerosi ja nimikirjoituksesi

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 Tietokannan suunnittelusta Harri Laine 1

Kirjoita kuhunkin erilliseen vastauspaperiin kurssin nimi, tentin päiväys, oma nimesi, syntymäaikasi ja nimikirjoituksesi.

Tietokannan hallinta. Kevät 2004 Jan Lindström R&G Chapter 1

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2005 SQL-perusteet. Harri Laine 1. SQL tietokantakieli

Relaatiomalli ja -tietokanta

select tulostietomäärittely from taulukkeet [where valintaehdot] [group by ryhmitystekijät] [having ryhmärajoitteet] [order by järjestysperusta]

määritellä ja muokata tietokantaa ja sen käyttöoikeuksia virittää tietokannan talletusrakenteita hakea tietoa tietokannasta

SQL:N PERUSTEET MARKKU SUNI

Kirjasto Relaatiotietokannat Kevät Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

SQL. ! nykystandardi SQL3 eli SQL'99. ! CREATE TABLE, ALTER TABLE ja DROP TABLE. ! CREATE VIEW ja DROP VIEW. ! CREATE INDEX ja DROP INDEX

Helsingin yliopisto Tietojenkäsittelytieteen laitos (H.Laine) Tietokantojen perusteet. Liitteenä: Tiivistelmä SQL-syntaksista

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

Tietokantasuunnittelun pääperiaatteena on tiedon toiston välttäminen. Tiedon toistumiseen liittyy monenlaisia ongelmia.

Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Relaatiomallin peruskäsitteet Harri Laine 1. Relaatiotietokannat DONOTP

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2005 relaatiomalli Harri Laine 1.

4.3.4 SQL kyselyt... 45

17 BUDJETOINTI. Asiakaskohtainen Budjetti Ylläpito-ohjelma. Dafo Versio 10 BUDJETOINTI. Käyttöohje. BudgCust Yleistä

Valitsemalla sopivat alkiot joudutaan tämän määritelmän kanssa vaikeuksiin, jotka voidaan välttää rakentamalla joukko oppi aksiomaattisesti.

määritellä ja muokata tietokantaa ja sen käyttöoikeuksia virittää tietokannan talletusrakenteita hakea tietoa tietokannasta

Harjoitustyö. CSE-A1200 Tietokannat! Jasse Lahdenperä! ! Henri Nurmi! !

Harjoitustehtävä 1. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. SQL kysely

Relaatiotietokantojen perusteista. Harri Laine Helsingin yliopisto

Opiskeluoikeuksien maaran tiedonkeruu

Vain valitut kentät: SELECT Päivämäärä, Laskutusnimi, [ale mk], Loppusumma FROM Laskuotsikot

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Näkymät ja tiedon suojaus

Lisätään avainarvo 6, joka mahtuu lehtitasolle:

CSE-A1200 Tietokannat

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, k 2006 relaatioalgebra. Harri Laine 1

SQL-kielen perusteet. Tietokantojen perusteet

Opettajana Mika Sorsa, HAMK:n ammatillisen opettajakoulutuksen opetusharjoittelija

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

Makrojen mystinen maailma lyhyt oppimäärä

1. a) Laadi suoraviivaisesti kyselyä vastaava optimoimaton kyselypuu.

POLKU LUOKKAKAAVIOISTA TAULUJEN TOTEUTUKSEEN

VINKKI: Katso Kentät Muistioon -painikkeella, mikä on taulukon nimen oikea kirjoitusasu.

Lisätään avainarvo 1, joka mahtuu lehtitasolle:

Tietokantakurssit / TKTL

D B. Tietokannan hallinta kertaus

Tietokannat II -kurssin harjoitustyö

Hakukyselyt: SELECT * FROM taulu WHERE sarake1 = Malli Nimi [WHERE sarake1 LIKE M% ] [WHERE BETWEEN ehto1 AND ehto2] [WHERE sarake1 IN/= (alikysely)]

Access-kyselyt. Luetteloinnin kehittämispäivä Mia Kujala

(1) refleksiivinen, (2) symmetrinen ja (3) transitiivinen.

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2004 Tietokannan suunnittelusta. Harri Laine 1

Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden kanssa, joiden lakina on tietyn ominaisuuden samuus.

Paikkatiedon käsittely 6. Kyselyn käsittely

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

5 SQL TIETOKANTAKIELI...33

Jouni Huotari & Ari Hovi. Käsitemallinnuksesta relaatiokantaan KÄSITEMALLI. LOOGINEN MALLI: tietomalli valittu. FYYSINEN MALLI: DBMS valittu

Helsingin yliopisto, tktl DO Tietokantojen perusteet, kevät 2000 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

Sovellettu todennäköisyyslaskenta B

Tieto- ja tallennusrakenteet

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Harjoitustehtävä 1. Harjoitustehtävän 1 ratkaisu. Harjoitustehtävä 1. Relaatioalgebra -liitokset (join) Liitos

Koostefunktiot. Viisi standardifunktiota: Esim. montako henkilöä on henkilo-taulussa:

Algoritmit 2. Luento 7 Ti Timo Männikkö

D B. Kyselyjen käsittely ja optimointi. Kyselyn käsittelyn vaiheet:

12. Javan toistorakenteet 12.1

ABHELSINKI UNIVERSITY OF TECHNOLOGY

12. Javan toistorakenteet 12.1

Sisältö. 22. Taulukot. Yleistä. Yleistä

Formaalit menetelmät: Kirjaston formalisointi Z-kuvauskielellä

VH5, JOTU, MagicDraw:n käyttö

Transkriptio:

Yhdiste, leikkaus, erotus ym. SQL tarjoaa myös relaatioalgebran operaatiot yhdiste, leikkaus, erotus Näissä operaatioissa taulujen on oltava samarakenteisia, ts. niissä on oltava samantyyppiset vastinsarakkeet. Informaatiojärjestelmät, kevät 1997 4.2.1999 1 Esimerkki. pankkien talletus- ja lainatietokanta: ASIAKAS AsOsoite AsKaupunki Ukkonen Kaivotie Vantaa Koivikko Helsinki Länsitie Vantaa Itäväylä Helsinki Laine Otakaari Espoo TALLETUS KNimi Tilinro Summa KOP2 22222 2000 SYP5 55555 Ukkonen 5000 KOP2 33333 3000 KONTTORI KNimi Varat KKaupunki SYP5 210 000 Espoo KOP2 170 000 Tampere PSP6 80 000 Espoo LAINA KNimi Tilinro Summa SYP5 500 Laine 4000 KOP2 202 2500 PSP6 660 Ukkonen 500 KOP2 444 1500 Informaatiojärjestelmät, kevät 1997 4.2.1999 2 Tietojenkäsittelytieteen laitos 1/15

Yhdiste (Union) (kysely) UNION (kysely) Luettele ne asiakkaat, joilla on talletus tai laina tai molemmat KOP2-konttorissa. (SELECT WHERE KNimi = 'KOP2') UNION (SELECT FROM Laina WHERE KNimi = 'KOP2'); Informaatiojärjestelmät, kevät 1997 4.2.1999 3 Leikkaus (intersect) (kysely) INTERSECT (kysely) Luettele ne asiakkaat, joilla on sekä talletus että laina KOP2-konttorissa. (SELECT DISTINCT WHERE KNimi = 'KOP2') INTERSECT (SELECT DISTINCT FROM Laina WHERE KNimi = 'KOP2'); Informaatiojärjestelmät, kevät 1997 4.2.1999 4 Tietojenkäsittelytieteen laitos 2/15

Leikkaus Miksi SELECT DISTINCT? INTERSECT ei poista duplikaatteja (niitä ei leikkausoperaation tuloksena synny). Informaatiojärjestelmät, kevät 1997 4.2.1999 5 Erotus (except/minus) (kysely) EXCEPT (kysely) Luettele ne asiakkaat, joilla on talletus mutta ei lainaa KOP2-konttorissa. (SELECT DISTINCT WHERE KNimi ='KOP2') EXCEPT (SELECT FROM Laina WHERE KNimi = 'KOP2'); Informaatiojärjestelmät, kevät 1997 4.2.1999 6 Tietojenkäsittelytieteen laitos 3/15

Erotus Miksi kyselyn jälkimmäisessä puoliskossa ei käytetä SELECT DISTINCT -muotoa? UNION, INTERSECT ja EXCEPT standardissa, MINUS Oraclessa Informaatiojärjestelmät, kevät 1997 4.2.1999 7 Esimerkkikanta. Kirjasto KIRJA ASIAKAS Hetu Nimi 111111-1111 Ukkonen 101010-1010 090909-9999 121212-2222 Sippu ISBN Kirjannimi Tekijä 111 Oh! Pascal Cooper 552 Algebra I Myrberg 444 Samlade dikter Fröding 898 Lisp Winston 789 Electronics Smith LAINAUS Hetu ISBN Pvm 101010-1010 111 12.02.94 121212-2222 898 22.05.94 101010-1010 789 24.03.94 111111-1111 444 01.01.94 Informaatiojärjestelmät, kevät 1997 4.2.1999 8 Tietojenkäsittelytieteen laitos 4/15

Sisäkkäiset kyselyt WHERE-lauseen ehdon osapuolena voi olla toinen kysely. Niiden lainaajien nimet, joilla on kirjoja lainassa? SELECT Nimi FROM Asiakas Asi, Lainaus Lai WHERE Asi.Hetu = Lai.Hetu; Informaatiojärjestelmät, kevät 1997 4.2.1999 9 Edellinen kysely sisäkkäisten kyselyiden avulla SELECT Nimi FROM Asiakas WHERE Hetu IN (SELECT Hetu FROM Lainaus); Sisempi kysely palauttaa joukon hetuja: Hetu 101010-1010 121212-2222 101010-1010 111111-1111 Informaatiojärjestelmät, kevät 1997 4.2.1999 10 Tietojenkäsittelytieteen laitos 5/15

Ulommassa kyselyssä ASIAKAStaulusta valitaan ne rivit, joiden hetut täsmäävät sisäkyselyn kanssa: SELECT Nimi FROM Asiakas WHERE Hetu IN sisäkyselyn hetut; Mitä kysely lopulta tulostaa? Nimi Ukkonen Sippu Informaatiojärjestelmät, kevät 1997 4.2.1999 11 Niiden kirjojen nimet, jotka on lainattu 01.03.94 jälkeen: SELECT Kirjannimi FROM Kirja K, Lainaus L WHERE (K.ISBN = L.ISBN) AND (L.Pvm > 01.03.94); Tai näin: SELECT Kirjannimi FROM Kirja WHERE ISBN IN (SELECT ISBN FROM Lainaus WHERE Pvm > 01.03.94); ISBN 898 789 Kirjannimi Lisp Electronics Informaatiojärjestelmät, kevät 1997 4.2.1999 12 Tietojenkäsittelytieteen laitos 6/15

Sisäkkäiset kyselyt ISBN:t oltava samaa tyyppiä, attribuuttien nimien ei toki tarvitse olla samat. IN-määre tutkii joukkoon kuulumista ( ). Yhtä monta IN- määrettä ( sisäkkäistä pykälää ) kuin on liitosehtojakin. Informaatiojärjestelmät, kevät 1997 4.2.1999 13 Sisäkkäiset kyselyt SELECT Kirjannimi FROM Kirja, Lainaus, Asiakas WHERE Kirja.ISBN=Lainaus.ISBN AND Lainaus.Hetu=Asiakas.Hetu AND Asiakas.Nimi= ; SELECT Kirjannimi FROM Kirja WHERE ISBN IN (SELECT ISBN FROM LAINAUS WHERE Hetu IN (SELECT Hetu FROM ASIAKAS ISBN WHERE Nimi= )); Hetu 101010-1010 Informaatiojärjestelmät, kevät 1997 4.2.1999 14 111 789 Kirjannimi Oh! Pascal Electronics Tietojenkäsittelytieteen laitos 7/15

Riippumaton sisäkysely SELECT Pvm FROM Lainaus WHERE Hetu IN Hetu (SELECT Hetu 101010-1010 FROM Asiakas WHERE Nimi = ''); Pvm 12.02.94 24.03.94 Informaatiojärjestelmät, kevät 1997 4.2.1999 15 Kytketty sisäkysely sisemmän kyselyn WHERE-osassa viittaus ulomman kyselyn relaatioon => sisempi kysely mahdoton toteuttaa erikseen "ykkösvaiheena" (vrt. edell. sivu) => toteutetaan sisäkysely kerran jokaista ulomman kyselyn mahdollista riviä kohti Informaatiojärjestelmät, kevät 1997 4.2.1999 16 Tietojenkäsittelytieteen laitos 8/15

Kytketty sisäkysely Kirjojen nimet, jotka ovat lainassa ja kirjan tekijän nimi on sama kuin lainaajan nimi: SELECT Kirjannimi FROM Kirja, Lainaus, Asiakas WHERE Lainaus.Hetu=Asiakas.Hetu AND Lainaus.ISBN=Kirja.ISBN AND Asiakas.Nimi = Kirja.Tekijä; Informaatiojärjestelmät, kevät 1997 4.2.1999 17 Kytketty sisäkysely SELECT Kirjannimi FROM Kirja WHERE ISBN in ( SELECT ISBN FROM Lainaus, Asiakas WHERE Lainaus.Hetu=Asiakas.Hetu and Nimi = Kirja.Tekijä ); Informaatiojärjestelmät, kevät 1997 4.2.1999 18 Tietojenkäsittelytieteen laitos 9/15

Esimerkki. pankkien talletus- ja lainatietokanta: ASIAKAS AsOsoite AsKaupunki Ukkonen Kaivotie Vantaa Koivikko Helsinki Länsitie Vantaa Itäväylä Helsinki Laine Otakaari Espoo TALLETUS KNimi Tilinro Summa KOP2 22222 2000 SYP5 55555 Ukkonen 5000 KOP2 33333 3000 KONTTORI KNimi Varat KKaupunki SYP5 210 000 Espoo KOP2 170 000 Tampere PSP6 80 000 Espoo LAINA KNimi Tilinro Summa SYP5 500 Laine 4000 KOP2 202 2500 PSP6 660 Ukkonen 500 KOP2 444 1500 Informaatiojärjestelmät, kevät 1997 4.2.1999 19 Leikkaus (INTERSECT) sisäkyselyn avulla Luettele ne asiakkaat, joilla on sekä talletus että laina KOP2-konttorissa. SELECT DISTINCT WHERE (KNimi = 'KOP2') AND IN (SELECT Asnimi FROM Laina WHERE Knimi = 'KOP2'); Informaatiojärjestelmät, kevät 1997 4.2.1999 20 Tietojenkäsittelytieteen laitos 10/15

IN-määrettä voi edeltää myös useampi attribuutti. Edellinen kysely toisin: SELECT DISTINCT WHERE (KNimi = 'KOP2') AND (KNimi, ) IN Laine (SELECT Knimi, Asnimi FROM Laina); KNimi SYP5 KOP2 PSP6 KOP2 Ukkonen Informaatiojärjestelmät, kevät 1997 4.2.1999 21 Erotus (MINUS) sisäkyselyn avulla Luettele ne asiakkaat, joilla on talletus mutta ei lainaa KOP2-konttorissa. SELECT DISTINCT WHERE (KNimi = 'KOP2') AND NOT IN (SELECT Asnimi FROM Laina WHERE Knimi = 'KOP2'); Informaatiojärjestelmät, kevät 1997 4.2.1999 22 Tietojenkäsittelytieteen laitos 11/15

Tai taas toisin: SELECT DISTINCT WHERE (KNimi = 'KOP2') AND (KNimi, ) NOT IN KNimi (SELECT Knimi, Asnimi SYP5 Laine FROM Laina); KOP2 PSP6 KOP2 Ukkonen Informaatiojärjestelmät, kevät 1997 4.2.1999 23 Lisäpiirteitä: Samaan tauluun viittaaminen aliaksilla Luettele ne asiakkaat, joilla on talletus sellaisessa konttorissa, jossa lla on talletus. SELECT DISTINCT Tal. T, Talletus Tal WHERE (T.Asnimi = '') AND (T.KNimi = Tal.KNimi); Informaatiojärjestelmät, kevät 1997 4.2.1999 24 Tietojenkäsittelytieteen laitos 12/15

Lisäpiirteitä: Samaan tauluun viittaaminen viitenimillä T KNimi Tilinro Summa KOP2 22222 2000 SYP5 55555 Ukkonen 5000 KOP2 33333 3000 TAL KNimi Tilinro Summa KOP2 22222 2000 SYP5 55555 Ukkonen 5000 KOP2 33333 3000 Informaatiojärjestelmät, kevät 1997 4.2.1999 25 Toinen tapa on sisäkyselyn ja IN-määreen käyttäminen: SELECT DISTINCT WHERE KNimi IN Knimi (SELECT Knimi KOP2 WHERE = ''); Miksi DISTINCT-määre? Informaatiojärjestelmät, kevät 1997 4.2.1999 26 Tietojenkäsittelytieteen laitos 13/15

Lisäpiirteitä: SOME ja ALL IN-määreellä testataan, kuuluuko WHEREosan alkio sisäkyselyn tuottamaan joukkoon vai ei, eli vertailun osapuolen on oltava sama kuin jokin joukon alkio (siis =) Joskus voidaan tarvita myös vertailuoperaattoreita: < <= > >= <> Informaatiojärjestelmät, kevät 1997 4.2.1999 27 SOME Luettele ne konttorit, joilla on enemmän varoja kuin jollakin Espoossa sijaitsevalla konttorilla. (Eli ne, joilla on enemmän kuin sillä Espoossa olevalla konttorilla, jolla on kaikkein vähiten!) SELECT KNimi KNimi FROM Konttori SYP5 Varat WHERE Varat > SOME 210 000 80 000 SOME:n tilalle käy ANY! (SELECT Varat FROM Konttori WHERE KKaupunki = 'Espoo'); KOP2 Informaatiojärjestelmät, kevät 1997 4.2.1999 28 Tietojenkäsittelytieteen laitos 14/15

ALL Luettele ne konttorit, joilla on enemmän varoja kuin millä tahansa Espoossa sijaitsevalla konttorilla. SELECT KNimi KNimi FROM Konttori WHERE Varat > ALL tyhjä! (SELECT Varat FROM Konttori WHERE KKaupunki = 'Espoo'); Varat 210 000 80 000 Informaatiojärjestelmät, kevät 1997 4.2.1999 29 Vertailuoperaattorien käyttö Vertailuoperaattoreita voidaan käyttää suoraan (ilman SOMEa tai ALLia), jos ollaan varmoja siitä, että sisäkysely tuottaa tulokseksi aina täsmälleen yhden rivin. Esimerkiksi koostefunktioiden yhteydessä käy näin. Informaatiojärjestelmät, kevät 1997 4.2.1999 30 Tietojenkäsittelytieteen laitos 15/15