IT i organisationer och Databasteknik, 2I-1033 HT2002. Relationsalgebra. Relationsalgebran är sluten: R 1 op R 2 R 3.



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

Relationsdatabasdesign 2I-4067 HT99. Relationsalgebra. som resultat!

IT i Organisationer och Databasteknik. Frågespråk mot relationsmodellen

Frågespråk mot relationsmodellen

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

Informationssystem och Databasteknik. Frågespråk mot relationsmodellen

08/11/13. Databasteknik och informationssystem DD1370 F3. Ett urval ur databasen bestäms av en SQL-fråga. Påminnelse: Deadline på tisdag

Grunderna i SQL del 1

Idag. Hur skapar vi och underhåller en databas? Index? Vad är det och varför behövs de? Behöver jag bry mig om index?

Idag. 1. En enkel databas. 2. Prata med databaser (frågepsråket SQL)

Snabbslumpade uppgifter från flera moment.

13/11/14. Databasteknik och informationssystem DD1370 F3. Ett urval ur databasen bestäms av en SQL-fråga. Påminnelse: Vad är en Databas?

Databasens består av: Tabell Kolumner fält Rader poster (varje post är unik)

Idag. Hur vet vi att vår databas är tillräckligt bra?

DOP-matematik Copyright Tord Persson. Bråktal Läs av vilka tal på tallinjen, som pilarna pekar på. Uppgift nr

Lathund, procent med bråk, åk 8

Skapa en databas. Skapa en tabell. Gör man antingen genom kommandot

konstanterna a och b så att ekvationssystemet x 2y = 1 2x + ay = b 2 a b

Databasutveckling Introduktion till SQL och TSQL

Föreläsning 8: Räkning. Duvhålsprincipen. Kombinatorik

Vi skall skriva uppsats

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

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

Träning i bevisföring

Databasspråket SQL - online.

Webb-bidrag. Sök bidrag på webben Gäller från

Skriva B gammalt nationellt prov

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

7. SAMHÄLLSORIENTERING ÅK 5

Modul 6: Integraler och tillämpningar

Sammanfattning på lättläst svenska

Övningar i SQL. SQLAccess.doc Ove Lundgren

Algebra, polynom & andragradsekvationer en pampig rubrik på ett annars relativt obetydligt dokument

Distribuerade Informationssystem VT-04

Lathund till Annonsportalen

Tentamen i Programmering grundkurs och Programmering C

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

Datorövning 2 Statistik med Excel (Office 2007, svenska)

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

ANVÄNDARHANDLEDNING FÖR

Kapitel 6. f(x) = sin x. Figur 6.1: Funktionen sin x. 1 Oinas-Kukkonen m.fl. Kurs 6 kapitel 1

Databasspråket SQL - online.

Kursplan i svenska. Därför tränar vi följande färdigheter under elevens skoltid i ämnet svenska: Tala, lyssna och samtala. År 1

Gissa det hemliga talet

TIMREDOVISNINGSSYSTEM

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

Frågespråk och SQL. nikos dimitrakas rum 2423

Riktlinjer - Rekryteringsprocesser inom Föreningen Ekonomerna skall vara genomtänkta och välplanerade i syfte att säkerhetsställa professionalism.

Får nyanlända samma chans i den svenska skolan?

Tabeller och kolumner SQL. Lägga till en ny post. Lägga till en ny post

ELEV- HANDLEDNING (Ansökan via webben)

Instruktioner för beställning och kontoadministration för abonnenter av inlästa läromedel

Statsbidrag för läxhjälp till huvudmän 2016

Förskolan Vårskogen, Svaleboskogen 7. Plan mot diskriminering och kränkande behandling

NATIONELLA MATEMATIKTÄVLING

Diskussionsfrågor till version 1 och 2

ÄT RÄTT NÄR DU TRÄNAR

Hur du arbetar med VFU-portfölj i Mondo. en lathund för student

Information sid 2 4. Beställning sid 5. Ändring/Nytt SIM sid 6. Avsluta abonnemang sid 7. Fakturafråga sid 8. Felanmälan/fråga sid 9.

Partnerskapsförord. giftorättsgods görs till enskild egendom 1, 2. Parter 3. Partnerskapsförordets innehåll: 4

Exempel på tentamensuppgifter i LMA100, del 1

Du ska nu skapa ett litet program som skriver ut Hello World.

