Slides:



Advertisements
Samankaltaiset esitykset
15. Loogiset operaatiot.
Advertisements

Komponenttien rakenteellinen tärkeys
@ Leena Lahtinen Helia Ohjelman perusrakenteet 1. PERÄKKÄISRAKENNE 2. VALINTARAKENNE 3. TOISTORAKENNE.
Suorita menulta voit ottaa yhteyden iSeries:iin tai katkaista yhteyden sinne ja poistua RI400:sta.
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
Suomen kielen ominaispiirteet.
Portal-ohje opiskelijoille. 2 Kirjaudu sisään tunnuksella ja salasanalla. Portaliin kirjauduttaessa käytetään samoja tunnuksia kuin muihin VAMKin IT-järjestelmiin.
JavaScript (c) Irja & Reino Aarinen, 2007
Ohjelman perusrakenteet
Relaatiomalli •Ted Codd 1970 •Matemaattinen perusta •Helppo toteuttaa •Helppo omaksua •Käytetyin tietomalli •Muodostaa perustan kurssin myöhemmille asioille.
Tietokanta.
Kökkötraktori-verkkokauppa
© 2010 IBM Corporation1 Sisältö  Uusi sisältö luodaan aina sisällönhallinnassa –Uusi -> Sisältö –Tallenna nimellä olemasta olevasta sisällöstä  Tavallinen.
Rakenteinen ohjelmointi
Aggregaattifunktiot (1)
EXtensible Markup Language
Auli Jaakkola 1 Palkkatiedustelun tietomallin mukaisen tilastovastauksen luonti Tässä esimerkissä tiedosto tuotetaan excelistä csv-muotoon. 1.Oletetaan,
Duaali Teemu Myllynen.
AS Automaation signaalinkäsittelymenetelmät
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
2. Vuokaaviot.
m0 M7 Maksimitermi Minimitermi Boole A = A A · 0 = 0 SOP De Morgan POS
Haaga-Helia Ammattikorkeakoulu
Relaatioalgebra (1) Kokoelma relaatioiden käsittelyyn tarkoitettuja operaatioita Operaatiot muuntavat relaatioita uusiksi relaatioiksi Muodostaa perustan.
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.
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.
Tuula Kuoppala ja Salla Säkkinen
4.1-SQL-toimintoja Teuhola Relaatioskeemaa täydentäviä piirteitä: Näkymät (views) Näkymä on johdettu relaatio, jota ei fyysisesti ole välttämättä.
4-Tietokantaohjelmointi Teuhola Tietokantasovellusten ohjelmointi Taustaa 4.1. Relaatioskeemaa täydentäviä piirteitä 4.2. Sulautettu SQL, Java.
SQL Standardoitu kieli, jonka avulla voidaan
Opiskelun ja opetuksen tukipalveluiden arkkitehtuurin ”Tvärminnen risti”
TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op
Tietokannat –kurssi SQL peruskyselyt
Tietokannat -kurssi KSAO, Datanomit, käytön tuki kevät 2015 Lauri Tapola.
6. Relaatioalgebra ja relaatiokalkyyli
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
5. Lineaarinen optimointi
4.2-Sulautettu SQL Teuhola Sulautettu (embedded) SQL Ohjelmointikielen (ns. isäntäkielen) laajennus ISO-standardi, määritelty kielille Ada,
Luku- ja tenttivihjeet 5 Eero Salmenkivi Opettajankoulutuslaitos.
DO NOT PRINT THIS DOCUMENT SQL -valintaehto CREATE TABLE opettaja ( opetunnus varchar(12) NOT NULL, nimi varchar(40) NOT NULL, puhelin varchar(12), tyohuone.
XML Schema Teppo Räisänen Liiketalouden yksikkö.
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.
Yleistä Kotisivuja päivitetty Demoryhmät Luentomonisteen ensimmäiset osat Luentokalvot jaossa Demot alkavat maanantaina Selvitä oma demoryhmäsi Tutustu.
Tietokannat Tietotekniikan perusteet Pekka Orponen.
Kontrollirakenteet laajemmin
Tehtävä 3: PowerPoint Ilkka Huttunen. Tämän tulee olla DIA 2. Tämä dia on nyt dia 1. ◦ Siirrä tämä dia siten, että siitä tulee dia 2. ◦ Lisää tähän esitykseen:
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
Yleinen systeemiteoria General Systems Theory Johdatus tietojärjestelmätieteeseen KL2001 Teema numero 1.
Karteesinen tulo Huomaa attribuuttien nimien tarkentaminen taulujen nimillä.
Sosiaali- ja terveystoimen henkilöstön työtyytyväisyyskysely 2011
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.
Janne Korhonen. Henkilöhistoria Syntyi 1815 alaluokan perheeseen Isä kannusti opiskeluun Toimi myöhemmin opettajana Lopulta päätyi perustamaan oman koulun.
Hakemistot Nopeuttavat hakuoperaatioita Hidastavat päivitysoperaatioita Pääavaimelle luodaan aina indeksi; päävain toimii usein hakukriteerinä Luodaan.
MapInfon tiedostot TAB – Tiedosto, jonka avulla tietokanta avataan MapInfossa. Tiedostossa tietoja kentistä ja koordinaattijärjestelmästä. DAT, XLS. TXT.
KSAO, Datanomit, käytön tuki kevät 2015 Lauri Tapola
SQL ● Structured Query Language ● Standardoitu kieli tietokantakyselyiden tekemiseen – Standardoitu ei tarkoita etteikö olisi useampia versioita, joten.
Uusi näkökulma TIEA341 Funktio-ohjelmointi 1 Syksy 2005.
SPARQL.
13. Loogiset operaatiot.
Vielä laskentoa: kertausta ja täsmennystä
14. Hyvä ohjelmointitapa.
13. Loogiset operaatiot.
Ohjelman perusrakenteet
Esityksen transkriptio:

2-Relaatiokielistä Teuhola 2012 Relaatiokalkyyli Relaatioalgebra Suhde SQL:ään 2-Relaatiokielistä Teuhola 2012

2-Relaatiokielistä Teuhola 2012 Taustaa Relaatiomalliin kuuluu oleellisena osana toiminnallisuus, erityisesti uusien relaatioiden johtaminen olemassa-olevista. Relaatiokalkyyli ja -algebra ovat formaalisia kyselykieliä, joilla toiminnallisuus voidaan määritellä. Mihin näitä tarvitaan – eikö SQL riitä? Relaatiokalkyyli muodostaa SQL:n teoreettisen perustan. Se toimii myös mittapuuna muiden relaatiokielten voimakkuudelle Relaatioalgebra on pohjana SQL-kyselyiden optimoinnissa. SQL:ää on aikojen kuluessa laajennettu algebran suuntaan. 2-Relaatiokielistä Teuhola 2012

2-Relaatiokielistä Teuhola 2012 Taustaa (jatk.) Vrt. matematiikka, esim. joukko-oppi: Algebrallinen esitys: A  B  C Looginen esitys: { x | xA  xB  xC } A B C Joukkojen A, B ja C leikkaus 2-Relaatiokielistä Teuhola 2012

2-Relaatiokielistä Teuhola 2012 Taustaa (jatk.) Relaatiokalkyyli on korkean tason deklaratiivinen kieli, joka määrittelee kyselyn tulosrelaation käyttäen matemaattista logiikkaa, mutta ei spesifioi suoritusjärjestystä. Relaatioalgebra on operationaalinen kieli. Sen kyselylauseke koostuu relaatio-operaa-tioista, joiden laskentajärjestys on (osittain) määrätty. Operaation tulos on aina relaatio, joten lausekkeet voivat olla sisäkkäisiä. 2-Relaatiokielistä Teuhola 2012

Alustava vertailuesimerkki SQL versio 1: SQL versio 2: SELECT R.A SELECT R.A FROM R, S FROM R JOIN S WHERE R.C = S.D ON R.C = S.D AND S.B = 123 WHERE S.B = 123 Relaatiokalkyyli: Relaatioalgebra: { r.A | R(r) AND A (R ⋈C=D (B=123 (S))) (s) (S(s) AND s.B = 123 AND r.C = s.D } 2-Relaatiokielistä Teuhola 2012

2-Relaatiokielistä Teuhola 2012 2.1. Relaatiokalkyyli Relaatiokalkyyli (Relational Calculus) on logiikkakieli, jossa lähderelaatioista johdetaan tulosrelaatio perustuen muuttujia sisältäviin ehtolausekkeisiin. Muuttujat saavat arvoikseen joko monikoita eli relaation rivejä (jolloin puhutaan monikko-kalkyylistä) tai attribuuttiarvoja (jolloin puhutaan määrittelyjoukkokalkyylistä). Tällä kurssilla rajoitutaan edelliseen. 2-Relaatiokielistä Teuhola 2012

Relaatiokalkyylin historiaa Predikaattikalkyyliä ehdotettiin kyselykielen pohjaksi jo 1967 (Kuhns); huom. ennen relaatiomallin esittelyä. Relaatiomallille sovitettua kalkyyliä ehdotti Codd (1972), samoin kuin siihen perustuvaa kysely-kieltä (Alpha). Myöhemmin Ingres-järjestelmässä käytetty Quel-kyselykieli oli melko lähellä Alphaa. 2-Relaatiokielistä Teuhola 2012

Monikkokalkyyli (tuple relational calculus): kielen komponentit Monikkomuuttujat (tuple variables): Näitä voidaan pitää eräänlaisina silmukkaindekseinä. Kussakin laskenta-vaiheessa muuttuja edustaa siihen liittyvän relaation jotain monikkoa (riviä). Ilmaus t.A tarkoittaa A-attribuutin arvoa muuttujan t edustamalla rivillä. Ehdot ovat jompaakumpaa seuraavista muodoista: R(t), mikä tarkoittaa, että t:n arvoalue (range) on relaation R rivit. x <vertailuop> y, missä x ja y ovat muotoa t.A tai vakio. Hyvin muodostetut kaavat (HMK) koostuvat ehdoista, loogisista operaatioista (AND, OR, NOT) ja kvanttoreista (, ). 2-Relaatiokielistä Teuhola 2012

Hyvin muodostettu kaava (HMK) Säännöt: Jokainen ehto on HMK. Jos F on HMK niin samoin ovat (F) ja NOT(F). Jos F ja G ovat HMK, niin samoin ovat (F AND G) ja (F OR G). Jos F on HMK ja t sen vapaa muuttuja, niin (t)(F) ja (t)(F) ovat HMK. Mikään muu ei ole HMK. 2-Relaatiokielistä Teuhola 2012

Hyvin muodostettujen kaavojen tulkinta R(t) on tosi, jos t viittaa johonkin relaation R riviin. NOT(F), (F AND G) ja (F OR G) noudattavat normaaleja logiikan tulkintasääntöjä (t)(F) on tosi, jos muuttujalle t löytyy vähintään yksi mahdollinen arvo (= jonkin relaation rivi), jolle ehto F on tosi. (t)(F) on tosi, jos ehto F on tosi kaikilla mahdollisilla muuttujan t arvoilla. 2-Relaatiokielistä Teuhola 2012

Monikkokalkyylin kyselyt Kyselyn yksinkertainen perusmuoto: { t | HMK(t) } missä HMK(t) sisältää vapaan monikkomuuttujan t. Tulkinta: Vastauksen muodostaa niiden t:n arvojen (= relaatiorivien) joukko, joille HMK(t) on tosi. Yleisempi muoto: { t.A, u.B, v.C, … | HMK(t, u, v, …) } Tulkinta: Vasen puoli = kyselyn tulostaulu, joka muodos-tuu ehdon toteuttavien rivikombinaatioiden <t, u, v, …> attribuuteista A, B, C, … 2-Relaatiokielistä Teuhola 2012

Esimerkki kyselystä monikkokalkyylillä Asiakas Tuote Tilaus M Relaatiot: Tuote (Tno, Tnimi, Valmistaja, Hinta) Asiakas (Ano, Animi, Paikka) Tilaus (Ano, Tno, Kpl, Pvm) Alle 1000 € maksavien, Vipu Oy:n valmistamien tuotteiden nimet: { t.Tnimi | Tuote(t) AND t.Hinta < 1000 AND t.Valmistaja = ‘Vipu Oy’ } 2-Relaatiokielistä Teuhola 2012

Sama kysely SQL-kielellä SELECT Tnimi FROM Tuote WHERE Hinta < 1000 AND Valmistaja = ‘Vipu Oy’ Ero monikkokalkyyliin on lähinnä syntaktinen. Huom. Myös SQL:ssä olisi voitu määritellä ‘muuttuja’ t: SELECT t.Tnimi FROM Tuote AS t WHERE t.Hinta < 1000 AND t.Valmistaja = ‘Vipu Oy’ 2-Relaatiokielistä Teuhola 2012

Olemassolokvanttorin  käyttöesimerkki: kolmen taulun liitos Etsi Vipu Oy:n valmistamien tuotteiden tilaajat: { a.Animi | Asiakas(a) AND (t)(Tuote(t) AND t.Valmistaja=‘Vipu Oy’ AND (x)(Tilaus(x) AND t.Tno=x.Tno AND x.Ano=a.Ano ) ) } 2-Relaatiokielistä Teuhola 2012

2-Relaatiokielistä Teuhola 2012 Sama SQL-kielellä … SELECT a.Animi FROM Asiakas AS a, Tuote AS t, Tilaus AS x WHERE t.Valmistaja = ‘Vipu Oy’ AND a.Ano = x.Ano AND t.Tno = x.Tno Huom. Tässä voidaan ajatella t:lle ja x:lle implisiittinen -kvanttori. 2-Relaatiokielistä Teuhola 2012

Universaalikvanttorin  käyttöesimerkki Etsi asiakkaat, jotka ovat tilanneet kaikkia tuotteita. { a.Animi | Asiakas(a) AND (t)(NOT (Tuote(t)) OR ( (x)(Tilaus(x) AND a.Ano=x.Ano AND t.Tno=x.Tno ) ) ) } Huomaa t:n rajoittaminen NOT … OR –ilmauksella Tuote-joukkoon (muuten t liitetään minkä tahansa relaation riveihin). 2-Relaatiokielistä Teuhola 2012

Sama SQL-kielellä … ilman -kvanttoria! SELECT a.Animi FROM Asiakas AS a WHERE NOT EXISTS (SELECT * FROM Tuote AS t WHERE NOT EXISTS (SELECT * FROM Tilaus AS x WHERE x.Ano = a.Ano AND x.Tno = t.Tno)) Kyseessä niin sanottu kaksoisnegaatiotekniikka 2-Relaatiokielistä Teuhola 2012

Sama SQL-kielellä … ilman -kvanttoria! (jatkoa) Edellä esitetyn SQL-kyselyn vaiheet: Viimeinen alikysely etsii kaikki attribuutit sellaisilta tilausriveiltä x, joilla uloimmassa kyselyssä paraikaa tarkasteltavana olevan asiakkaan a asiakasnumero a.Ano esiintyy keskimmäisessä kyselyssä sillä hetkellä kiinnitetyn tuotteen t tilaajana. Keskimmäinen kysely valitsee tarkalleen sellaiset tuotteet t, joita kohti ei löydy paraikaa tarkasteltavan asiakkaan a.Ano tekemää tilausta taulusta Tilaus.  mikäli löytyy yksikin sellainen tuote t, jota asiakas a ei tilaa, se tulee nyt valituksi keskimmäisen alikyselyn tulostauluun. Uloimman kyselyn tulostauluun valitaan puolestaan ne asiakkaat a, joita kohti keskimmäisen kyselyn tulos jäi tyhjäksi.  toisin sanoen, listataan yksistään ne asiakkaat a, joita kohti ei löytynyt yhtään tuotetta, joita a ei tilaa …  … eli siis juuri ne asiakkaat, jotka tilaavat kaikkia tuotteita! 2-Relaatiokielistä Teuhola 2012

Sama SQL-kielellä … toisin SELECT a.Animi FROM Asiakas AS a WHERE NOT EXISTS ( (SELECT Tno FROM Tuote) EXCEPT (SELECT Tno FROM Tilaus x WHERE x.Ano = a.Ano)) EXCEPT laskee SELECT-tulosten erotusjoukon, jonka tyhjyyttä NOT EXISTS testaa. Ratkaisu on lähempänä relaatioalgebraa! 2-Relaatiokielistä Teuhola 2012

Kvanttorilausekkeiden päättelysääntöjä (x) (P(x)) = NOT (x) (NOT P(x)) -- vrt. ed. esim. (x) (P(x)) = NOT (x) (NOT P(x)) (x) (P(x) AND Q(x)) = NOT (x) (NOT P(x) OR NOT Q(x)) (x) (P(x) OR Q(x)) = NOT (x) (NOT P(x) AND NOT Q(x)) (x) (P(x) AND Q(x)) = NOT (x) (NOT P(x) OR NOT Q(x)) (x) (P(x) OR Q(x)) = NOT (x) (NOT P(x) AND NOT Q(x)) (x) (P(x))  (x) (P(x)) NOT (x) (P(x))  NOT (x) (P(x)) 2-Relaatiokielistä Teuhola 2012

2-Relaatiokielistä Teuhola 2012 Relaatioalgebra Algebra on annettuun perusjoukkoon liittyvä joukko operaatioita, jotka kohdistuvat perusjoukon alkioihin ja tuottavat tuloksena niinikään perusjoukon alkion. Relaatioalgebran perusjoukon alkiot ovat relaatioita ja operaatiot niihin kohdistuvia kyselyitä, joiden tulos on relaatio. 2-Relaatiokielistä Teuhola 2012

Relaatioalgebra: operaatiotyypit Unaariset: Valinta Projektio Binääriset: Joukko-op. Liitos Jako 2-Relaatiokielistä Teuhola 2012

Relaatioalgebra vs. SQL SQL-kysely (SELECT … FROM … WHERE …) sisältää elementtejä relaatioalgebrasta, mutta ei ole suoranaisesti sen syntaktinen variaatio. SELECT-lista vastaa projektiota ja WHERE-osa valintaa, tosin mukana voi olla myös liitosehtoja. SQL:ssä on mahdollista kirjoittaa eksplisiittinen liitos FROM-osassa, mikä on lähellä algebraa. 2-Relaatiokielistä Teuhola 2012

Relaatioalgebra: Valinta (select) Syntaksi: <valintaehto> (<relaation nimi>) Ehdon toteuttavien rivien valinta relaatiosta. Ehto on looginen lauseke, joka kohdistuu relaation sarakkeisiin. Lauseke voi koostua vertailuista (=, <, , >, , ) ja Boolen operaatioista AND, OR, NOT Esim. ”Etsi miestyöntekijät, joiden palkka on < 40000”:  Sex=’M’ AND Salary<40000 (Employee) Huom. Kohteena oppikirjan Company-tietokanta 2-Relaatiokielistä Teuhola 2012

Valintaoperaation ominaisuuksia Sisäkkäiset valinnat ovat kommutatiivisia: <Ehto1> (<Ehto2> (R)) = <Ehto2> (<Ehto1> (R)) Sisäkkäiset valinnat voidaan aina yhdistää yhdeksi valinnaksi yhdistämällä ehdot AND-operaattorilla: <Ehto1> (<Ehto2> (R)) = <Ehto1> AND <Ehto2> (R) 2-Relaatiokielistä Teuhola 2012

Relaatioalgebra: Projektio (project) Syntaksi: <Attribuuttilista>(Relaatio) Valitsee listan mukaiset sarakkeet tulos-relaatioon. Jos tulosrivien joukossa on duplikaatteja (identtisiä), ylimääräiset esiintymät poistetaan (teoriassa, ei aina käytännössä). Esim. Kaikkien työntekijöiden täydelliset nimet: Fname, Minit, Lname (Employee) 2-Relaatiokielistä Teuhola 2012

Projektio-operaation ominaisuuksia Yleisessä tapauksessa voi syntyä duplikaatteja eli toistuvia tulosrivejä, jotka pitää poistaa. Duplikaatteja ei synny, jos relaation pääavain on tulossarakkeiden joukossa. Sisäkkäiset projektiot voidaan yhdistää: <Lista-1>(<Lista-2> (R)) = <Lista-1> (R) Ehtona on, että Lista-1  Lista-2, muuten vasen puoli on virheellinen. 2-Relaatiokielistä Teuhola 2012

Lausekkeiden laskenta vaiheittain Monimutkaisen relaatioalgebran lausekkeen laskenta voidaan tehdä paloittain, tallettamalla välitulokset apurelaatioihin ja käyttämällä niitä jatkolaskennassa. Tarvitaan asetuslause: <Apurelaatio>  <Rel.algebran lauseke> Tulosrelaation attribuutit voidaan nimetä (muuten nimet periytyvät lausekkeesta). 2-Relaatiokielistä Teuhola 2012

Esimerkki vaiheittaisesta laskennasta “Etsi osaston 5 naispuolisten työntekijöiden sukunimet ja osoitteet”: NAISET  Sex=’F’ (Employee) OS5_NAISET  Dno=5 (NAISET) TULOS(Snimi, Os)  Lname,Address (OS5_NAISET) 2-Relaatiokielistä Teuhola 2012

Eksplisiittinen uudelleennimeäminen Joskus on tarpeen nimetä relaatioita ja niiden attribuutteja uudelleen laskennan aikana esim. nimien yksikäsitteisyyden saavuttamiseksi. Syntaksi:  UusiRel(A1, A2, …) (VanhaRel) Voidaan uudelleennimetä relaatio, attribuutit tai molemmat. [  = ‘rho’ = ‘rename’] 2-Relaatiokielistä Teuhola 2012

Relaatioalgebra: Joukko-operaatiot Relaatiot ovat rivien joukkoja, joten joukko-operaatiot soveltuvat niille luonnostaan: Unioni (), leikkaus (), erotus () ja karteesinen tulo (×) Unionia, leikkausta ja erotusta koskeva ehto: Operandien tulee olla unioni-yhteensopivia (union compatible): Sama määrä attribuutteja Vastinattribuuteilla sama perusjoukko (domain) 2-Relaatiokielistä Teuhola 2012

Joukko-operaatioita: kaavamainen esimerkki R  S R  S A B C 10 r x 20 s y 30 t z A B C 10 r x 20 s y 30 t z 40 u w A B C 20 s y R - S A B C 10 r x 30 t z S A B C 20 s y 40 u w 2-Relaatiokielistä Teuhola 2012

Esimerkkejä joukko-operaatioista “Etsi osaston 5 naispuoliset työntekijät” Sex=’F’ (Employee)  Dno=5 (Employee) ”Työntekijät, jotka ovat osastolla 5 tai joiden palkka < 40000 (tai molemmat)”: Dno=5 (Employee)  Salary<40000 (Employee) Huom! Leikkaus vastaa AND-ehtoa, unioni OR- ehtoa. 2-Relaatiokielistä Teuhola 2012

Joukko-operaatioiden ominaisuuksia Unioni ja leikkaus ovat vaihdannaisia (kommutatiivisia) ja liitännäisiä (assosiatiivisia): R  S = S  R R  S = S  R (R  S)  T = R  (S  T) (R  S)  T = R  (S  T) Leikkaus voidaan toteuttaa erotuksen avulla: R  S = R  (R  S) = S  (S  R) 2-Relaatiokielistä Teuhola 2012

Karteesinen tulo (Cartesian product) eli ristitulo (cross product) Tulo (merk. R  S) sisältää operandirelaatioiden (R, S) monikoiden kaikki mahdolliset keskinäiset yhdelmät. Jos R sisältää m monikkoa ja S n monikkoa, niin R  S sisältää m·n monikkoa (siis paljon). Voidaan soveltaa mille tahansa relaatioparille (ei yhteensopivuusvaatimusta). Ei yleensä mielekäs sellaisenaan, vaan valintaoperaa-tioon yhdistettynä, ks. liitos. 2-Relaatiokielistä Teuhola 2012

Karteesinen tulo: kaavamainen esimerkki R × S A B C 10 r x 20 s y 30 t z A B C D E 10 r x i p 20 s y 30 t z j q S D E i p j q 2-Relaatiokielistä Teuhola 2012

Relaatioalgebra: Liitos (join) Kahden relaation (R, S) yhdistäminen yhdeksi tulosrelaatioksi jonkin ehdon perusteella, merk. R ⋈<ehto>S Loogisesti kyseessä on karteesinen tulo & valinta, joka sisältää molempien relaatioiden attribuutteja koskevan ehdon. Yleinen ns. theta-liitos: valintalauseke koostuu muotoa Ai  Bj, olevista ehdoista missä   {=, <, , >, , }, ja attribuutit Ai  R ja Bj  S. 2-Relaatiokielistä Teuhola 2012

Theta-liitos: esimerkki R ⋈ A<DS A B C 10 r x 20 s y 30 t z A B C D E 10 r x 20 p 40 q s y 30 t z S D E 20 p 40 q 2-Relaatiokielistä Teuhola 2012

Luonnollinen liitos (natural join) Theta-liitoksessa vertailu on yleensä ‘=‘, jolloin kyseessä ns. EQUIJOIN. Yhtäsuuruudesta johtuen tuloksessa on kaksi identtistä saraketta. Jos toinen projisoidaan pois, tuloksena on luonnollinen liitos, merk R  S, joka on selvästi yleisin liitostyyppi. Luonnollinen liitos perustuu yleensä viiteavaimiin (foreign key), jolloin tuloksessa yhdistyvät kukin viittaava ja viitattu monikko. 2-Relaatiokielistä Teuhola 2012

Luonnollinen liitos: Esimerkki A B C 10 r x 20 s y 30 t z S C D x i z j w k R  S A B C D 10 r x i 30 t z j 2-Relaatiokielistä Teuhola 2012

Liitoksen formulointeja SQL:ssä Relaatiot: R(A, B, C), S(C, D) Kysely: A,B (R  D=2(S)) (1) SQL-lauseke, jossa implisiittinen liitos: SELECT A, B FROM R, S WHERE D=2 AND R.C=S.C (2) SQL-lauseke, jossa eksplisiittinen liitos: SELECT A, B FROM (R NATURAL JOIN S) WHERE D=2 2-Relaatiokielistä Teuhola 2012

Liitoksen formulointeja SQL:ssä (jatk.) (3) Alikyselyä käyttäen: SELECT A, B FROM R WHERE C IN (SELECT C FROM S WHERE D=2) Vaihtoehto (1) eli implisiittinen liitos on yleensä kyselyn optimoinnin kannalta suositeltavin. 2-Relaatiokielistä Teuhola 2012

Attribuuttinimet luonnollisessa liitoksessa R  S on yksiselitteinen vain, jos liitosattribuuteilla on relaatioissa R ja S samat nimet (ja muilla eri). Jos näin ei ole, pitää joko muuttaa toisen relaation attribuuttinimet (-operaatio) … <relaatio1>  (Attr1, Attr2, …) <relaatio2> … tai kertoa eksplisiittisesti vastinparit: <relaatio1> (rel1:n liitosattr),(rel2:n liitosattr) <relaatio2> 2-Relaatiokielistä Teuhola 2012

Nimien yhdenmukaistusesimerkki B C 10 r x 20 s y 30 t z S D E x i z j w k R  (C,D) S A B C E 10 r x i 30 t z j 2-Relaatiokielistä Teuhola 2012

Muita liitostyyppejä: Puoliliitos (semijoin) Yhdistelmä: liitos & projektio vain toisen operandirelaation attribuuteille. Joskus nopeampi kuin erilliset operaatiot. A,B,C (R  S) R S A B C 10 r x 20 s y 30 t z C D x i z j w k A B C 10 r x 30 t z 2-Relaatiokielistä Teuhola 2012

Puoliliitos: SQL-esimerkki Etsi niiden työntekijöiden nimet, joilla on omaisia. SELECT Fname, Lname FROM Employee, Dependent WHERE Ssn = Essn; Huom! Dependent-relaatiosta ei tule mukaan yhtään tulosattribuuttia. 2-Relaatiokielistä Teuhola 2012

Puolierotus (semidifference) Määrittely: R <puolierotus> S = R  (R <puoliliitos> S) Merkitys: Tulokseen mukaan ne R:n monikot, joilla ei ole vastinetta S:ssä. R S R <puolierotus> S A B 10 r 20 s 30 t A C 20 y 40 w A B 10 r 30 t 2-Relaatiokielistä Teuhola 2012

Puolierotus: SQL-esimerkki Etsi niiden työntekijöiden nimet, joilla ei ole omaisia. SELECT Fname, Lname FROM Employee WHERE Ssn NOT IN ( SELECT Essn FROM Dependent); Huom 1. Ehto Ssn <> Essn ei toimi. Huom 2. Dependent-relaatiosta ei tule tässäkään mukaan yhtään tulosattribuuttia. 2-Relaatiokielistä Teuhola 2012

Muita liitostyyppejä: Ulkoliitos (outer join) Tulokseen toisen/molempien relaatioiden vastineettomat rivit NULLien kera Versiot ja vastaavat symbolit: LEFT OUTER JOIN ( ) RIGHT OUTER JOIN ( ) FULL OUTER JOIN ( ) 2-Relaatiokielistä Teuhola 2012

Ulkoliitosesimerkkejä Liitettävät relaatiot: Tulokset: A B C 10 r x 20 s y 30 t z C D x i z j w k R S R S R S A B C D 10 r x i 20 s y null 30 t z j w k A B C D 10 r x i 20 s y null 30 t z j A B C D 10 r x i 30 t z j null w k 2-Relaatiokielistä Teuhola 2012

Ulkoliitoksen formulointi SQL:ssä Vaihtoehdot: LEFT/RIGHT/FULL JOIN SELECT A, B, C, D FROM (R LEFT JOIN S) R S R S A B C 10 r x 20 s y 30 t z C D x i z j w k A B C D 10 r x i 20 s y null 30 t z j 2-Relaatiokielistä Teuhola 2012

Vrt. myös: ulkounioni (outer union) Tässä riittää jos relaatiot ovat osittain yhteensopivia, esim. R(A, B) ja S(A, C). Unioni lasketaan normaalisti A:n suhteen, tulokseen B- ja C-sarakkeet (täydennys null-arvoilla). Tulos on identtinen täyden ulkoliitoksen kanssa, jossa yhteiset attribuutit ovat liitosattribuutteina. R S R <ulkounioni> S A B 10 r 20 s 30 t A C 20 y 40 w A B C 10 r null 20 s y 30 t 40 w 2-Relaatiokielistä Teuhola 2012

Relaatioiden ‘jakolasku’ (division, ÷) Idea: Etsittävä ne objektit (joita edustavat pääavainarvot), jotka ovat relaatiossa jonkin joukon kaikkien esiintymien kanssa. (Vrt. relaatiokalkyylin universaalikvanttori). Formaalisesti: T(Y) = R(Z) ÷ S(X), missä X, Y ja Z ovat attribuuttijoukkoja, X  Z ja X  Y = Z. Tällöin yT(Y) jos kaikilla x  S(X) on voimassa: (y, x)  R(Z). 2-Relaatiokielistä Teuhola 2012

2-Relaatiokielistä Teuhola 2012 Jakolaskuesimerkki R Y X 10 p q r 20 30 s S X p q r R ÷ S Y 10 30 2-Relaatiokielistä Teuhola 2012

2-Relaatiokielistä Teuhola 2012 Lisää jakolaskusta Tarvittaessa pitää projisoida turhat attribuutit pois; esimerkki Company-tietokannasta: “Etsi työntekijät, jotka työskentelevät kaikissa Houstonin projekteissa”: TULOS(ssn)  Essn, Pno(WORKS_ON) ÷ (Pno)(Pnumber(Location=‘Houston’(PROJECT))) Tässä henkilötunnukset (Essn) edustavat työntekijöitä. Huom! Projektiot ennen jakolaskua. 2-Relaatiokielistä Teuhola 2012

2-Relaatiokielistä Teuhola 2012 Jakolasku vs. SQL “Etsi työntekijät, jotka työskentelevät kaikissa Houstonin projekteissa (vrt. vastaava esimerkki rel.kalkyylillä)”: SELECT Fname, Minit, Lname FROM EMPLOYEE AS e WHERE NOT EXISTS ( (SELECT Pnumber FROM PROJECT WHERE Plocation = ‘Houston’) EXCEPT (SELECT Pno FROM WORKS_ON AS w WHERE e.Ssn = w.Essn)) 2-Relaatiokielistä Teuhola 2012

Relaatioalgebran minimaalinen operaatiojoukko Operaatiot {, , , , } muodostavat täydellisen ja minimaalisen joukon, joiden avulla muut operaatiot (liitos, leikkaus, jako) voidaan lausua. Esim. Jakolaskun R(Y, X) ÷ S(X) johtaminen: APU1  Y(R) APU2  Y((APU1  S)  R) TULOS  APU1  APU2 2-Relaatiokielistä Teuhola 2012

Relaatioalgebran lausekkeen puuesitys Isäsolmu = operaattori Lapsisolmu(t) = operandit Alilausekkeet vastaavat alipuita Lehdet edustavat tietokannan relaatioita Suoritusjärjestys = alhaalta ylös Sisarus-alipuiden keskinäinen laskentajärjestys voidaan valita 2-Relaatiokielistä Teuhola 2012

Esimerkki kyselypuusta Relaatiot: R(A, B, C), S(A, D), T(D, E, F) Kysely: A,F((B=2(R)  S)  E=3(T)) R S B=2 E=3  A,F T 2-Relaatiokielistä Teuhola 2012

Esimerkkipuu Company-kannan kyselystä “Etsi Houstonin osastojen naispuolisten työntekijöiden sukunimet ja osoitteet”: Lname, Address  Dno = Dnumber Dlocation=‘Houston’ Sex=‘F’ DEPT_LOCATIONS EMPLOYEE 2-Relaatiokielistä Teuhola 2012

Koostefunktiot (aggregate functions) ja ryhmittelyt Alkeelliset tilastolliset funktiot: COUNT, SUM, AVERAGE, MAXIMUM, MINIMUM Voidaan laskea koko relaatiolle tai tietyn attribuutin (attr.yhdelmän) määräämille ryhmille Merkintä: <Ryhmittelyattribuutit> F<Funktio-arg-parit>(<relaatio>) Tulosrelaatio sisältää ryhmittelyattribuuttien ja koostefunktioiden arvot Koostefunktiot eivät kuulu perusrelaatioalgebraan 2-Relaatiokielistä Teuhola 2012

Esimerkki koostefunktiosta (Y, LkmX,SumZ) ( Y F COUNT X, SUM Z(R)) R X Y Z 1 p 10 2 q 20 3 r 15 4 5 6 30 7 25 8 Y LkmX SumZ p 3 60 q 2 45 r 40 2-Relaatiokielistä Teuhola 2012

Relaatiokielten ongelma: rekursio Relaatiomallilla voidaan kuvata samantyyppisistä entiteeteistä koostuvia hierarkioita käyttämällä rekursiivisia eli itseensä viittaavia relaatioita. Jos kyseessä on puurakenne, niin relaatiossa on viiteavain, joka viittaa saman relaation pääavaimeen (viittaus ja kohde eri monikoissa). Relaatioalgebra ja SQL2 eivät mahdollista transitiivisen sulkeuman (entiteetin esi-isät tai jälkeläiset) laskemista, koska tarvitaan mielivaltaisen monta liitosta relaation itsensä kanssa. 2-Relaatiokielistä Teuhola 2012

Esimerkki rekursiivisesta relaatiosta Johtaminen Työntek Esimies Aalto Null Ranta Laine Järvi Salmi Niemi Virta Lahti Lampi Puurakenne: Aalto Ranta Laine Järvi Salmi Niemi Virta Lahti Lampi FK 2-Relaatiokielistä Teuhola 2012

Esimerkki rekursiivisesta relaatiosta (2) Suku Sukugraafi: Vanhempi Lapsi Väinö Pekka Vilma Eino Paula Elma Kalle Kaisa Väinö Vilma Eino Elma Paula Pekka Kalle Kaisa 2-Relaatiokielistä Teuhola 2012

Transitiivisen sulkeuman laskenta Pitää tehdä taso kerrallaan vaiheittain. Esim. Väinön jälkeläiset: SPOLVI  (Seur) (Lapsi (Vanhempi=‘Väinö’(Suku))) JÄLKELÄISET  SPOLVI while SPOLVI ≠ Null do SPOLVI  (Seur) (Lapsi (SPOLVI ⋈Seur=Vanhempi Suku)) JÄLKELÄISET  JÄLKELÄISET  SPOLVI endwhile Tarvittiin silmukkarakenne! Ei kuulu relaatioalgebraan! 2-Relaatiokielistä Teuhola 2012

Yhteenveto formaalisista relaatiokielistä Relaatiokalkyyli ja –algebra ovat keskeiset relaatio-tietokantamalliin liittyvät formaaliset kielet. Kalkyyli: deklaratiivinen; tulos määritellään, ei sen laskenta Algebra: operationaalinen (‘proseduraalinen’); suoritusjärjestys (osittain) määrätty. Relaatiokalkyyli ja -algebra ovat yhtä voimakkaita (nk. relationaalisesti täydellisiä kieliä). Relaatiokalkyyli muodostaa erilaisten käytännön kielten, kuten SQL:n, teoreettisen perustan. Relaatioalgebralla on keskeinen merkitys kyselyiden implementoinnissa ja optimoinnissa. 2-Relaatiokielistä Teuhola 2012