Relationsalgebra. Varför behöver jag lära mig relationsalgebra?!



Relevanta dokument
Grunderna för relationsmodellen!

Databaser - Design och programmering. Operationer i relationsalgebra. Att söka ut data. Exempel DBschema. Att plocka ut data, forts

EMPS(NAME, SALARY, DEPT)

DIVISIONSEXEMPEL RELATIONSALGEBRA OCH SQL. r s använder vi för att uttrycka frågor där ordet alla figurerar:

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

Structured Query Language (SQL)

Relationskalkyl (RK)

Grunderna i SQL del 1

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

Introduktion till frågespråket SQL (v0.91)

Andra relationella språk

Programdesign, databasdesign. Databaser - Design och programmering. Funktioner. Relationsmodellen. Relation = generaliserad funktion.

Relationsmodellen. Relations modellen är idag den mest änvända datamodellen för kommersiella

Karlstads Universitet, Datavetenskap 1

Databasdesign. E-R-modellen

(N) och mängden av heltal (Z); objekten i en mängd behöver dock inte vara tal. De objekt som ingår i en mängd kallas för mängdens element.

Övningshäfte 1: Logik och matematikens språk

Informationssystem och Databasteknik, 2I-1100 HT2001. Relationsalgebra. Relationsalgebran är sluten: R 1 op R 2 R 3.

Föreläsning 5: Relationsmodellen

Utsagor (Propositioner) sammansatta utsagor sanningstabeller logisk ekvivalens predikat (öppna utsagor) kvantifierare Section

Relationsalgebra. Relationsalgebra består av en mängd operatorer som tar en eller två relationer som input och producerar en ny relation som resultat.

Databasspråket SQL - online.

Frågespråk mot relationsmodellen

9. Between 10. Group by 11. Aggregatfunktionerna max, min, sum och avg 12. Nästlade sökningar

Tentamen i Databasteknik

Frågor att lösa med SQL mot databasen kursdb_sql Sida 1 av 5

Databaser. Vad du ska lära dig: Ordlista

Vad är en databas? Exempel på databaser: Databas = Organiserad samling och lagring av information.

Logik. Dr. Johan Hagelbäck.

Databaser - Design och programmering. Relationsmodellen. Relationer - som tabeller. Relationer som tabeller. Alternativa notationer: Relationsschema

Databasspråket SQL - online.

SQL del 2. Christer Stuxberg Institutionen för Informatik och Media

Klassdeklaration. Metoddeklaration. Parameteröverföring

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

TENTAMEN För kursen. Databasteknik. Ansvarig för tentamen: Anna Palmquist. Förfrågningar: Anslås inom 3 veckor

Datalager och datautvinning

Språket Python - Del 1 Grundkurs i programmering med Python

Frågeoptimering. Frågeoptimering kapitel 14

Dagens föreläsning. KTH & SU, CSC Databasteknik Föreläsning 10 sid 1

Vad du skall komma ihåg från tidigare föreläsningar. Dagens föreläsning. Evaluering av frågor. Data dictionary

729G74 IT och programmering, grundkurs. Tema 2. Föreläsning 3 Jody Foo,

Databasspråket SQL - online.

Grundläggande logik och modellteori

Reducering till relationsscheman

Lösningsförslag till Exempel tentamen

Tentamen EIT:DB Databastmetodik 11/ kl Lösningsförslag

Formell logik Kapitel 1 och 2. Robin Stenwall Lunds universitet

3, 6, 9, 12, 15, 18. 1, 2, 4, 8, 16, 32 Nu är stunden inne, då vill vill summera talen i en talföljd

Concepts learned this far. ER till relationer. ER till relationer. ER till relationer. TDDD12 Database Technology

Skriftlig tentamen i kurserna TDDD12 och TDDB48 Databasteknik kl

MATEMATIKENS SPRÅK. Avsnitt 1

Karlstads Universitet, Datavetenskap 1

MA2047 Algebra och diskret matematik

729G74 IT och programmering, grundkurs. Tema 3. Föreläsning 2 Jody Foo,

729G74 IT och programmering, grundkurs. Tema 2. Föreläsning 3 Jody Foo,

I kursen i endimensionell analys är mängden av reella tal (eng. real number), R, fundamental.

Idag. 1. Från modell till databasstruktur. 2. Prata med databaser (frågepsråket SQL)

Från verklighet via modell till databas. Idag. Testa reglerna på varuhusmodellen. Från verklighet via modell till databas

Parameteröverföring. Exempel. Exempel. Metodkropp

Mängder. 1 Mängder. Grunder i matematik och logik (2015) 1.1 Grundläggande begrepp. 1.2 Beskrivningar av mängder. Marco Kuhlmann

07/11/14. Databasteknik och informationssystem DD1370 F2. Allmänna frågor. Är Lab0 svårbegriplig? Nu: Clickers. Är Kurswebben svårbegriplig?

Filosofisk logik Kapitel 15. Robin Stenwall Lunds universitet