Facit med lösningsförslag kommer att anslås på vår hemsida Du kan dessutom få dem via e-post, se nedan.

Handledning för digitala verktyg Talsyntes och rättstavningsprogram. Vital, StavaRex och SpellRight

Det flippade klassrummet hur uppfattas det av eleverna?

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.

Arbetsbeskrivning, att förbereda för studenternas registrering kommande termin. 1. Studenter antagna på fristående kurs 2

Två konstiga klockor

FRÅN A TILL Ö LäraMera Ab / och Allemansdata Ab / FRÅN A TILL Ö

Databasspråket SQL - online.

Idag: Dataabstraktion

Sammanfattning av kursdag 2, i Stra ngna s och Eskilstuna

SF1620 Matematik och modeller

Bilaga B Kartläggningsmaterial - Litteracitet Samtals- och dokumentationsunderlag avkodning, läsning, läsförståelse och skrivning

Övningshäfte Algebra, ekvationssystem och geometri

Mätningar på op-förstärkare. Del 3, växelspänningsförstärkning med balanserad ingång.

Föreläsning 5: Rekursion

Utveckla arbetsmiljö och verksamhet genom samverkan

Manual för BPSD registret. Version 6 /

Erfarenheter från ett pilotprojekt med barn i åldrarna 1 5 år och deras lärare

Introduktion. Den objektorienterade modellen Grundläggande begrepp Klass Klassen som abstraktion

Har vi lösningen för en bättre hemtjänst? Självklart.

Raindanceportalen 2005, manual bokföringsorder Bokföringsportalen. Manual för samordnare. Utbildning Ekonomiadministrativa enheten

Hävarmen. Peter Kock

Från min. klass INGER BJÖRNELOO

Tentamen i matematisk statistik (9MA241/9MA341/LIMAB6, STN2) kl 08-13

Nämnarens adventskalendern 2007

Att koda en magnetremsa i plastkortskrivare med inbyggd magnetkodare.

