IT i Organisationer och Databasteknik HUND Namn Ras Mindy Ossi Frågespråk mot relationsmodellen Relationsalgebra SQL 1 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 1 op R 2 R relation relation relation ((R 1 op R 2) op R ) op R 4 Tar en eller två tabeller som argument (indata). Producerar en ny tabell som resultat! 2 1
Projektion π - Unär operator = tar en tabell som indata - π 1, 2,...n (Relationsnamn) Vertikal delmängd av attribut, Man väljer ut ett antal kolumner attribut - π Namn, Lön attribut (Relationsnamn) Omordning av attribut möjligt via π π Lön, Namn (NSTÄLLD) Lön 15000 20000 22000 0000 5000 Namn Per Kvist Bo Gren Sten Rot Nils Hed Eva Berg 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 θ {=,, <, >,, } σ 1. Chef= Eva Berg (NSTÄLLD) kolumn kolumn-värde Namn Lön Chef vd Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Nils Hed 0000 Eva Berg Skor Eva Berg 5000 Eva Berg Parfym 2. σchef=namn(nställd) Namn Lön Chef vd kolumn kolumn Eva Berg 5000 Eva Berg Parfym Sammansatt villkor: villkor operator villkor där operator {NOT, ND, OR}. Chef= Eva Berg ND Lön>20000 ( NSTÄLLD ).σ Namn Lön Chef vd Nils Hed 0000 Eva Berg Skor 4 Eva Berg 5000 Eva Berg Parfym 2
Kartesisk product B (eller ibland * B) ska tolkas som alla rader i kombinerade med alla rader i B B B m n m n a b c x y a x a y b x b y c x c y 5 Kartesisk produkt, ett exempel till NSTÄLLD NSTÄLLD VDELNING Namn Lön Chef vd namn Våning Per Kvist 15000 Eva Berg Parfym Leksaker Per Kvist 15000 Eva Berg Parfym Livsmedel Per Kvist 15000 Eva Berg Parfym Parfym Per Kvist 15000 Eva Berg Parfym Skor Per Kvist 15000 Eva Berg Parfym Trädgård Och så vidare på samma sätt... Eva Berg 5000 Eva Berg Parfym Leksaker Eva Berg 5000 Eva Berg Parfym Livsmedel Eva Berg 5000 Eva Berg Parfym Parfym Eva Berg 5000 Eva Berg Parfym Skor Eva Berg 5000 Eva Berg Parfym Trädgård 2 2 1 2 2 1 Totalt har NSTÄLLD VDELNING 25 st rader! (NSTÄLLD har 5 rader och VDELNING har 5 rader = totalt 5*5 st rader). 6
θ JOIN ( theta-join ) där θ {=,, <, >,, } NSTÄLLD Namn Pia Mia Ken vd 5 VDELNING vd 5 1 Namn Bröd Ost Vin NSTÄLLD X VDELNING nställd.vd = vdelning.vd Namn nst. vd. vd vd namn Pia Mia Ken 5 5 Brö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 ( B) Α X θ-villkor B 7 NTURL JOIN NSTÄLLD Namn vd VDELNING vd Namn NSTÄLLD X VDELNING Namn vd namn Pia 5 5 Bröd Pia 5 Bröd Mia 1 Ost Mia Vin Ken Vin Ken Vin En NTURL JOIN är en EQUI-JOIN där man projicerat bort ett av de ingående JOIN-attributen (här tar vi bort dupliceringen av JOINattributet vd ). En NTURL JOIN förutsätter att JOIN-attributet (attributen) heter likadant i det två tabeller som ska joinas. 8 4
NSTÄLLD NULL Null-värden kan ge problem vid join. VDELNING Pnr nst.nr dress vd.nr vdelning vd.nr 11111 1 Byv. Forskning 22222 B Solsv. 6 5 Försäljn. 5 1 Byv. 5 dmin. 1 44444 2B Byv.7 1 55555 1X Solv. 7 NULL 66666 Y Byv. 11 NULL En join mellan anställda över vd.nr kommer att resultera i att de två sista anställda inte kommer med. Beroende på omständigheterna kan detta vara vad som avsågs eller felaktigt. Pnr nst.nr dress vd.nr vdelning vd.nr 11111 1 Byv. Forskning 22222 B Solsv. 6 5 Försäljn. 5 1 Byv. 5 Forskning 44444 2B Byv.7 1 dmin 1 9 OUTER JOIN (s) id Ossi Karo Mindy Ras Pudel NULL B Bid Fido Emir Lady Ras Kanintax NULL X.Ras=B.Ras B id.ras Bid B.Ras Ossi Fido (LEFT) OUTER (EQUI-) JOIN ON Ras B id.ras Bid B.Ras Ossi Fido Karo Pudel NULL NULL Mindy NULL NULL NULL (RIGHT) OUTER (EQUI-) JOIN ON Ras B id.ras Bid B.Ras Ossi Fido NULL NULL Emir Kanintax NULL NULL Lady NULL (FULL) OUTER (EQUI-) JOIN ON Ras B id.ras Bid B.Ras Ossi Fido Karo Pudel NULL NULL Mindy NULL NULL NULL NULL NULL Emir Kanintax NULL NULL Lady NULL 10 5
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 π Namn, Lön (Rätt_anställda) Metod II (ett enda långt relationsalgebraiskt uttryck): π Namn, Lön (NSTÄLLD X vd=namn (σ Våning=2 (VDELNING))) 11 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 ( 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 B? B.a.b B.a B.b a 1 a x a 2 a y b 2 b x UNION B? B.a.b B.a B.b B.c a 1 a 1 m a 2 a 2 n b 2 b 2 o UNION B!.a.b a x a y b x B B.a B.b b x a m b x 12 6
UNION Namn Fido Karo Mindy Ossi Ras Pudel Dvärgtax B Namn Fido Emir Lady Morris Ras Schäfer Welsh Corgie lla rader som finns i plus alla rader som finns i B B Namn Fido Karo Mindy Ossi Emir Lady Morris Ras Pudel Dvärgtax Schäfer Welsh Corgie Observation: Β = Β Α 1 SNITT (INTERSECT) Namn Fido Karo Mindy Ossi Ras Pudel Dvärgtax B Namn Fido Emir Lady Morris Ras Schäfer Welsh Corgie B Namn Fido Ras lla rader som finns i både och B Observation I : Β = Β Α 14 7
DIFFERENCE (MINUS) Namn Fido Karo Mindy Ossi Ras Pudel Dvärgtax B Namn Fido Emir Lady Morris Ras Schäfer Welsh Corgie MINUS B Namn Ras Karo Mindy Pudel Ossi Dvärgtax lla tupler som finns i men inte i B Observation: - B B - 15 CR Licencenr Colour Owner BC12 Blue Lisa 111 Red Lisa BB222 Red Oscar MMM11 Yellow Ben Exempeldatabas PERSON Pname Weight Pddress Oscar 65 Solv. COMPNY CName Founded Homepage Telia B 2001 www.telia.se Ramirent Oy 1989 www.rr.fi 16 8
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 ex Ta fram alla personer som inte har någon bil CR Licencenr Colour Owner BC12 Blue Lisa 111 Red Lisa BB222 Red Oscar MMM11 Yellow Ben Notera att Owner utgör främmande nyckel mot PERSON tabellen PERSON. PName Weight Paddress Oscar 65 Solv. 1. 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! 17 ggregat-funktioner i relationsalgebra: MIN, MX, COUNT, SUM,... PERSON Pname Weight Pddress Oscar 65 Solv. Grupperande attribut G ggregatfunktion(kolumn) (TBELL) Hur många anställda har varje företag? SVR:= Company G COUNT(Person) () Hur många rader finns det i tabellen? SVR:= G COUNT(Person) () Hur många förtag har fler än 1 anställd? TEMP(Företag, ntal):= Company G COUNT(Person) ()) SVR := σ ntal > 1 (TEMP) 18 9
x x x y y z z z B m n o m n m n o B m n o Kvot R S Vi har två relationer R och S. R S x z För att förstå vad R KVOT S är kan man tänka på ungefär följande sätt: 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 B- värden i S. I vårt fall är detta sant för -värden x och z. Dvs x har ett B-värde för både m,n och o. Det samma gäller z. -värdet y kommer inte med eftersom det saknar ett B-värde, nämligen o. 19 R S 1 1 2 a 1 2 a 1 1 a 2 a 2 1 a a 2 a 1 2 a 2 Resultat Kvot, forts. R( 1,..., n, n+1,..., n+m) S( n+1,..., n+m) R S = Resultat( 1,..., n) Varje 1,... n - del av en R-tuppel ( huvudet ) har n+1,... n+m - del ( svansen ) som är lika med var och en av S-tupplerna, till vänster är n=1 och m=2. 1 1 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) 20 10
R x x x y y z z z B m n o m n m n o Kandidatvärden x y z S B 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 B x m x n x o y m y n y o z m z n z o Kombinering y Kvoten x z R S x z 21 Kvot fortsättning... Kvot är användbart för frågor av typ: Ta fram alla som gjort allt/har alla egenskaperna. T ex 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 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 Oscar 65 Solv. EMPLOYEES (Person) := π Pname (PERSON) HVE_THEM_LL := EMPLOYEES COMPNY CName Founded Homepage Telia B 2001 www.telia.se Ramirent Oy 1989 www.rr.fi KVOT kallas även DIVISION 22 11
Kvot fortsättning... Lista alla företag som har samma anställda som Ramirent Oy har: PERSON Pname Weight Pddress Oscar 65 Solv. RMIS := π (σ = Ramirent Oy ()) LMOST := RMIS NOTRMIS:= π Person () - RMIS π TOOFT := Company ( X NOTRMIS)) NOTRMIS.Person =.Person RESULT := LMOST - TOOFT COMPNY CName Founded Homepage Telia B 2001 www.telia.se Ramirent Oy 1989 www.rr.fi 2 Sammanfattning av några relationsalgebraiska operatorer UNION INTERSECT(= SNITT) DIFFERENCE projektion π selektion σ union differens - snitt B UNION B INTERSECT B DIFFERENCE B ( MINUS B) B lla rader som lla rader som förekommer i förekommer eller B i både och B PROJECTION B De rader som förekommer i men inte i B SELECTION kryssprodukt X theta-join θ ekvi-join naturlig join X division 24 12
SQL - Structured Query Language SQL har funktioner för att hantera: databeskrivning, SQL-DDL (Data Definition Language) databearbetning, SQL-DML (Data Manipulation Language) behörighet, SQL-DCL (Data Control Language) 25 Icke procedurellt, dvs vad snarare än hur, dvs den som kodar anger vad som söks, (nästan) inte vilka operationer som ska utföras och inte heller i vilken ordning de ska utföras,vd ND VDELNING.vd = NSTÄLLD.VD JOIN SQL kan uttrycka allt som går att uttrycka i relationsalgebran - språket är relationally complete PLUS lite till, bland annat ORDER BY (DESC; SC) 26 1
SQL-DML SELECT - läsning = sökning INSERT - nyskapande (vanligen av rader i en tabell) UPDTE - ändra DELETE - ta bort 27 SELECT SELECT Namn, vd FROM NSTÄLLD WHERE Lön > 25000 NSTÄLLD Namn Lön Chef vd Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 0000 Eva Berg Skor Eva Berg 000 Eva Berg Parfym Namn Nils Hed Eva Berg vd Skor Parfym 28 14
WHERE OCH JOIN Predikatet kan innehålla: Jämförelseoperatorer: = <>, >, >=, <, =< Logiska operatorer: ND, NOT, OR, Paranteser kan användas för att styra utvärderingen BETWEEN för att testa intervall NSTÄLLD Namn Lön Chef vd Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 0000 Eva Berg Skor Eva Berg 000 Eva Berg Parfym VDELNING namn Våning Leksaker 2 Livsmedel Parfym Skor 2 Trädgård 1 SELECT Namn, Våning FROM NSTÄLLD, VDELNING WHERE vd = namn ND Lön BETWEEN 22000 ND 0000 Namn Våning Sten Rot 2 Nils Hed 2 29 Kvalificerade attributnamn Om ett attributnamn förekommer i flera av de berörda tabellerna måste det Kvalificeras med tabellnamnet: NSTÄLLD Namn Lön Chef namn Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 0000 Eva Berg Skor Eva Berg 000 Eva Berg Parfym VDELNING namn Våning Leksaker 2 Livsmedel Parfym Skor 2 Trädgård 1 SELECT Namn, Våning FROM NSTÄLLD, VDELNING WHERE NSTÄLLD.namn = VDELNING.namn ND Lön BETWEEN 22000 ND 0000 0 15
lias Om tabellnamnen är långa kan aliasnamn införas genom att ge en tabell ett alias utan att kommatecken skrivs i tabellen: SELECT 1.Namn, 2.Våning FROM NSTÄLLD 1, VDELNING 2 WHERE 1.namn = 2.namn ND Lön > 25000 1 lias, fortsättning lias är även användbart när man vill joina en tabell med sig självt: Ta fram namn och lön på alla anställa som har en chef som tjänar mer än 0000 kronor: SELECT 1.Namn, 2.Våning FROM NSTÄLLD 1, VDELNING 2 WHERE 1.namn = 2.namn ND Lön > 0000 NSTÄLLD Namn Lön Chef namn Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 0000 Eva Berg Skor Eva Berg 000 Eva Berg Parfym Namn Lön Per Kvist 15000 Bo Gren 20000 Nils Hed 0000 Eva Berg 000 2 16
Nästlade frågor NSTÄLLD(Namn, Lön, Chef, namn) VDELNING(namn, Våning) Ta fram namn och lön på alla anställda som har en chef som tjänar mer än 0000 kr: SELECT Namn, Lön FROM NSTÄLLD WHERE Chef IN (SELECT Namn FROM NSTÄLLD WHERE Lön > 0000) Här använde vi nästling som ett alternativ till att joina en tabell med sig själv! Jämför med föregående fråga. DIFFERENCE I SQL Ta fram namn på alla personer som aldrig ägt en röd bil: SELECT PName FROM PERSON WHERE PName NOT IN (SELECT Owner FROM CR WHERE Colour = Red ) SELECT Owner FROM CR WHERE Colour Red SELECT PName S OWNER FROM PERSON EXCEPT SELECT Owner FROM CR WHERE Colour = Red lternativ CR Licencenr Colour Owner BC12 Blue Lisa 111 Red Lisa BB222 Red Oscar MMM11 Yellow Ben Owner Ben Eva PName Weight Paddress Oscar 65 Solv. Eva 60 Snög. 2 4 17
DIVISION i SQL Ta fram namn på de företag som har alla personer anställda: PERSON PName Weight Pddress Oscar 65 Solv. SELECT W.Company FROM W WHERE NOT EXISTS (SELECT PName FROM Person WHERE PName NOT IN (SELECT Person FORM WHERE Company = W.Company)) Det får inte existera någon person i PERSON som inte är anställd i det företag vi söker Resultatmängd: Company Telia B 5 Variant på DIVISION. Ta fram namn på alla företag som har samma personer anställda som Ramirent Oy : SELECT W.Company FROM W WHERE NOT EXISTS (SELECT R.Person FROM R WHERE R.Company = Ramirent Oy ND R.Person NOT IN (SELECT Person FROM WHERE Company = W.Company)) PERSON PName Weight Pddress Oscar 65 Solv. Det får inte existera någon anställd som Ramirent har som inte det företag vi söker har. Hmm... Räcker detta? Resultatmängd: Company Telia B Ramirent Oy 6 18
SELECT W.Company FROM W WHERE NOT EXISTS (SELECT R.Person FROM R WHERE R.Company = Ramirent Oy ND R.Person NOT IN (SELECT Person FROM WHERE Company = W.Company)) ND NOT EXISTS (SELECT.Person FROM WHERE.Company = W.Company ND.Person NOT IN (SELECT Person FROM WHERE Company = Ramirent Oy )) Variant på DIVISION forts. Ta fram namnen på de företag som har samma anställda som Ramirent Oy : Det får inte existera någon anställd i Ramirent Oy som inte är anställd i det företag vi söker. Det får heller inte existera någon anställd i det företag vi söker som inte är anställd i Ramirent Oy. Resultatmängd: Company Ramirent Oy 7 DISTINCT SQL rensar inte duplikat automatiskt (vilket ju operatorerna i relationsalgebra gjorde). För att eliminera dubletter anges DISTINCT. SELECT DISTINCT(Company) FROM SELECT Company From Company Telia B Ramirent Oy Company Telia B Telia B Ramirent Oy Telia B 8 19
Inbyggda funktioner, aggregatfunktioner COUNT(*), räknar antalet rader i en tabell COUNT(kolumnnamn), räknar antalet värden i en kolumn SUM(kolumnnamn), summerar värdena i en kolumn VG(kolumnnamn), tar genomsnittet av värdena i en kolumn MX(kolumnnamn), ger största värdet i en kolumn MIN(kolumnnamn, ger minsta värdet i en kolumn 9 Exempel på aggregat-funktioner SELECT COUNT(*) FROM Ger antalet rader i tabellen 4 SELECT COUNT(DISTINCT (Company)) FROM Ger antalet (unika) företag i tabellen 2 40 20
Order by En relation (tabell) saknar (ur teoretisk synvinkel åtminstone) ordning men man kan sortera ett sökresultat mot tabellen (görs ingen sortering kommer resultatet vanligen att presenteras i primärnyckelordning). SELECT DISTINCT Company FROM ORDER BY Company Ger företagsnamnen sorterade i bokstavsordning Company Ramirent Oy Telia B 41 GROUP BY Grupperar rader efter det kolumn-värde som anges Ta fram alla företag och hur många anställda varje företag har: SELECT Company, COUNT(Person) FROM GROUP BY Company Ger antalet anställda per företag i tabellen Company Telia B Ramirent Oy 1 42 21
GROUP BY med ny kolumnrubrik Ta fram alla företag och hur många anställda varje företag har: SELECT Company, COUNT(Person) S ntal FROM GROUP BY Company Ger antalet anställda per företag i tabellen Company ntal Telia B Ramirent Oy 1 4 GROUP BY och HVING HVING fungerar på grupper som WHERE fungerar på rader, dvs eliminerar grupper. Ta fram alla företag och hur många anställda varje företag har för de företag som har mer än 2 anställda: SELECT Company, COUNT(Person) S ntal FROM GROUP BY Company HVING COUNT(Person) > 2 Ger antalet anställda per företag i tabellen Company ntal Telia B 44 22
Mer om nästlade frågor (subselect) Vissa frågor kräver att man beräknar ett värde i databasen för att använda det i en WHERE-klausul. Detta kan endast lösas med en subselect (nåja en vy skulle också fungera). Ta fram alla företag som har fler anställda än Ramirent Oy har: SELECT Company, count(person) FROM GROUP BY Company HVING COUNT(Person)> (SELECT count(person) FROM WHERE Company = Ramirent Oy ) Company Telia B 45 UNION Lista alla personer som antingen väger mer än 60 kg eller äger en röd bil eller bådadera: CR Licencenr Colour Owner BC12 Blue Lisa 111 Red Lisa BB222 Red Oscar MMM11 Yellow Ben SELECT Owner S Pname FROM CR WHERE Colour = Red UNION SELECT Pname FROM PERSON WHERE Weight > 60 PName Weight Paddress Oscar 65 Solv. Eva 65 Snög. 2 SELECT PName FROM CR, PERSON WHERE Pname = Owner ND((Colour = Red ) OR (Weight > 60)) Varför är detta inte ett alternativ? 46 2
INTERSECT(SNITT) Lista alla personer som både äger en röd bil väger mer än 60 kg: lternativ SELECT Owner FROM CR WHERE Colour = Red INTERSECT SELECT Pname S Owner FROM PERSON WHERE Weight > 60 SELECT Owner FROM CR, PERSON WHERE Owner = Pname ND Weight > 60 ND Colour = Red 47 INSERT INTO PERSON VLUES( Eskil, 6, Isgränd 1 ) INSERT nvänds för att lägga till rader i redan existerande tabeller. Två sätt: antingen med specificerade värden eller via en SELECT-klausul: PERSON PName Weight Paddress COMPNY CName Founded Homepage Oscar 65 Solv. Telia B 2001 www.telia.se Ramirent Oy 1989 www.rr.fi Eva 65 Snög. 2 PERSON PName Weight Paddress Oscar 65 Solv. Eva 65 Snög. 2 Eskil 6 Isgränd 1 INSERT INTO (Person, Company) (SELECT DISTINCT(PName), DISTINCT(CName) FROM PERSON, COMPNY WHERE Paddress = Isgränd 1 ND CName = Telia B ) Eskil Telia B 48 24
PERSON DELETE FROM PERSON WHERE PName = Eskil DELETE nvänds för att ta bort rader i redan existerande tabeller: PName Weight Paddress Oscar 65 Solv. Eva 65 Snög. 2 Eskil 6 Isgränd 1 Ta bort personen Eskil Ta bort alla rader i tabellen person DELETE FROM PERSON PERSON PName Weight Paddress Oscar 65 Solv. Eva 65 Snög. 2 PERSON PName Weight Paddress 49 UPDTE nvänds för att ädra innehållet i ett eller flera attribut: PERSON PName Weight Paddress Oscar 65 Solv. Eva 65 Snög. 2 Eskil 6 Isgränd 1 Öka en persons vikt med 5 kg: UPDTE PERSON SET Weight = Weight + 5 WHERE PName = Eva PERSON PName Weight Paddress Oscar 65 Solv. Eva 70 Snög. 2 Eskil 6 Isgränd 1 50 25
VYER (VIEWS) för logiskt dataoberoende En vy är en mall genom vilken man ser en databas. En vy är dynamisk, dvs varje gång Man läser en vy (gör SELECT på vyn) ser man aktuella värden. En vy är inte en tabell och dess innehåll kommer inte att lagras på sekundärminne. Det som lagras är definitionen av vyn. Kurs Student Resultat Grupp IS:4 Kalle VG IS:4 Pelle G IS:4 Olle G B IS:4 Lisa U B 2i10 Kalle 5 1 2i10 Lisa 4 1 2i10 Oskar 2 2i10 Eskil U 2 Schemaläggaren vill bara kunna läsa attributen Kurs och Student Studenterna får bara läsa attributen Kurs och Student Lärare och studierektor behöver både kunna läsa och skriva hela tabellen 51 Vyer för logiskt dataoberoende Vyer kan definieras på en eller flera bastabeller och eller andra vyer. CRETE VIEW Student_vy S (SELECT Kurs, Student, Grupp FROM KURSTILLFÄLLE) CRETE VIEW Lärar_vy S (SELECT * FROM KURSTILLFÄLLE) CRETE VIEW Schemaplanerings_vy S (SELECT Kurs, Student FROM KURSTILLFÄLLE) Schemaläggaren vill bara kunna läsa attributen Kurs och Student Studenterna får bara läsa attributen Kurs, Student och Grupp Lärare och studierektor behöver både kunna läsa och skriva hela tabellen 52 26
Vyer för att förenkla långa SQL-satser Ta fram namn på alla personer som aldrig ägt en röd bil: SELECT PName FROM PERSON WHERE PName NOT IN (SELECT Owner FROM CR WHERE Colour = Red ) SELECT PName FROM PERSON WHERE PName NOT IN (SELECT * FROM Röd_vy) CRETE VIEW Röd_vy S SELECT PName FROM PERSON, CR WHERE PName = Owner ND Colour = Red ) CR Licencenr Colour Owner BC12 Blue Lisa 111 Red Lisa BB222 Red Oscar MMM11 Yellow Ben PName Ben Eva PName Weight Paddress Oscar 65 Solv. Ben 75 Bygatan 5 1 Eva 60 Snög. 2 27