HUND Mindy Ossi Frågespråk mot relationsmodellen Relationsalgebra Relationsalgebra Primtiva operatorer projektion π selektion σ union differens - kryssprodukt X Med hjälp av dessa operatorer kan andra (icke-primitiva) operatorer definieras: Icke-primitiva operatorer theta-join θ ekvi-join naturlig join X snitt division Tilldelning := Relationsalgebran är sluten: R op R 2 R relation relation relation ((R op R 2) op R ) op R 4 Tar en eller två tabeller som argument (indata). Producerar en ny tabell som resultat! 2
Projektion π - Unär operator = tar en tabell som indata - π, 2,...n (Relationsnamn) Vertikal delmängd av attribut, Man väljer ut ett antal kolumner attribut - π, Lön attribut (Relationsnamn) Omordning av attribut möjligt via π π Lön, (NSTÄLLD) Lön 000 20000 22000 0000 000 Per Kvist o Gren Sten Rot Nils Hed Eva erg Selektion σ - Unär operator Horisontelll delmängd av rader Man väljer ut ett antal rader baserat på något villkor σ villkor (Relationsnamn) Enkelt villkor: Kolumn θ kolumnvärde Kolumn θ kolumn där θ {=,, <, >,, } σ. Chef= Eva erg (NSTÄLLD) kolumn kolumn-värde Lön Chef vd Per Kvist 000 Eva erg Parfym o Gren 20000 Eva erg Parfym Nils Hed 0000 Eva erg Skor Eva erg 000 Eva erg Parfym 2. σchef=(nställd) Lön Chef vd kolumn kolumn Eva erg 000 Eva erg Parfym Sammansatt villkor: villkor operator villkor där operator {NOT, ND, OR}. Chef= Eva erg ND Lön>20000 ( NSTÄLLD ).σ Lön Chef vd Nils Hed 0000 Eva erg Skor 4 Eva erg 000 Eva erg Parfym 2
Kartesisk produkt (eller ibland * ) ska tolkas som alla rader i kombinerade med alla rader i m n m n a b c y a a y b b y c c y Kartesisk produkt, ett eempel till NSTÄLLD NSTÄLLD VDELNING Lön Chef vd namn Våning Per Kvist 000 Eva erg Parfym Leksaker Per Kvist 000 Eva erg Parfym Livsmedel Per Kvist 000 Eva erg Parfym Parfym Per Kvist 000 Eva erg Parfym Skor Per Kvist 000 Eva erg Parfym Trädgård Och så vidare på samma sätt... Eva erg 000 Eva erg Parfym Leksaker Eva erg 000 Eva erg Parfym Livsmedel Eva erg 000 Eva erg Parfym Parfym Eva erg 000 Eva erg Parfym Skor Eva erg 000 Eva erg Parfym Trädgård 2 2 2 2 Totalt har NSTÄLLD VDELNING 2 st rader! (NSTÄLLD har rader och VDELNING har rader = totalt * st rader). 6
JOIN θ Kombinerar två tabeller och väljer ut endast de radkombinationer som uppfyller ett villkor. Typer av JOIN: Theta-JOIN Equi-JOIN Natural JOIN och andra 7 θ JOIN ( theta-join ) där θ {=,, <, >,, } nställd nställd.vd nställd.vd = vdelning.vd vdelning.vd vdelning NSTÄLLD Pia Mia Ken vd VDELNING vd röd Ost Vin NSTÄLLD X VDELNING nställd.vd = vdelning.vd nst. vd. vd vd namn Pia Mia Ken röd Vin Vin Här bildas den nya tabellen genom att matcha kolumnvärden (här kolumen vd) från två tabeller. Om jämförelsevillkoret är = talar man om en equi-join. Observation: σ θ-villkor ( ) Α X θ-villkor 8 4
NTURL JOIN nställd NTURL JOIN vdelning nställd vdelning NSTÄLLD vd VDELNING vd NSTÄLLD vd X VDELNING namn Pia Mia Ken röd Ost Vin Pia Mia Ken röd Vin Vin Kombinerar två tabeller och väljer endast ut de radkombinationer som har samma värde på alla kolumner med samma namn (och datatyp). Dessutom tas bara EN av varje kolumn som förekommer i båda tabellerna med! 9 NULL Null-värden kan ge problem vid join. NSTÄLLD VDELNING Pnr nst.nr dress vd.nr vdelning vd.nr yv. Forskning 22222 Solsv. 6 Försäljn. yv. dmin. 44444 2 yv.7 X Solv. 7 NULL 66666 Y yv. NULL En join mellan anställda över vd.nr kommer att resultera i att de två sista anställda inte kommer med. eroende på omständigheterna kan detta vara vad som avsågs eller felaktigt. Pnr nst.nr dress vd.nr vdelning vd.nr yv. Forskning 22222 Solsv. 6 Försäljn. yv. Forskning 44444 2 yv.7 dmin 0
OUTER JOIN (s) id Ossi Karo Mindy Pudel NULL id Emir Lady Kaninta NULL X.=. id. id. Ossi (LEFT) OUTER (EQUI-) JOIN ON id. id. Ossi Karo Pudel NULL NULL Mindy NULL NULL NULL (RIGHT) OUTER (EQUI-) JOIN ON id. id. Ossi NULL NULL Emir Kaninta NULL NULL Lady NULL (FULL) OUTER (EQUI-) JOIN ON id. id. Ossi Karo Pudel NULL NULL Mindy NULL NULL NULL NULL NULL Emir Kaninta NULL NULL Lady NULL Mängdoperationer Union Snitt/Intersection Differens/Minus 2 6
Union compatibility Somliga av de relationsalgebraiska operatorerna kräver att de tabeller som de opererar på ska vara unionskompatibla. Detta betyder att de två tabellerna måste ha: samma grad (lika många attribut/kolumner) attribut som motsvarar varandra måste ha samma domän (datatyp) ( attributen som motsvarar varandra måste heta likadant, viktigt inför SQL men även här med avseende på namngivning av kolumner) UNION, SNITT och DIFFERENS är unionskompatibla operatorer. Ska man ta unionen av två tabeller måste tabellerna ha lika många kolumner och de par av kolumner som svarar mot varandra måste vara av samma typ (ha samma domän). UNION?.a.b.a.b a a a 2 a y b 2 b UNION?.a.b.a.b.c a a m a 2 a 2 n b 2 b 2 o UNION!.a.b a a y b.a.b b a m b UNION Kombinerar rader från två tabeller och tar med alla rader från båda tabellerna. Dubbletterna tas med bara en gång. Visa alla hundar (hund-rader) som ingår i antingen tabell eller tabell : Karo Mindy Ossi Pudel Dvärgta Emir Lady Morris Schäfer Welsh Corgie lla rader som finns i plus alla rader som finns i Karo Mindy Ossi Emir Lady Morris Pudel Dvärgta Schäfer Welsh Corgie Observation: Β = Β Α 4 7
Karo Mindy Ossi Pudel Dvärgta Emir Lady Morris UNION Visa alla hundar (hund-rader) som är taar i antingen tabell eller tabell : σ = σ = σ = = (σ =()) (σ =()) Schäfer Welsh Corgie Karo Emir SNITT (INTERSECT) Kombinerar rader från två tabeller och tar med alla rader som förekommer i båda tabellerna. Dubbletterna tas med bara en gång. Visa alla hundar (hund-rader) som ingår i ÅDE tabell och tabell : Karo Mindy Ossi Pudel Dvärgta Emir Lady Morris Schäfer Welsh Corgie lla rader som finns i både och Observation I : Β = Β Α 6 8
SNITT Visa taar som ingår i både tabell och tabell : σ = = σ = = (σ = = ()) (σ = = ()) Karo Mindy Ossi Pudel Dvärgta Emir Lady Morris Schäfer Welsh Corgie 7 Differens - Kombinerar två tabeller och tar med alla rader som finns i den första men inte i den andra. Visa alla hundar (hund-rader) som finns i tabell men inte i tabell : - MINUS Karo Mindy Ossi Pudel Dvärgta Emir Lady Morris Schäfer Welsh Corgie MINUS Karo Mindy Pudel Ossi Dvärgta lla tupler som finns i men inte i Observation: - - 8 9
Tilldelning Kan användas för att dela upp stora komplea satser. Kan också användas för att ändra namn på en tabell och dess kolumner. Pers Person Pers2(id,name,length,weight,country) Person Pers och Pers2 kan (ska) användas i nya uttryck. Tilldelning kan möjliggöra återanvändning. 9 Tilldelning eller inte tilldelning Skriv ett relationsalgebraiskt uttryck som ger namn och lön för de anställda som arbetar på andra våningen. NSTÄLLD Metod I (flera steg): Rätt_avdelningar σ Våning=2 (VDELNING) Rätt_anställda NSTÄLLD X vd=namn Rätt_avdelningar Rätt_uppgifter_om_anställda π, Lön (Rätt_anställda) Metod II (ett enda långt relationsalgebraiskt uttryck): π, Lön (NSTÄLLD X vd=namn (σ Våning=2 (VDELNING))) 20 0
ändring ρ Kan också användas för att ändra namn på en tabell och dess kolumner. Kan också användas för att ändra kolumnernas ordning. ρ Pers Pers Person ρ Pers4(id,name,length,weight,country) Person Med hjälp av tilldelningsoperatorn och projektionsoperatorn kan man åstadkomma samma resultat. 2 CR Licencenr Colour Owner C2 lue Lisa Red Lisa 222 Red Oscar MMM Yellow en Eempeldatabas PERSON Pname Weight Pddress Lisa Solv. 2 Oscar 6 Solv. en 7 ygatan WORKS_T Person Company Lisa Telia Oscar Telia en Ramirent Oy en Telia COMPNY CName Founded Homepage Telia 200 www.telia.se Ramirent Oy 989 www.rr.fi 22
Differens fortsättning... Differens är användbart för frågor av typ: Ta fram alla som inte gjort ngt/helt saknar en viss egenskap etc. T e Ta fram alla personer som inte har någon bil CR Licencenr Colour Owner C2 lue Lisa Red Lisa 222 Red Oscar MMM Yellow en Notera att Owner utgör främmande nyckel mot PERSON tabellen PERSON. PName Weight Paddress Lisa Solv. 2 Oscar 6 Solv. en 7 ygatan. Skapa en relation som som innehåller alla personer som äger en bil: CR_OWNER(Pname) := π Owner (CR) 2. Dra sen bort denna mängd tupler från relationen PERSON (dvs mängden av alla personer): HVE_NO_CR := π PName (PERSON) - CR_OWNER Observera att man måste projicera ut PName från PERSON och Owner Från CR eftersom differens kräver att de ingående relationerna ska vara unionskompatibla! 2 Differens övning Skriv ett relationsalgebraiskt uttryck som tar fram alla personer som inte ägt någon röd bil: CR Licencenr Colour Owner C2 lue Lisa Red Lisa 222 Red Oscar MMM Yellow en Notera att Owner utgör främmande nyckel mot PERSON tabellen PERSON. PName Weight Paddress Lisa Solv. 2 Oscar 6 Solv. en 7 ygatan. Skapa en relation som som innehåller alla som ägt en röd bil 2. Dra sen bort denna relation från relationen PERSON (dvs mängden av alla personer = alla raderna i tabellen PERSON). Tänk på att när man tar en relation minus en relation måste de två relationerna vara unionskompatibla! 24 2
ggregerings-/grupperingsfunktion ƒ För att utföra en eller flera funktioner på hela tabellen: ƒ aggregatfunktion(kolumn)(tabell) Resulterar i ett värde per funktion. För att utföra en eller flera funktioner på radgrupper: grupperingskolumn(er) ƒ aggregatfunktion(kolumn)(tabell) Grupperar raderna så att alla rader i varje grupp har samma värde på de valda kolumnerna (som anges till vänster om symbolen). Resulterar i ett värde per funktion och en rad per grupp. 2 ggregat-funktioner i relationsalgebra: MIN, MX, COUNT, SUM,... PERSON Pname Weight Pddress Lisa Solv. 2 Oscar 6 Solv. en 7 ygatan WORKS_T Person Company Lisa Telia Oscar Telia en Ramirent Oy en Telia G ggregatfunktion(kolumn) (TELL) Vilket är den minsta vikten i tabellen PERSON? G MIN(Weight)(Person) Vad är summan av alla personers vikter? G SUM(Weight)(Person) 26
ggregat-funktioner i relationsalgebra: MIN, MX, COUNT, SUM,... PERSON Pname Weight Pddress Lisa Solv. 2 Oscar 6 Solv. en 7 ygatan WORKS_T Person Company Lisa Telia Oscar Telia en Ramirent Oy en Telia Grupperande attribut G ggregatfunktion(kolumn) (TELL) Hur många anställda har varje företag? Company G COUNT(Person) (WORKS_T) Hur många rader finns det i tabellen WORKS_T? G COUNT(Person) (WORKS_T) Hur många förtag har fler än anställd? TEMP(Företag, ntal):= Company G COUNT(Person) (WORKS_T)) SVR := σ ntal > (TEMP) 27 R y y m n o m n m n o Division (Kvot) S m n o R S tt dela tabellen R med tabellen S innebär följande: För varje kombination av värden i tabell R på de kolumner som inte finns i tabell S, ta med de värden som finns i kombination med alla värden i alla rader i tabell S. Vilka kolumner kommer resultatet att innehålla: Jo R - S dvs de kolumner som förekommer i R men inte i S. I vårt fall blir det kolumnen i R. Vilka kolumn-värden kommer med i kolumnen? Jo alla de -värden i R som är relaterade till LL - värden i S. I vårt fall är detta sant för -värden och. Dvs har ett -värde för både m,n och o. Det samma gäller. -värdet y kommer inte med eftersom det saknar ett -värde, nämligen o. 28 4
R S 2 a 2 a a 2 a 2 a a 2 a 2 a 2 Resultat Kvot, forts. R(,..., n, n+,..., n+m) S( n+,..., n+m) R S = Resultat(,..., n) Varje,... n - del av en R-tuppel ( huvudet ) har n+,... n+m - del ( svansen ) som är lika med var och en av S-tupplerna, till vänster är n= och m=2. För att kunna ta kvoten mellan två relationer måste nämnarens kolumner uppfylla kraven på unionskompatibilitet med en delmängd av täljarens kolumner (mao nämnaren måste vara lika med svansen i täljaren) 29 R y y m n o m n m n o Kandidatvärden y S m n o Kvot kan skrivas om i termer av andra relationsalgebraiska operatorer: Kandidatvärden π (R) Kombinering π ((Kandidatvärden X S) - R) Kvoten Kandidatvärden - Kombinering Kandidatvärden X S m n o y m y n y o m n o Kombinering y Kvoten R S 0
Kvot fortsättning... Kvot är användbart för frågor av typ: Ta fram alla som gjort allt/har alla egenskaperna. T e Ta fram de företag som har alla personer anställda (egentligen lika med uppgiften att ta fram alla de kolumn-värden i tabellen WORKS_T som är relaterade till (= förekommer i en rad som har en främmande nyckel mot) alla rader i tabellen PERSON ) PERSON Pname Weight Pddress Lisa Solv. 2 Oscar 6 Solv. EMPLOYEES (Person) := π Pname (PERSON) en 7 ygatan HVE_THEM_LL := WORKS_T EMPLOYEES WORKS_T Person Company Lisa Telia Oscar Telia en Ramirent Oy en Telia COMPNY CName Founded Homepage Telia 200 www.telia.se Ramirent Oy 989 www.rr.fi Tumregler Tänk ett steg i taget (en operation i taget). Kontrollera alltid (inför varje operation) vilka kolumner som ingår i tabellerna. Går det överhuvudtaget att använda en viss operation, är tabellerna unionskompatibla t e? Om inte, fia till unionskompatibilitet, t e genom att använda tilldelning och projektion! Tänk på i vilken ordning operationerna utförs. Styr med parenteser. nvänd tilldelning för att dela upp stora satser i mindre delar. nvänd projektioner för att ta bort onödiga kolumner. Försiktigt dock att inte ta bort kolumner som ni behöver senare. 2 6