a n = A2 n + B4 n. { 2 = A + B 6 = 2A + 4B, S(5, 2) = S(4, 1) + 2S(4, 2) = 1 + 2(S(3, 1) + 2S(3, 2)) = 3 + 4(S(2, 1) + 2S(2, 2)) = = 15.

Hel tjänstledighet för att prova annan anställning inom Göteborgs universitet.

Användarmanual VX-webben

Möbiustransformationer.

OPTIMIZING THE LINE. CAB Group AB Stortorget 11, SE Örebro, Sweden Phone:

4-3 Vinklar Namn: Inledning. Vad är en vinkel?

Invandrade kvinnor i projektsamhället vad innebär det mångkulturella som projekt? Matilda Wrede-seminarium Salla Tuori

En lönerevision görs i flera steg; Initiering - Lönerevision Attestering - Skapa förmån - Uppdatera lön.

Lärarmaterial. Vad handlar boken om? Lgr 11 - Centralt innehåll och förmågor som tränas: Eleverna tränar följande förmågor: har lim pa skorna

Uppdrag: Huset. Fundera på: Vilka delar i ditt hus samverkar för att elen ska fungera?

Södervångskolans mål i svenska

Enkätresultat för elever i åk 9 i Borås Kristna Skola i Borås hösten Antal elever: 20 Antal svarande: 19 Svarsfrekvens: 95% Klasser: Klass 9

Transkript:

Primtiva operatorer projektion π selektion σ union differens - kryssprodukt X Relationsalgebra Tilldelning := Relationsalgebran är sluten: Med hjälp av dessa operatorer kan andra (icke-primitiva) operatorer definieras: Icke-primitiva operatorer R 1 op R 2 R relation relation relation theta-join θ ekvi-join naturlig join X snitt division ((R 1 op R 2) op R ) op R 4 Tar en eller två tabeller som argument (indata). Producerar en ny tabell som resultat! 1 av 55 Projektion π - Unär operator π 1, 2,...n (Relationsnamn) Vertikal delmängd av attribut NSTÄLLD Projektion innebär att välja ut ett antal attribut ur en relation. p,lön NSTÄLLD Projektion 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 5000 Eva Berg Parfym Lön Per Kvist 15000 Bo Gren 20000 Sten Rot 22000 Nils Hed 0000 Eva Berg 5000 attribut t s (π 1,2,...n (R)) = antalet attribut, dvs just här = n, π 1,2,...n (R) R, vanligen R Omordning av attribut möjligt via π π Lön, (NSTÄLLD) Lön 15000 20000 22000 0000 5000 Per Kvist Bo Gren Sten Rot Nils Hed Eva Berg 2 av 55

NSTÄLLD Selektion innebär att man väljer ut ett antal tupler ur en relation baserat på något villkor. s vd=parfym NSTÄLLD Selektion σ - Unär operator Horisontelll delmängd av rader σ villkor (R) Enkelt villkor: attribut θ attribut attribut θ värde, där θ {=,, <, >,, } Sammansatt villkor: villkor operator villkor där operator {NOT, ND, OR} Selektion 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 5000 Eva Berg Parfym Lön Chef vd Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Eva Berg 5000 Eva Berg Parfym t s (σ villkor (R)) = t s (R) σ villkor (R) R av 55 Kartesisk product B (eller ibland * B) ska tolkas som alla rader i kombinerade med alla rader i B a b c B x y B a x a y b x b y c x c y t s ( B) = t s () + t s (B) B = B 4 av 55

Kartesisk produkt, ett exempel till NSTÄLLD Lön Chef vd namn Våning 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 5000 Eva Berg Parfym VDELNING Leksaker 2 Livsmedel Parfym Skor 2 Trädgård 1 NSTÄLLD VDELNING Lön Chef vd namn Våning Per Kvist 15000 Eva Berg Parfym Per Kvist 15000 Eva Berg Parfym Per Kvist 15000 Eva Berg Parfym Per Kvist 15000 Eva Berg Parfym Per Kvist 15000 Eva Berg Parfym Och så vidare på samma sätt... Eva Berg 20000 Eva Berg Parfym Eva Berg 20000 Eva Berg Parfym Eva Berg 20000 Eva Berg Parfym Eva Berg 20000 Eva Berg Parfym Eva Berg 20000 Eva Berg Parfym Leksaker Livsmedel Parfym Skor Trädgård Leksaker Livsmedel Parfym Skor 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). 5 av 55 θ JOIN ( theta-join ) där θ {=,, <, >,, } NSTÄLLD vd Pia 5 Mia Ken VDELNING vd 5 Bröd 1 Ost Vin NSTÄLLD θ VDELNING nställd.vd = vdelning.vd nst. vd. vd vd namn Pia Mia Ken 5 5 Bröd Vin Vin t s (θb) = t s () + t s (B) θb B 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) Α θ θ-villkor B 6 av 55

NTURL JOIN NSTÄLLD vd VDELNING vd NSTÄLLD X VDELNING 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. 7 av 55 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 8 av 55

OUTER JOIN (S) id Ossi Karo Mindy Ras Pudel NULL B Bid Fido Emir Lady Ras Kanintax NULL X B.Ras=B.Ras id.ras Bid Ossi Fido B.Ras (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 (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 Ossi Fido NULL NULL Emir Kanintax NULL NULL Lady NULL 9 av 55 Övning i relationsalgebra NSTÄLLD(, Lön, Chef, vd) Vad innebär följande uttryck i naturligt språk? p (s Lön > 20000 (NSTÄLLD)) Skriv ett relationsalgebraiskt uttryck som ger namnen på cheferna för de anställda som tjänar mer än 25000 på skoavdelningen. NSTÄLLD 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 5000 Eva Berg Parfym VDELNING Lön Chef vd namn Våning Leksaker 2 Livsmedel Parfym Skor 2 Trädgård 1 π Chef (σ Lön > 25000 ND vd= Sko (NSTÄLLD)) 10 av 55

Övning i relationsalgebra : NSTÄLLD(, Lön, Chef, vd) VDELNING(namn, Våning) Skriv ett relationsalgebraiskt uttryck som ger namn och lön för de anställda som arbetar på andra våningen. Metod I (flera steg): Rätt_avdelningar σ Våning=2 (VDELNING) Rätt_anställda NSTÄLLD ΚΚ X vd=namn Rätt_avdelningar Rät_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))) Rå-operatorn: ρ(attributnamn 1, attributnamn 2,..., attributnamn n )(Relation) 11 av 55 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) attributen måste heta likadant och komma i samma ordning 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? UNION B? UNION B! B B B a b a b a b a b c a b a b a 1 a x a 1 a 1 m a x b x a 2 a y a 2 a 2 n a y a m b 2 b x b 2 b 2 o b x b x 12 av 55