Databaser och. SQL, utsökningar mot en tabell

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Tentamen för DD1370 Databasteknik och informationssystem

TENTAMEN. För kursen. Databasteknik. Ansvarig för tentamen: Cecilia Sönströd. Förfrågningar: Anslås inom 3 veckor

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

Grunderna i SQL del 1

Laboration SQL. Kom igång.

MODELLER OCH SPRÅK FÖR RELATIONSDATABASER: Relationsalgebra, Relationskalkyl (Tuple calculus) & SQL

TENTAMEN. För kursen. Databasteknik. Ansvarig för tentamen: Cecilia Sönströd. Förfrågningar: Anslås inom 3 veckor

SQL, nästlade delfrågor Nästlade delfrågor. En nästlda delfråga är ett select-from-where uttryck inom where-klausulen i en annan fråga.

Block 2 Algebra och Diskret Matematik A. Följder, strängar och tal. Referenser. Inledning. 1. Följder

Lösningar till tentamen i EDAF75

Kombinatorik Förenkla C(n+1,2)-C(n,2) och C(n+1,3)-C(n,3)

TENTAMEN. För kursen. Databasteknik. Ansvarig för tentamen: Cecilia Sönströd. Förfrågningar: Anslås inom 3 veckor

Föreläsning 5 Innehåll

Prova på-laboration i SQL

Karlstads Universitet, Datavetenskap 1

SQL. Structured Query Language. Frågespråk för att används för. Kommandon. data åtkomst data manipulation

Lösningsförslag till Tentamen,

Databasspråket SQL - online.

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Filosofisk Logik (FTEA21:4) föreläsningsanteckningar/kompendium. v. 2.0, den 29/ III. Metalogik 17-19

Grundläggande logik och modellteori

TENTAMEN. För kursen. Databasteknik. Ansvarig för tentamen: Cecilia Sönströd. Förfrågningar: Anslås inom 3 veckor

Databasspråket SQL - online.

Tentamen i Databasteknik

Linnéuniversitetet Institutionen för datavetenskap, fysik och matematik Per-Anders Svensson

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Logik och kontrollstrukturer

Sample exam questions. Database exam TIG058

Databaser design och programmering. Design processen ER- modellering

Fuzzy Logic. När oskarpa definitioner blir kristallklara. Åsa Svensson. Linköpings Universitet. Linköping

729G11 Artificiell Intelligens Marcus Johansson Marjo581. Fuzzy logic. Marcus Johansson Marjo581

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Hur implementera algoritmerna på maskinnivå - datorns byggstenar

Övningar i SQL. SQLAccess.doc Ove Lundgren

Transkript:

Relationsalgebra 1 Varför behöver jag lära mig relationsalgebra?! Relationsmodellen är den datamodell som används i de flesta moderna databassystemen Data beskrivs och lagras som relationer, dvs. som ett antal tabeller. För att accessera data gör man operationer på tabellerna. Operationerna uttrycks med användning av relationsalgebra. T.ex. för att göra sökningar av olika slag i en databas, eller för att sätta in ny information i en databas. Frågespråket SQL grundar sig på relationsalgebra. Kan man relationsalgebra så är det lätt att lära sig SQL. 2

Frågespråk! Frågespråk används för att hämta information från en databas. Användaren formulerar frågor mot databasen med användande av ett formellt språk. Språkkategorier: Procedurella språk.! Programmet beskriver exakt den behandling som skall utföras för att få fram det önskade resultatet. Icke-procedurella språk, också kallade deklarativa språk! Programmet beskriver vad man vill få som resultat, utan att exakt behöva beskriva hur det skall beräknas. Det finns flera olika rena frågespråk, eller teoretiska frågespråk: Relationsalgebra Tupelrelationskalkyl Domänrelationskalkyl De rena språken utgör grunden till de frågespråk som används i praktiken, t.ex. i SQL. 3 Relationsalgebra! Relationsalgebran har sex grundläggande operationer: select: σ (sigma) project: (pi) union: (mängdunion) mängddifferens: Kartesisk produkt: x rename: ρ! (rho) (minustecken) (krysstecken) Operatorerna tar en eller två relationer som input och producerar en ny relation som resultat. Dvs. de tar som input en eller två tabeller och producerar som resultat en ny tabell. Operatorerna select, project och rename är unära operatorer De tar en enda relation som argument. Operatorerna union, differens och kartesisk produkt är binära operatorer De tar två relationer som argument. 4

Select-operationen σ! Select-operationen väljer ut de tupler som uppfyller ett visst villkor i en tabell Resultatet returneras som en ny tabell Exempel: finn alla föreläsare som har en lön över 85 000 σ salary > 85000 (instructor) instructor! resultat av select-satsen 5 Select-operationen Exempel! Antag att vi har en relation r med fyra attribut A, B, C och D Välj de tupler i r där A=B och D>5! σ A=B D > 5 (r) Resultatet blir en tabell med de rader ur tabellen r där attributet A har samma värde som B, och attributet D är större än 5. r! A! B! C! D! 5! 1 23! 7! 7! 3! A! B! C! D! 7! 23! 6 3!

Definition av select-operationen! Notation: σ p (r) där p kallas selektionspredikatet! Väljer ut ur relationen r de tupler som uppfyller predikatet p Definieras som: σ p (r) = { t t r and p(t) }! Dvs. mängden av de tupler t sådana att t hör till relationen r och predikatet p gäller för t! Ger de rader i tabellen r sådana att selektionspredikatet p gäller för dem p är en formel i propositionskalkylen som består av termer förenade med (and), (or), (not) Varje term är en jämförelse mellan två attribut, som t.ex. salary < budget eller ett attribut och en konstant, som t.ex. salary > 85000 där jämförelseoperatorn kan vara en av: =,, >,, <, 7 Exempel på select! Finn alla föreläsare som hör till fysik-institutionen σ dept_name = Physics (instructor) väljer ur tabellen instructor de tupler för vilka attributet dept_name har värdet Physics instructor! resultat av select-satsen 8 4!

Projekt-operationen! Project-operationen ger som resultat en tabell som bara innehåller de specificerade attributen, och lämnar bort alla andra attribut Antag att vi vill lista ID, namn och lön för alla föreläsare, men inte vill ha med namnet på institutionen: ID, name, salary (instructor) instructor! resultat av project-satsen 9 Projekt-operation Exempel! Resultatet av en project-operation är en mängd av tupler Mängder innehåller inga duplikat, så identiska tupler elimineras ur resultatet Antag att vi har en tabell r med tre kolumner A, B och C och skapar en ny tabell som bara innehåller kolumnerna A och C A,C (r)! Identiska tupler tas bort ur resultatet, som bara kommer att ha 3 rader r! resultat av project-satsen A! B! C! A! C! A! C! 20! = 30! 40! 10 5!

Projekt-operation! Notation: A,, ( ) 1 A r 2, A k där A 1, A 2,..., A k är namn på attribut i r och r är ett namn på en relation. Endast de listade attributen i relationen r tas med i resultatet Alla övriga attribut lämnas bort Resultatet är den relation med k kolumner som man får genom att bara ta med kolumnerna A 1, A 2,, A k från tabellen r Duplikatrader tas bort från resultatet, eftersom relationer är mängder och inte kan innehålla duplikat. 11 Sammansatta frågor! Resultatet av en operation i relationsalgebran är en tabell Man kan göra vidare operationer på dessa tabeller Kan kombinera flera operationer till godtyckligt komplexa uttryck Exempel: Finn namnet på alla föreläsare i fysik-institutionen name (σ dept_name = Physics (instructor) )! Resultatet av operationen σ dept_name = Physics (instructor) är en tabell med alla föreläsare som hör till institutionen med namn Physics. resultat På den tabellen utför vi en project-operation och lämnar bara kvar attributet name 12 6!

Union-operationen! Union-operationen kombinerar tuplerna från två tabeller. Inga duplikat-tupler tas med i resultatet. Exempel: Vilka kurser förläses under höstterminen 2009 eller under vårterminen 2010, eller båda De kurser som föreläses under höstterminen 2009 får vi med course_id (σ semester= Fall year = 2009 (section)) De kurser som föreläses under vårterminen 2010 får vi med course_id (σ semester= Spring year = 2010 (section)) Svaret på vår fråga är unionen av båda dessa delresultat course_id (σ semester= Fall year = 2009 (section)) course_id (σ semester= Spring year = 2010 (section)) 13 Illustration av! course_id (σ semester= Fall year = 2009 (section)) course_id (σ semester= Spring year = 2010 (section)) section resultat 14 7!

Union-operation Exempel! Antag att vi har två relationer r och s:! A! B! A! B! Vi kombinerar de två relationerna till en ny relation genom att göra en union av dem r s: Resultatet är en tabell som innehåller alla tupler från r och alla tupler från s r! 3! s! Inga duplikat-tupler tas med resultat av r s A! B! 3! 15 Definition av union-operationen! Notation: r s! Union-operationen definieras som: r s = {t t r or t s} D.v.s. mängden av de tupler t sådana att t hör till r eller t hör till s Union-operationen kombinerar tuplerna i de två relationerna till en enda relation, utan att skapa några dubbletter Motsvarar en normal mängdunion För att unionen av två relationer r och s skall vara giltig krävs att 1. r och s måste ha samma aritet (dvs. samma antal attribut) 2. Attributens domäner måste vara kompatibla (dvs. kolumnerna i r skall innehålla samma typ av värden som kolumnerna i s) 16 8!

Mängddifferens-operationen! Mängddifferens-operationen r s ger som resultat en tabell med de tupler som finns i relationen r men som inte finns i relationen s Exempel: Vilka kurser förläses under höstterminen 2009 men inte under vårterminen 2010 course_id (σ semester= Fall year = 2009 (section)) course_id (σ semester= Spring year = 2010 (section)) section resultat 17 Mängddifferens - Exempel! Antag att vi har två relationer r och s: A! B! A! B! 3! s! r! Differensen r s mellan relationerna r och s blir då! r-s! A! B! 18 9!