UNION Fido Karo Mindy Ossi Ras Pudel Dvärgtax B Fido Emir Lady Morris Ras Schäfer Welsh Corgie lla rader som finns i plus alla rader som finns i B B Fido Karo Mindy Ossi Emir Lady Morris Ras Pudel Dvärgtax Schäfer Welsh Corgie Observation: Β = Β Α t s ( B) = t s () = t s (B) B + B max(, B ) 1 av 55 SNITT (INTERSECT) Fido Karo Mindy Ossi Ras Pudel Dvärgtax B Fido Emir Lady Morris Ras Schäfer Welsh Corgie B Fido Ras lla rader som finns i både och B Observation I : Β = Β Α t s ( B) = t s () = t s (B) B min(, B ) 14 av 55

DIFFERENCE (MINUS) Fido Karo Mindy Ossi Ras Pudel Dvärgtax B Fido Emir Lady Morris Ras Schäfer Welsh Corgie MINUS B Karo Mindy Ossi Ras Pudel Dvärgtax lla tupler som finns i men inte i B t s ( B) = t s () = t s (B) B Observation: - B B - 15 av 55 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 aldrig ätit glass PERSON GLSS Glass Päronsplit ÄTNDE Glass Päronsplitt Päronsplit 1. Skapa en relation som som innehåller alla personer som har ätit glass: GLSSÄTRE := π (ÄTNDE) 2. Dra sen bort denna mängd tupler från relationen PERSON (dvs mängden av alla personer): LDRIG_ÄTIT_GLSS := PERSON - GLSSÄTRE Observera att man måste projicera ut från ÄTNDE eftersom differens kräver att de ingående relationerna ska vara unionskompatibla! 16 av 55

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. o. 17 av 55 R Resultat 2 1 1 2 a 1 a 1 1 a 2 a 2 1 a a 2 a 1 2 a 2 S 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 t s ( B) = t s () - t s (B) B 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) 18 av 55

R S B B x m m x n n o x o y m y n S X Kandidatvärden z m B z n m x z o m y m z n x Kandidatvärden n y n z o x x o y y o z z Kvot kan skrivas om i termer av andra relationsalgebraiska operatorer: Kandidatvärden π (R) Kombinering π ((S X Kandidatvärden) - R) Kvoten Kandidatvärden - Kombinering Kombinering y Kvoten x z R S x z 19 av 55 Kvot fortsättning... Kvot är användbart för frågor av typ: Ta fram alla som gjort allt/har alla egenskaperna etc. T ex Ta fram alla som ätit av alla glass-sorterna ÄTNDE Glass Päronsplitt Päronsplit GLSS Glass Päronsplit ÄTNDE GLSS KVOT kallas även DIVISION 20 av 55

Sammanfattning av några relationsalgebraiska operatorer UNION INTERSECT(= SNITT) DIFFERENCE B B B UNION B INTERSECT B DIFFERENCE B ( MINUS B) lla rader som förekommer i eller B PROJECTION lla rader som förekommer i både och B De rader som förekommer i men inte i B SELECTION 21 av 55 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) 1986 antogs en internationell standard för data sub-language för relations-dbms (SQL). 1992 publicerade ISO en standard som kallas SQL2 (eller SQL92). Denna standard överensstämde med aktuella SQL-dialekter för de vanligaste DBMS. Ny standard: SQL. 22 av 55

SQL - Structured Query Language SELECT, Lön FROM NSTÄLLD WHERE Lön > 17000 p X s SQL kan uttrycka allt som går att uttrycka i relationsalgebran - språket är relationally complete 2 av 55 SQL-DML SELECT, utsökning INSERT, lägga in (vanligen rader i en tabell) UPDTE, ändra DELETE, ta bort 24 av 55