Definition av mängddifferens! Notation r s! Definieras som: r s = {t t r and t s}! D.v.s. mängden av tupler t sådana att t hör till r och t hör inte till s Ger som resultat en ny relation som innehåller de tupler som finns i r men inte i s Mängddifferens måste tas mellan kompatibla relationer. r och s måste ha samma aritet Attributdomänerna för r och s måste vara kompatibla 19 Kartesisk produkt x! Används för att kombinera information i två eller flera tabeller Den kartesiska produkten r x s av två tabeller r och s bildar alla kombinationer av tuplerna i r med tuplerna i s Exempel: finn namnen på alla föreläsare i Fysik-institutionen och kurs-id för de kurser som dessa föreläser. Information om föreläsare finns i relationen instructor! Information om kurser och vem som föreläser dem finns i relationen teaches! instructor! teaches! 20

Kartesisk produkt (forts.)! Vi bildar den kartesiska produkten av tabellerna instructor och teaches! Kombinerar varje rad i instructor med varje rad i teaches Figuren visar bara en del av instructor x teaches eftersom tabellen blir mycket stor. Resultatet kommer att ha 12*15 = 180 rader. Attributnamnen ID i instructor och teaches görs entydiga genom att appendera relationens namn. Kallas instructor.id och teaches.id i den kartesiska produkten. 21 Kartesisk produkt (forts.)! För att bara ta med lärare i Fysik-institutionen gör vi en select-operation på resultatet av den kartesiska produkten. Vi väljer ut bara de tupler där dept_name är Physics σ dept_name= Physics (instructor x teaches) 22 1

Kartesisk produkt (forts.)! Vi vill bara ha information om de kurser som en föreläsare vid Fysikinstitutionen håller. D.v.s vi skall ännu välja ut de tupler som har samma värde på attributen instructor.id och teaches.id Det här betyder att kursen har hållits av just en av föreläsarna vid Fysik-institutionen, och inte av någon annan σ instructor.id=teaches.id (σ dept_name= Physics (instructor x teaches)) Eftersom vi bara vill ha föreläsarens namn och kurs-id så gör vi en projektion på de här attributen och lämnar bort alla andra name, course_id (σ instructor.id=teaches.id (σ dept_name= Physics (instructor x teaches))) Resultatet blir en tabell med en rad: resultat 23 Kartesisk produkt - Exempel! Den kartesiska produkten kombinerar information i två eller flera tabeller A! B! C! D! E! Relationerna r, s: r x s innehåller alla kombinationer av tuplerna i r med tuplerna i s r! A! B! C! D! β! γ! γ! γ! s! 20! 20! 20! E! a! a! b! b! a! a! b! b! a! a! b! b! 24 1

Definition av kartesisk produkt! Notation r x s Definierad som: r x s = {t q t r and q s} Mängden där man kombinerar en tupel t med en tupel q sådana att t hör till r och q hör till s Kombinerar informationen i två relationer till en enda relation. Bildar alla parvisa kombinationer av tuplerna i r med tuplerna i s Om r har n tupler och s har k tupler så kommer den kartesiska produkten att ha n*k tupler. Vi antar här att attributen för relationerna r och s är disjunkta. Dvs. att R S = Relationsscheman för r och s har inga gemensamma attribut Om attributen för r och s inte är disjunkta måste man ge dem nya namn så att alla attribut får olika namn. Om både r och s har ett attribut med namnet a kan vi skilja på dessa genom att referera till dem som r.a och s.a 25 Rename-operationen ρ! Ger namn åt tabeller som vi får som resultat av uttryck i relationsalgebran. Relationer som vi får som ett resultat när vi utför ett uttryck i relationsalgebran har inget namn. Kan också använda rename-operationen för att referera till en relation med flera än ett namn. Operationen ρ x (E) returnerar uttrycket E med namnet X ρ är den grekiska bokstaven rho ger ett nytt namn åt hela relationen E, dvs. åt en hel tabell Man kan också ge nya namn åt de individuella attributen i en relation. Om ett uttryck E i relationsalgebran har ariteten n, dvs. antalet attribut i E är n, så returnerar operationen ρ x(a1, A2,, An) (E) resultatet av uttrycket E under namnet X och med attributen i E omdöpta till A 1, A 2,., A n 26 13!

Exempel på rename! Ge relationen tabell4 ett nytt namn lager och de tre attributen A, B och C de nya namnen nr, färg och storlek ρ lager(nr, färg, storlek) (tabell4) Exempel: finn den högsta lönen i vår universitetsdatabas Görs i två steg: A! B! Skapa en temporär tabell av löner som inte är de största Ta mängddifferensen av alla löner och den temporära tabellen.! Vi får en tabell över alla löner med salary (instructor) Resultatet av mängddifferensen mellan de här två tabellerna blir den största lönen. 4! 5! tabell4! blå! röd! gul! vit! C! L! XL! S! M! nr! 4! 5! lager! färg! storlek! blå! röd! gul! vit! L! XL! S! M! 27 Exempel på rename (forts.)! För att få en tabell med de löner som inte är de största jämför vi alla löner parvis med varandra Vi bildar den kartesiska produkten instructor x instructor och väljer ut de tupler som är parade ihop med ett större värde på salary. Vi måste ge ett nytt namn d åt den ena instructor-tabellen så att vi kan referera till två olika attribut salary. instructor.salary (σ instructor.salary < d.salary (instructor x ρ d (instructor))) Sedan tar vi skillnaden mellan alla löner och den temporära tabellen med de löner som inte är de största salary (instructor) instructor.salary (σ instructor.salary < d.salary (instructor x ρ d (instructor)))! resultat 28 14!

Sammansatta operationer! Man kan bygga uttryck genom att kombinera flera operationer. Resultatet av ett uttryck i relationsalgebran är en relation. En operation i relationsalgebran kan operera på resultatet av ett annat uttryck. Man kan kombinera operationer till godtyckligt komplexa uttryck förutsatt att relationerna som de opererar på är kompatibla. Exempel: σ A=C (r x s) Kombinera tabellerna r och s till en ny tabell som innehåller de rader där A-kolumnen har samma värde som C-kolumnen A! B! r! C! D! γ! s! 20! E! a! a! b! b! 29 Exempel: σ A=C (r x s) Gör först korsprodukten av r och s! Illustration! Ur korsprodukten tar vi de tupler som har samma värde på attributen A och C σ A=C (r x s) A! B! C! D! E! A! B! r x s! C! D! β! γ γ! 20! 20! E! a! a! b! b! a! a! b! b! 20! a! a! b! 30 15!

Formell definition av uttryck i relationsalgebra! Ett grundläggande uttryck i relationsalgebran består antingen av: En relation i databasen t.ex. relationen instructor En konstant relation t.ex. {22222, Einstein, Physics, 95500} Om E 1 och E 2 är uttryck i relationsalgebran så är följande också uttryck i relationsalgebran: E 1 E 2 E 1 E 2 E 1 x E 2 σ p (E 1 ), där P är ett predikat på attribut i E 1 s (E 1 ), där S är en lista som består av ett antal attribut i E 1 ρ x (E 1 ), där x är det nya namnet för resultatet av E 1! Man får alltså kombinera de här operatorerna till godtyckliga uttryck. 31 Ytterligare operationer i relationsalgebra! Vi definierar ytterligare ett antal operationer i relationsalgebran Snitt av mängder Naturlig join (samt andra typer av join) Tilldelning Division De här operationerna tillför inte någon modelleringskraft till relationsalgebran, men de kan förenkla en del förfrågningar. De här nya operationerna kan uttryckas med hjälp av de sex grundläggande operationer som vi hittills har gått igenom. 32 16!

Snitt-operation! Notation: r s Definieras som:!!r s = { t t r and t s } Dvs. mängden av de tupler t som hör till både r och s Vi antar att: r och s har samma aritet Attributen i r och s är kompatibla Obs: Vi kan också uttrycka snittet som två mängddifferenser r s = r (r s) r s r s! 33 Snitt-operation Exempel! Relationer r, s: r s! A B α α β r A B 1 2 1 A B α β s 2 3 α 2 34 17!

Naturlig Join-operation! Den naturliga join operationen gör det enklare att bilda uttryck som kräver en kartesisk produkt och en selektion. Naturlig join r s bildar först den kartesiska produkten av r och s och gör sedan en selektion på de attribut som är gemensamma i både r och s och som har samma värden, samt eliminerar dubbletter. Om r är en relation på schemat R och s är en relation på schemat S så är r s en relation på R S Dvs. schemat vi får när vi kombinerar attributen i R och S Om tabellerna r och s inte har några gemensamma attribut så är r s det samma som den kartesiska produkten r x s Exempel: Lista alla lärare och de kurser som dessa föreläser: instructor teaches! Tabellerna instructor och teaches har attributet ID gemensamt Bara de tupler där instructor.id = teaches.id tas med i resultatet! Om vi inte använder naturlig join kan vi skriva det här som σ instructor.id=teaches.id (instructor x teaches)! 35 Illustration av naturlig join! Tabellerna instructor och teaches har det gemensamma attributet ID Resultatet av instructor teaches blir Om vi bara vill ha namn på föreläsaren och kursens id gör vi name, course_id!(instructor teaches) 36 18!

Definition av naturlig Join! Notation: r s Låt r och s vara relationer på scheman R respektive S. Då är r s en relation på schemat R S som fås på följande sätt: Bilda alla par av tupler t r från r och t s från s. Om tuplerna t r och t s har samma värde på varje attribut i R S, sätt till en tupel t till resultatet, där! t har samma värden på t r som i r! t har samma värden på t s som i s Exempel: Antag att r har schemat R = (A, B, C, D) och s har schemat S = (E, B, D) Resultatet av r s har då schemat (A, B, C, D, E) r s kommer då att vara det samma som r.a, r.b, r.c, r.d, s.e (σ r.b = s.b r.d = s.d (r x s)) 37 Naturlig Join Exempel! Vi har två relationer r och s: Attributen B och D är gemensamma för r och s r s blir då: 38 19!