SELECT SELECT, vd FROM NSTÄLLD WHERE Lön > 25000 NSTÄLLD Lön Chef vd namn Våning 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 5000 Eva Berg Parfym VDELNING Leksaker 2 Livsmedel Parfym Skor 2 Trädgård 1 Resultat: Nils Hed Eva Berg vd Skor Parfym 25 av 55 NSTÄLLD WHERE predikatet kan innehålla: jämförelseoperatorerna =, <>, > >=, <, =< logiska operatorerna ND, OR och NOT paranteser kan användas för att styra utvärderingen BETWEEN för att testa intervall Lön Chef vd namn Våning 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 5000 Eva Berg Parfym VDELNING Leksaker 2 Livsmedel Parfym Skor 2 Trädgård 1 SELECT, Våning FROM NSTÄLLD, VDELNING WHERE vd = namn ND Lön BETWEEN 22000 ND 0000 Resultat: Våning Sten Rot Nils Hed 1 26 av 55

Kvalificerade attributnamn Om ett attributnamn förekommer i flera av de berörda tabellerna måste det kvalificeras med tabellnamnet: NSTÄLLD Lön Chef namn vd namn Våning 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 5000 Eva Berg Parfym VDELNING Leksaker 2 Livsmedel Parfym Skor 2 Trädgård 1 SELECT, Våning FROM NSTÄLLD, VDELNING WHERE NSTÄLLD.namn = VDELNING.namn ND Lön BETWEEN 22000 ND 0000 27 av 55 lias Om tabellnamnen är långa kan aliasnamn införas genom att ge en tabell ett alias utan att kommatecken skrivs i tabellistan: SELECT 1., 2.Våning FROM NSTÄLLD 1, VDELNING 2 WHERE 1.namn = 2.namn ND Lön > 25000 28 av 55

lias fortsättning lias är även användbart när man vill joina en tabell med sig själv: Ta fram namn och lön på alla anställda som har en chef som tjänar mer än 0000 kr: SELECT 1., 1.Lön FROM NSTÄLLD 1, NSTÄLLD 2 WHERE 1.Chef = 2. ND 2.Lön > 0000 NSTÄLLD VDELNING Lön Chef namn vd namn Våning 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 5000 Eva Berg Parfym Leksaker 2 Livsmedel Parfym Skor 2 Trädgård 1 Resultat: Per Kvist Bo Gren Nils Hed Eva Berg Lön 15000 20000 0000 5000 29 av 55 Nästlade frågor Ta fram namn och lön på alla anställda som har en chef som tjänar mer än 0000 kr: SELECT, Lön FROM NSTÄLLD WHERE Chef IN (SELECT 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! (se föregående fråga) 0 av 55

Nästlade frågor motsvarande aldrig, inga etc. Ta fram namn på alla personer som aldrig ätit glassen Päronsplitt SELECT WHERE NOT IN (SELECT WHERE Glass= Päronsplitt ) SELECT WHERE Glass Päronsplitt SELECT EXCEPT SELECT WHERE Glass = Päronsplitt lternativ ÄTNDE Glass Päronsplitt Päronsplit 1 av 55 Nästlade frågor med NOT EXISTS Ta fram namn på alla som ätit av alla glasstyperna: SELECT Ä. Ä WHERE NOT EXISTS (SELECT Glass FROM GLSS WHERE Glass NOT IN (SELECT Glass FORM ÄTNDE WHERE = Ä.)) Det får inte existera någon glass i GLSS som inte ätits av Ä. ÄTNDE Glass Resultat: Päronsplitt Päronsplit GLSS Glass Päronsplit 2 av 55

Nästlade frågor forts. Ta fram namn på alla som ätit samma glassar som : SELECT Ä. Ä WHERE NOT EXISTS (SELECT Glass WHERE = ND Glass NOT IN (SELECT Glass WHERE = Ä.)) ÄTNDE Glass Päronsplitt Päronsplit GLSS Glass Päronsplit Det får inte existera någon glass som ätit som inte den vi söker ätit. Hmm... Räcker detta? av 55 SELECT Ä. Ä WHERE NOT EXISTS (SELECT Glass WHERE = ND Glass NOT IN (SELECT Glass WHERE = Ä.)) ND NOT EXISTS (SELECT Glass WHERE = Ä. ND Glass NOT IN (SELECT Glass WHERE = )) Nästlade frågor forts. Ta fram namnen på de som ätit samma glassar som ätit: Det får inte existerar någon glass som ätit som inte de vi söker ätit. Det får heller inte existera någon glass som de vi söker ätit som inte ätit. Resultat: Ingen hade ätit precis de glassar ätit (utom ). 4 av 55

Vyer kan göra det lite enklare CRETE VIEW s_glassar S (SELECT Glass WHERE = ) SELECT Ä. WHERE NOT EXISTS (SELECT Glass FROM s_glassar WHERE Glass NOT IN (SELECT Glass WHERE = Ä.)) ND NOT EXISTS (SELECT Glass WHERE = Ä. ND Glass NOT IN s_glassar) 5 av 55 DISTINCT SQL rensar inte duplikat automatiskt (vilket ju operatorerna i relationsalgebra gjorde). För att eliminera dubletter anges DISTINCT. Ta fram alla som ätit minst en glass som även ätit: SELECT DISTINCT() From ÄTNDE WHERE Glass IN s_glassar SELECT From ÄTNDE WHERE Glass IN s_glassar Resultat: Resultat: 6 av 55

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 7 av 55 Exempel på aggregat-funktioner SELECT COUNT(*) Ger antalet rader i tabellen ÄTNDE Resultat: 8 SELECT COUNT(DISTINCT ) Ger antalet (unika) personer i tabellen ÄTNDE Resultat: 8 av 55

ORDER BY En relation (tabell) saknar ju ordning, men man kan sortera resultatet (vanligen presenteras resultatet i primärnyckelordning om man läser från en tabell). SELECT DISTINCT ORDER BY Ger alla namnen sorterade i bokstavsordning Resultat: 9 av 55 GROUP BY Grupperar rader efter det värde som anges. Ta fram alla personer och hur mycket glass de ätit per person: SELECT, count(glass) GROUP BY Resultat: 2 40 av 55

Ge ny kolumnrubrik till resultat Grupperar rader efter det värde som anges. Ta fram alla personer och hur mycket glass de ätit per person: SELECT, count(glass) S Glass_antal GROUP BY Resultat: Glass_antal 2 41 av 55 GROUP BY OCH HVING HVING fungerar på grupper som WHERE fungerar på rader, dvs elimenerar grupper Ta fram alla personer som ätit mer än 2 glassar: SELECT, count(glass) GROUP BY HVING COUNT(Glass) > 2 Resultat: 42 av 55

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 personer som ätit fler glassar än ätit SELECT, count(glass) Resultat: GROUP BY HVING COUNT(Glass) > (SELECT count(glass) WHERE NMN = ) 4 av 55 UNION Ta fram alla avdelningar som ligger på plan 1 eller avdelningar där personer är antällda som tjänar mer än 20000 eller båda delar: lternativ SELECT namn FROM VDELNING WHERE Våning = 1 UNION SELECT namn FROM NSTÄLLD WHERE Lön > 20000 SELECT VDELNING.namn FROM VDELNING, NSTÄLLD WHERE VDELNING.namn = NSTÄLLD.namn ND Våning = 1 OR Lön > 20000 NSTÄLLD(, Lön, Chef, namn) VDELNING(namn, Våning) 44 av 55

INTERSECT(SNITT) Ta fram alla avdelningar som ligger på plan 1 OCH där det finns personer anställda som tjänar mer än 20000: lternativ NSTÄLLD(, Lön, Chef, namn) VDELNING(namn, Våning) SELECT namn FROM VDELNING WHERE Våning = 1 INTERSECT SELECT namn FROM NSTÄLLD WHERE Lön > 20000 SELECT VDELNING.namn FROM VDELNING, NSTÄLLD WHERE VDELNING.namn = NSTÄLLD.namn ND Våning = 1 ND Lön > 20000 45 av 55 NSTÄLLD.namn EXCEPT(MINUS) Ta fram alla avdelningar som inte har några personer som tjänar mer än 0000: lternativ NSTÄLLD(, Lön, Chef, namn) VDELNING(namn, Våning) SELECT namn FROM VDELNING EXCEPT SELECT namn FROM NSTÄLLD WHERE Lön > 0000 SELECT namn FROM VDELNING WHERE namn NOT IN (SELECT namn FROM NSTÄLLD WHERE Lön > 0000) 46 av 55

Textsträngsmatchning Ta fram alla anställda vars namn börjar på bokstaven n: SELECT FROM NSTÄLLD WHERE LIKE n% Kolumnnamn LIKE textkonstant, där textkonstant kan utgöras av % (svarar mot 0 eller flera tecken) och/eller _ (svarar mot ett godtyckligt tecken) och/eller övriga tecken (som motsvarar sig själva). Mari_ K%sson svarar mot en textsträng som börjar på Mari och följs av minst ett godtyckligt tecken, ett blanktecken, ett K, samt ett godtyckligt antal valfria tecken avslutat med bokstäverna sson. Exempel: Karlsson, Marie Klasson men också Mari Ksson. I t ex ccess svarar % mot * och _mot? 47 av 55 INSERT nvänds för att lägga till rader i redan existerande tabeller: Två sätt: antingen med specificerade värden eller via SELECT: INSERT INTO GLSS VLUES( Dajmstrut ); INSERT INTO ÄTNDE VLUES(, Dajmstrut ) Om man tänker sig att man har en annan tabell (benämnd statistik) som innehåller på personer och deras genomsnittliga ätande kan man skapa INSERT via SELECT INSERT INTO statistik(, snittkvant) SELECT, avg(glass) GROUP BY Vad händer om de två INSERT-satserna anropas i omvänd ordning? 48 av 55

DELETE nvänds för att ta bort rader i redan existerande tabeller: Ta bort glassen Dajmstrut : DELETE FROM GLSS WHERE Glass = Dajmstrut Vad händer om de med de rader i ÄTNDE som refererar till Dajmstrut? Ta bort alla rader i tabellen ÄTNDE: DELETE 49 av 55 UPDTE Betraka tabellan GLSS_I_LGER till nedan. Om en leverans med 200 päron- split anländer samtidigt som man vill rea just päronsplit kan följande UPDTEsats exekveras. nvänds för att ändra innehållet i ett eller flera attribut i rader i redan existerande tabeller: UPDTE GLSS_I_LGER SET ntal_i_lager = ntal_i_lager + 200, Pris = 6.00 WHERE Glass = Päronsplit GLSS_I_LGER (före UPDTE) Glass Päronsplit ntal_i_lager 250 00 700 Pris 7.00 15.00 11.00 GLSS_I_LGER (efter UPDTE) Glass Päronsplit ntal_i_lager 450 00 700 Pris 6.00 15.00 11.00 50 av 55

Några slutord om vyer (VIEWS) En vy är en mall genom vilken man ser en databas. En vy är dynamisk, dvs varje gång man gör SELECT på en vy ser man aktuella värden. En vy är inte en ny 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 IS:4 IS:4 IS:4 GKD GKD GKD GKD GKD Kalle Olle Kalle Olle Eva Knut VG G U VG VG G G G G Grupp Grupp GruppB GruppB Grupp1 Grupp2 Grupp2 Grupp1 Grupp2 Schemaläggaren vill bara kunna läsa Kurs och Student Studenterna får bara läsa Kurs, Student och Grupp Lärarna och studierektor behöver både kunna läsa och skriva hela tabellen 51 av 55 Några slutord om vyer (VIEWS) 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 Kurs och Student Studenterna får bara läsa Kurs, Student och Grupp Lärarna och studierektor behöver både kunna läsa och skriva hela tabellen 52 av 55

Vy-exempel Vilka har aldrig ätit Päronsplit män ändå ätit minst en likadan glass som : Create VIEW EJPÄRON S (SELECT, Glass FROM Glassätande WHERE NOT IN (SELECT FROM Glassätande WHERE Glass= Päronsplit )) CRETE VIEW STINS_GLSSR S (SELECT Glass FROM Glassätande WHERE = ) EJPÄRON Glass SELECT EP. FROM EJPÄRON EP, STINS_GLSSR SG WHERE EP.Glass=SG.Glass STINS_GLSSR Glass Päronsplit 5 av 55 Fördelar med vyer visst logiskt dataoberoende samma data kan betraktas av olika användare på olika sätt (på samma gång) nvändaren kan få en förenklad bild av databasen - mindre komplex DML flexibel behörighetskontroll 54 av 55

Mera schema-ddl CRETE TBLE EMPLOYEE (EID VRCHR(11) NOT NULL UNIQUE, BID CHR(7) NOT NULL, PRIMRY KEY(EID), FOREIGN KEY(BID) REFERENCES BUSINESS ON DELETE CSCDE ON UPDTE CSCDE) DDL: DML: DCL: CRETE SCHEM CRETE TBLE CRETE VIEW CRETE INDEX DROP TBLE DROP VIEW DROP INDEX LTER TBLE SELECT INSERT UPDTE DELETE GRNT REVOKE Föreläsning 7! 55 av 55