Naturlig Join Exempel! r.a! r.b! r.c! r.d! s.b! s.d! s.e! α 1 α a 1 a α α 1 α a 3 a β α 1 α a 1 a γ α 1 α a 2 b δ α 1 α a 3 b ε β 2 γ a 1 a α β 2 γ a 3 a β β 2 γ a 1 a γ β 2 γ a 2 b δ β 2 γ a 3 b ε γ 4 β b 1 a α γ 4 β b 3 a β γ 4 β b 1 a γ γ 4 β b 2 b δ γ 4 β b 3 b ε..................... Vi bildar först korsprodukten r x s Den kommer att ha 25 tupler r.a! r.b! r.c! r.d! s.b! s.d! s.e! α 1 γ a 1 a α α 1 γ a 3 a β α 1 γ a 1 a γ α 1 γ a 2 b δ α 1 γ a 3 b ε δ 2 β b 1 a α δ 2 β b 3 a β δ 2 β b 1 a γ δ 2 β b 2 b δ δ 2 β b 3 b ε 39 Naturlig Join Exempel! Resultatet av r s är de tupler i den kartesiska produkten där de gemensamma attributen (dvs. B och D) har samma värde. Det finns 5 sådana tupler. De gemensamma attributen tas bara med en gång i resultatet. De har ju samma värden, så det finns ingen orsak att ha dem dubbelt i tabellen. Eventuella dubblett-tupler elimineras. Theta join operationen r θ s definieras som r s! A! B! C! D! E! α 1 α a α α 1 α a γ α 1 γ a α α 1 γ a γ δ 2 β b δ r θ s = σ θ (r x s)! dvs. en korsprodukt och en select på ett join-villkor 40 20!

Yttre Join! Yttre join är en utvidgning av join-operationen som undviker förlust av information. I en naturlig join tas endast de tupler med där de gemensamma attributens värden är lika, alla andra tupler lämnas bort. Yttre join beräknar en join och sätter sen till tupler från en av relationerna som inte matchar tupler i den andra relationen. Använder nollvärden: null betyder att värdet är obekant eller inte existerar Alla jämförelser med null är (grovt taget) falska per definition.! Vi kommer att studera den exakta betydelsen av jämförelser med null senare. 41 Yttre Join! Antag till exempel att vi skulle ha följande tabeller i universitetsdatabasen: instructor teaches ID! name! dept_name! ID! course_id! 10101 Srinivasan Comp.Sci. 10101 CS-101 12121 Wu Finance 12121 FIN-201 15151 Mozart Music 76766 BIO-101 Om vi gör en naturlig join instructor1 teaches1 får vi som resultat: ID! name! dept_name! course_id! 10101 Srinivasan Comp.Sci. CS-101 12121 Wu Finance FIN-201 Eftersom Mozart inte föreläser några kurser kommer hans uppgifter inte med i resultattabellen. Det finns inga tupler där det gemensamma attributet ID är det samma i de två tabellerna för Mozart, så det tas inte med i en naturlig join. 42 2

Vänster yttre join! Vänster yttre join betecknas med symbolen (Unicode 27D5) Resultatet av instructor1 teaches1 blir: ID! name! dept_name! course_id! 10101 Srinivasan Comp.Sci. CS-101 12121 Wu Finance FIN-201 15151 Mozart Music null! Vänster yttre join tar alla tupler i den vänstra relationen som inte matchar med någon tupel i den högra relationen, sätter till nollvärden för attributen i den högra relationen och fogar den här tupeln till resultatet. All information från den vänstra relationen finns kvar i resultatet. 43 Höger yttre join! Höger yttre join betecknas med symbolen (Unicode 27D6) Resultatet av instructor1 teaches1 blir: ID! name! dept_name! course_id! 10101 Srinivasan Comp.Sci. CS-101 12121 Wu Finance FIN-201 76766 null! null! BIO-101 Höger yttre join tar alla tupler i den högra relationen som inte matchar med någon tupel i den vänstra relationen, sätter till nollvärden för attributen i den vänstra relationen och fogar den här tupeln till resultatet. All information från den högra relationen finns kvar i resultatet 44 2

Full yttre join! Full Yttre Join betecknas med symbolen (Unicode 27D7) Resultatet av instructor1 teaches1 blir: ID! name! dept_name! course_id! 10101 Srinivasan Comp.Sci. CS-101 12121 Wu Finance FIN-201 15151 Mozart Music null! 76766 null! null! BIO-101 Full yttre join tar alla tupler både från den vänstra och den högra relationen som inte matchar med någon tupel i den andra relationen, sätter till nollvärden och fogar tupeln till resultatet. Yttre join operationer kan uttryckas med de grundläggande operationerna i relationsalgebran. T.ex. vänster yttre join r s är (r s) (r - R (r s)) x {(null, null,..., null)} där den konstanta relationen (null, null,..., null) är på schemat S-R 45 Tilldelningsoperation! Tilldelningsoperationen ( ) är ett behändigt hjälpmedel för att uttrycka komplexa förfrågningar. Man kan dela upp en komplex fråga i ett antal enklare delfrågor Man lagrar resultatet av en delfråga genom en tilldelning till en temporär tabell Exempel: lista alla lärare och de kurser som dessa föreläser (utan att använda en naturlig join)! temp1 instructor x teaches σ instructor.id=teaches.id (temp1) Tilldelningar måste alltid göras till en temporär relationsvariabel. Resultatet på högra sidan av tilldelas värdet av relationsvariabeln till vänster om Man kan sedan använda den temporära variabeln i kommande uttryck. 46 23!

Nollvärden! Tupler kan ha ett nollvärde, betecknat med null, för en del av sina attribut Värdet null betecknar ett okänt värde eller att värdet inte existerar. Resultatet av vilket som helst aritmetiskt uttryck som involverar null är null. Vid eliminering av duplikat och gruppering behandlas null som vilket som helst annat värde, och två nollvärden antas vara identiska. 47 Logiska uttryck med nollvärden! Jämförelser med nollvärden returnerar det speciella sanningsvärdet unknown! Man måste använda ett tredje sanningsvärde, eftersom om false skulle användas istället för unknown, så skulle not (A < 5) inte vara ekvivalent med A >= 5.! Trevärd logik med sanningsvärdet unknown:!! OR! AND! unknown OR true unknown OR false unkwnown OR unknown true AND unknown! false AND unknown unknown AND unknown true unknown unknown unknown! false unknown NOT! NOT unknown unknown 48 24!

Division-operation! Divisionsoperationen lämpar sig för förfrågningar som inkluderar frasen för alla. r! ID! course_id! Antag att vi vill hitta de studenter som har tagit alla 00128 CS-101 kurser som ges av Biologi-institutionen 12345 CS-101 Vi får en tabell över alla studieprestationer med frågan 12345 CS-190 r ID, course_id (takes ) 00128 CS-347 23121 FIN-201 och en tabell med alla kurser som ges av Biologi- institutionen med frågan 98988 BIO-101 98988 BIO-301 s course_id (σ dept_name= Biology (course)) course_id! Svaret på vår fråga får vi när vi dividerar r med s Division väljer ut de tupler ur r som BIO-101 BIO-301 matchar alla tupler i s s! ID! 98988 r s! 49 Division-operation! Notation: r s Låt r och s vara relationer på scheman R respektive S där S R, dvs. attributen i S är en delmängd av attributen i R R = (A 1,, A m, B 1,, B n ) S = (B 1,, B n ) Resultatet av r s är en relation på schemat R S = (A 1,, A m ) dvs. de attribut som finns i R men inte i S r s = { t t R-S (r) u s ( tu r ) } där tu betyder konkateneringen av tuplerna t och u för att producera en enda tupel. Resultatet av r s är de tupler t för vilka alla kombinationer med tuplerna i s finns i r. 50 25!

Division-operation Exempel! Relationerna r och s: Då blir r s: A! a b r! A! B! a 1 a 2 a 3 b 1 g 1 d 1 d 3 d 4 e 6 e 1 b 2 s! B! 1 2 51 Ett annat divisionsexempel! Relationer r och s: r! typ! pris! färg! storl.! 1 44,00 röd L 1 44,00 röd S 2 39,00 blå M 2 39,00 gul S 3 55,00 blå XS 1 44,00 blå M 2 39,00 röd S 4 62,00 blå L 4 62,00 blå S s! färg! storl.! röd S blå M r s: typ! pris! 1 44,00 2 39,00 52 26!

Divisionsoperation (forts.)! Egenskap Låt q = r s Då är q den största relationen som uppfyller q x s r Definition i termer av de grundläggande algebraiska operationerna: Låt r(r) och s(s) vara relationer, och låt S R r s = R-S (r ) R-S ( ( R-S (r ) x s ) R-S,S (r ) ) För att se varför R-S,S (r) arrangerar bara om attribut av r! R-S ( R-S (r ) x s ) R-S,S (r) ) ger de tupler t i R-S (r ) sådana att för någon tupel u s gäller att tu r. Man kan också skriva r s som temp1 R-S (r ) temp2 R-S ((temp1 x s ) R-S,S (r )) result = temp1 temp2 53 Utökade relationsalgebraoperationer! Vi utökar relationsalgebran med ett par operationer Dessa kan inte uttryckas med hjälp av de sex grundläggande operationerna. Generaliserad projektion Tillåter att man använder t.ex. aritmetiska operationer (+,, *, / ) i projektionslistan för att beräkna värden. Aggregatfunktioner Tillåter att man använder aggregerande funktioner som t.ex. sum(), min() och max() på mängder av värden. 54 27!

Generaliserad projektion! Vi utökar projektionsoperationen genom att tillåta aritmetiska funktioner i projektionslistan.,,..., ( ) F1 2 E F F n E är ett godtyckligt uttryck i relationsalgebran. F 1, F 2,, F n är aritmetiska uttryck som innehåller konstanter och attribut i E:s schema. Exempel: Givet relationen instructor, där salary anger årslönen, hur stor är månadslönen för föreläsarna: ID, name, dept_name, salary/12 (instructor) ID! name! dept_name! salary/1 10101 Srinivasan Comp.Sci 5416 12121 Wu Finance 7500 15151 Mozart Music 3333 22222 Einstein Physics 7916 55 Aggregegatfunktioner G! Aggregatfunktioner tar en samling av värden och returnerar ett enda värde som resultat. avg: medelvärde min: max: sum: minimumvärde maximumvärde summan av värdena count: antal värden Aggregatfunktioner opererar på multiset (inte mängder som normalt) Tillåter att samlingen av värden innehåller samma värde flera gånger Ordningen i vilken värdena förekommer är inte relevant! Aggregatoperationer i relationsalgebra betecknas med symbolen G Kalligrafiskt G Ett subskript anger vilken aggregerande funktion som används 56 28!

Aggregatoperation Exempel! Antag att vi har en relation r: r! A! B! C! a a 7 a b 7 b b 3 b b 10 Vi summerar värdena på attributet C G sum(c) (r)! sum(c)! 27 57 Aggregatfunktioner med gruppering! Allmän form av aggregatuttryck: G 1, G2,..., Gn G F1(A1), F2(A2),..., Fn(An) (E) där E är ett godtyckligt uttryck i relationsalgebran.! G 1, G 2, G n är en lista av attribut som grupperingen baseras på (kan också vara tom) Varje F i är en aggregatfunktion! Varje A i är ett attributnamn Tuplerna i tabellen E grupperas så att alla tupler i en grupp har samma värden på attributen G 1, G 2,..., G n Tupler i olika grupper har olika värden för G 1, G 2,..., G n Grupperingen görs baserat på värdena av attributen G 1, G 2,..., G n Om listan G 1, G 2,..., G n är tom görs ingen gruppering, utan relationen E behandlas som en enda grupp som innehåller alla tupler i E.! 58 29!

Aggregatoperation Exempel! Vad är medellönen vid varje institution: dept_name G avg(salary) (instructor) Gruppera tuplerna i tabellen instructor enligt värdet på dept_name! Ta medelvärdet av salary inom varje grupp dept_name G (instructor) dept_name G avg(salary) (instructor) 59 Aggregatfunktioner (forts.)! Resultatet av aggregering har inget namn Man kan använda en namngivningsoperation (as) för att ge resultatet ett namn För bekvämlighet tillåter vi namngivning som en del av aggregatoperationer dept_name G avg(salary) as medellön (instructor)! dept_name! medellön! Biology 72000 Comp.Sci. 77333 Elec.Eng. 80000 Finance 85000 History 61000 Music 40000 Physics 91000 60 30!

Exempelfrågor! Hur många institutioner finns i byggnaden Watson? G count(dept_name) as antal (σ building= Watson (department) ) department! antal! 2! Vilka institutioner finns i byggnaden Watson? dept_name (σ building= Watson (department) ) dept_name! Biology Physics 61 Exempelfrågor! Vilka kurser föreläser Srinivasan? Vi måste kombinera information från följande tabeller: course(course_id, title, dept_name, credits) teaches(id, course_id, sec_id, semester, year) instructor(id, name, dept_name, salary) Vi kan inte använda en naturlig join mellan de tre tabellerna, eftersom attributet dept_name också är gemensamt för course och instructor! 62 3

Exempelfrågor! I stället gör vi en naturlig join mellan course och teaches, och parar sen ihop resultatet med information från tabellen instructor Vi väljer ut de tupler ur instructor där attributet ID matchar course_id, title (σ instructor.name= Srinivasan teaches.id = instructor.id (course teaches x instructor)) course_id! CS-101 CS-315 CS-347 title! Intro. to Computer Science Robotics Database System Concepts Naturlig join mellan course och teaches matchar tupler på attributet course_id Select-satsen väljer ut de tupler som hör till Srinivasan 63 Exempelfrågor! Skriv ut en lista med namn, ID och vitsord över resultatet från kursen Intro. to Computer Science på höstterminen 2009. name, ID, grade (σ course.title = Intro. to Computer Science semester= Fall year=2009 ( ID, name (student)) takes takes.course_id = course.course_id course)! name! ID! grade! Zhang 00128 A Shankar 12345 C Levy 45678 F Williams 54321 A Brown 76543 A Bourikas 98765 C Vi kombinerar information från tabellerna student, takes och course. student(id, name, dept_name, tot_credit) takes(id, course_id, sec_id, semester, year, grade)! course(course_id, title, dept_name, credits)! 64 3