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

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

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

Informationssystem och Databasteknik. Frågespråk mot relationsmodellen

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

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

Övningar i SQL. SQLAccess.doc Ove Lundgren

Frågespråk mot relationsmodellen

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

Databasspråket SQL - online.

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

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

Databasspråket SQL - online.

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

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

Grunderna i SQL del 1

Föreläsning 2: Översikt över ett databassystem

Databasspråket SQL - online.

Structured Query Language (SQL)

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

D1. Create Domain TEXT30 char(30) Default INGET VÄRDE! ;

Relationsmodellen och syntetisk databasdesign

SQLs delar. Idag. Att utplåna en databas. Skapa en databas

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

Databasutveckling Introduktion till SQL och TSQL

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

Tentamen. Databasmetodik Lördag 27 september 2014 kl

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

Databasspråket SQL - online.

Structured query language (SQL)

Databasspråket SQL - online.

Idag. Hur skapar vi och underhåller en databas? DD1370 (Föreläsning 4) Databasteknik och informationssystem 7,5 hp Hösten / 20

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

Föreläsning 5: Relationsmodellen

Tentamen i Databasteknik

Karlstads Universitet, Datavetenskap 1

EMPS(NAME, SALARY, DEPT)

Informationssystem och Databasteknik

Tentamen Databasmetodik DB:DSK/FK/DVK/ATD/SP/EIT mfl. äldre kurstillfällen 8 augusti 2013 kl. 9-13

Databaser. Vad du ska lära dig: Ordlista

Analytisk relationsdatabasdesign

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

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.

DDL Kommandon CREATE/DROP Database CREATE /ALTER/DROP Table ALTER/ADD/DROP Column CREATE /ALTER/DROP Index

Idag. Exempel. Exempel modellen (1) Exempel...

Labb LIVE. Exempelkod från föreläsningen. Plushögskolan Frågeutveckling inom MSSQL - SU14

Databaser - Design och programmering. Kursöversikt. Exempel: telefonbok. Varför databaser?

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

! Teori och praktik. ! Ändringar från förra året. ! Examination (tenta, projekt) LiU. ! Varför ni? ! Varför överhuvudtaget? LiU

Exempel-Tentamen III

Databaser och. SQL, utsökningar mot flera tabeller TENTA. # radnr (#) studnr (#) kursnr * tentadatum * betyg

Databaser och. SQL, utsökningar mot en tabell

Design och underhåll av databaser

TER3. Försättsblad till skriftlig tentamen vid Linköpings universitet G28 TEN1 Webprogrammering och databaser Tentamen IDA 1 (7)

Vad är SQL? Introduktion till SQL

732G16: Databaser - Design och programmering

Grunderna i SQL del 1

1. SQL 2. Utsökningar mot flera tabeller. 4. IN-operatorn 5. Join 6. Kartesisk produkt 7. Tabellalias

Tentamen i Databasteknik

WCMS-15, Webbutvecklare CMS

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

3. Dynamiska webbplatser, 20 Yhp (4 v)

Labb LABB 1. Databassagan och en rundtur i databasers märkliga värld. Plushögskolan Frågeutveckling inom MSSQL - SU14

Tentamen i Databasteknik

Databaser - Design och programmering

Vyer, Prepared Statements, Triggers

Lösningsförslag till fiktiv tentamen för DD1370 Databasteknik och informationssystem

Lösningar till tentamen i EDAF75

Databasföreläsning. Del 2 lagrade procedurer, vyer och transaktioner

Föreläsning 3 Transformation från konceptuell datamodell till relationsschema ( Syntetisk databasdesign ) Vad är ett databashanteringssystem?

Databaser och Datamodellering Foreläsning IV

Laboration SQL. Kom igång.

IT i organisationer och databasteknik

Lösningsförslag, tentamen i Databaser

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

DVA234 Databaser. Dag Nyström, Introduktion till databaser och MS SQL Server

Sample exam questions. Database exam TIG058

Uppstart Inloggning SSMS Skapa Databas Skapa Tabell Skapa Diagram, Fk, RI Hantering av Index, Pk, Fk, Ix Constraints Beräknande fält Några funktioner

Starta MySQL Query Browser

Databasteknik. Vad är. Vad är databaser bra till? data? föreläsare: Kjell Lindqvist. och NADA. databaser? och. vad är de bra för?

Disposition. 1. Kopplingen mellan Processanalys (DFDdiagram) 2. Treskikts Client-Server arkitektur (Fig 1.8) 3. Data layer

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

Prova på-laboration i SQL

Föreläsning 5 Dagens föreläsning går igenom

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

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

Skapa exempeldatabasen

I denna laboration skriver jag inte ut resultatet på de flesta frågorna utan du kör dem själv i din miljö.

Tentamen. i Databasteknik. lördagen den 13 mars Tillåtna hjälpmedel: Allt upptänkligt material

Lösningsförslag till Tentamen,

För att XCOPY i SQL Server Express ska fungera måste data och logg ligga i samma mapp, vilket naturligtvis inte är så bra.

INNEHÅLL. Historik Vad är SQL Språkuppbyggnad SELECT Operatorer Logiska/Jämförelse SELECT med Alias och JOIN INSERT UPDATE DELETE

1.Lär känna MS SQL Observera. Tips. Förberedelse

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

Databaser och SQL - en kort introduktion

VAD GÖR DU / VEM ÄR DU?

Relationskalkyl (RK)

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

Sätta upp e-post server Ubuntu 14.04, del 1 installation av programvara, konfiguration av mysql och Postfix

Transkript:

Relationsalgebra Relationsalgebra Relationsalgebran r ett formellt sprâk fˆr att extrahera data ur relationer. SprÂket r uppbyggt av ett litet antal operatorer. Tar en eller två tabeller De primitiva operatorerna r som argument (indata). Producerar en ny tabell ï Selektion som resultat! ï Projektion ï Union ï Differens ï Kartesisk produkt Med hjälp av dessa operatorer kan andra operatorer som t ex division och snitt definieras. 1 av 50

UNION INTERSECT(= SNITT) DIFFERENCE A B A B A B A UNION B A INTERSECT B A DIFFERENCE B (A MINUS B) Alla rader som förekommer i A eller B PROJECTION Alla rader som förekommer i både A och B De rader som förekommer i A men inte i B SELECTION 2 av 50

Selektion ANSTƒLLD Selektion inneb r att man v ljer ut ett antal tupler ur en relation baserat pâ nâgot villkor. σ Avd =Parfym ANSTƒLLD Namn Lˆn Chef Avd Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym Namn Lˆn Chef Avd Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Eva Berg 35000 Eva Berg Parfym 3 av 50

Projektion ANSTƒLLD Projektion inneb r att v lja ut ett antal attribut ur en relation. Namn Lˆn Chef Avd Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym Namn Lˆn π Namn,Lˆn ANSTƒLLD Per Kvist 15000 Bo Gren 20000 Sten Rot 22000 Nils Hed 30000 Eva Berg 35000 4 av 50

Kartesisk product A X B (eller ibland A * B) ska tolkas som alla rader i A kombinerade med alla rader i B A a b c B x y A X B a x a y b x b y c x c y 5 av 50

Kartesisk produkt ett exempel till ANSTÄLLD AVDELNING Namn Lˆn Chef Avd Anamn VÂning Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym Leksaker 2 Livsmedel 3 Parfym 3 Skor 2 Tr dgârd 1 ANSTÄLLD X AVDELNING Namn Lön Chef Avd Anamn 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 3 3 2 1 2 3 3 2 1 Totalt har ANSTÄLLD X AVDELNING 25 st rader! (ANSTÄLLD har 5 rader och AVDELNING har 5 rader = totalt 5*5 st rader). 6 av 50

JOIN ANSTÄLLD Namn Avd Avd ANamn Pia Mia Ken 5 3 3 AVDELNING 5 1 3 Bröd Ost Vin ANSTÄLLD X AVDELNING Anställd.Avd = Avdelning.Avd Namn Anst. Avd. Avd Avd Anamn Pia Mia Ken 5 3 3 5 3 3 Bröd Vin Vin Här bildas den nya tabellen genom att matcha kolumnvärden (här kolumen Avd) från två tabeller. I en JOIN kan jämförelsevillkoret var > >= < <= <> =. Om jämförelsevillkoret är = talar man om en equi-join. 7 av 50

NATURAL JOIN ANSTÄLLD AVDELNING Namn Avd Avd ANamn ANSTÄLLD X AVDELNING Namn Avd Anamn Pia 5 5 Bröd Pia 5 Bröd Mia 3 1 Ost Mia 3 Vin Ken 3 3 Vin Ken 3 Vin En NATURAL JOIN är en EQUI-JOIN där man projicerat bort ett av de ingående JOIN-attributen (här tar vi bort dupliceringen av JOIN-attributet Avd ). En NATURAL JOIN förutsätter att JOIN-attributet (attributen) heter likadant i de två tabeller som ska joinas. 8 av 50

vning i relationsalgebra ANSTƒLLD( Namn, Lˆn, Chef, Avd ) Vad inneb r fˆljande uttryck i naturligt sprâk? π Namn (σ Lˆn > 20000 (ANSTƒLLD)) Skriv ett relationsalgebraiskt uttryck som ger namnen pâ cheferna fˆr de anst llda som tj narmer n25000 pâ skoavdelningen. ANSTÄLLD AVDELNING Namn Lˆn Chef Avd Anamn VÂning Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym Leksaker 2 Livsmedel 3 Parfym 3 Skor 2 Tr dgârd 1 9 av 50

Relationsalgebra övning : Ta fram namnen på alla chefer över anställda på skoavdelningen som tjänar mer än 20000: π Chef (σ Lön>20000 AND Avd= Sko (ANSTÄLLD)) alternativt: π Namn (ANSTÄLLD) X π Chef (σ Lön>20000 AND Avd= Sko (ANSTÄLLD) 10 av 50

vning i relationsalgebra ANSTƒLLD( Namn, Lˆn, Chef, Avd ) AVDELNING( Anamn, VÂning) Skriv ett relationsalgebraiskt uttryck som ger namn och lˆn fˆr de anst llda som arbetar pâ andra vâningen. π Namn, Lön (ANSTÄLLD X σ Våning=2 (AVDELNING)) ANSTÄLLD.Avd=AVDELNING.Anamn 11 av 50

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 lika många kolumner och där de par av kolumner som motsvarar varandra har samma domän. 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). A A.a A.b a 1 a 2 b 2 A UNION B? B B.a B.b a x a y b x A A UNION B? A.a A.b a 1 a 2 b 2 B B.a B.b B.c a 1 m a 2 n b 2 o A UNION B! A A.a A.b a x a y b x B B.a B.b b x a m b x 12 av 50

UNION A Namn Fido Karo Mindy Ossi Ras Tax Tax Pudel Dvärgtax B Namn Fido Emir Lady Morris Ras Tax Tax Schäfer Welsh Corgie A UNION B Namn Fido Karo Mindy Ossi Emir Lady Morris Ras Tax Tax Pudel Dvärgtax Tax Schäfer Welsh Corgie 13 av 50

SNITT (INTERSECT) A Namn Fido Karo Mindy Ossi Ras Tax Tax Pudel Dvärgtax B Namn Fido Emir Lady Morris Ras Tax Tax Schäfer Welsh Corgie A SNITT B Namn Ras Fido Tax 14 av 50

DIFFERENCE (MINUS) A Namn Fido Karo Mindy Ossi Ras Tax Tax Pudel Dvärgtax B Namn Fido Emir Lady Morris Ras Tax Tax Schäfer Welsh Corgie A MINUS B Namn Karo Mindy Ossi Ras Tax Pudel Dvärgtax 15 av 50

A B x m x n x o y m y n z m z n z o B m n o Kvot R S Vi har två relationer R och S. R KVOT S A 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 A i R. Vilka kolumn-värden kommer med i kolumnen A? Jo alla de A-värden i R som är relaterade till ALLA B- värden i S. I vårt fall är detta sant för A-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. A-värdet y kommer inte med eftersom det saknar ett B-värde. 16 av 50

Kvot fortsättning... Kvot är användbart för frågor av typ: Ta fram alla personer som ätit av alla glassorterna ÄTANDE Namn Glass Maria Maria Maria Pelle Pelle Stina Stina Stina Päronsplitt Vaniljpuck Storstrut Vaniljpuck Storstrut Vaniljpuck Storstrut Päronsplit GLASS Glass Päronsplit Storstrut Vaniljpuck ÄTANDE KVOT GLASS Namn Maria Stina KVOT kallas även DIVISION 17 av 50

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. En ny standard SQL3 är på väg. 18 av 50

SQL - Structured Query Language SELECT Namn, Lˆn π FROM ANSTƒLLD X WHERE Lˆn > 17000 σ SQL kan uttrycka allt som går att uttrycka i relationsalgebran - språket är relationally complete 19 av 50

SQL-DML SELECT, utsökning INSERT, lägga in (vanligen rader i en tabell) UPDATE, ändra DELETE, ta bort 20 av 50

SELECT SELECT Namn, Avd FROM ANSTÄLLD WHERE Lön > 25000 ANSTÄLLD Namn Lˆn Chef Avd Anamn VÂning Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym AVDELNING Leksaker 2 Livsmedel 3 Parfym 3 Skor 2 Tr dgârd 1 Resultat: Namn Nils Hed Eva Berg Avd Skor Parfym 21 av 50

WHERE predikatet kan innehålla: jämförelseoperatorerna =, <>, > >=, <, =< logiska operatorerna AND, OR och NOT paranteser kan användas för att styra utvärderingen BETWEEN för att testa intervall ANSTÄLLD AVDELNING Namn Lˆn Chef Avd Anamn VÂning SELECT Namn, Våning FROM ANSTÄLLD, AVDELNING WHERE Avd = Anamn AND Lön BETWEEN 22000 AND 30000 Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym Leksaker 2 Livsmedel 3 Parfym 3 Skor 2 Tr dgârd 1 Resultat: Namn Våning Sten Rot Nils Hed 3 1 22 av 50

Kvalificerade attributnamn Om ett attributnamn förekommer i flera av de berörda tabellerna måste det kvalificeras med tabellnamnet: ANSTÄLLD AVDELNING Namn Lˆn Chef Anamn Avd Anamn VÂning Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym Leksaker 2 Livsmedel 3 Parfym 3 Skor 2 Tr dgârd 1 SELECT Namn, Våning FROM ANSTÄLLD, AVDELNING WHERE ANSTÄLLD.Anamn = AVDELNING.Anamn AND Lön BETWEEN 22000 AND 30000 23 av 50

Alias Om tabellnamnen är långa kan aliasnamn införas genom att ge en tabell ett alias utan att kommatecken skrivs i tabellistan: SELECT A1.Namn, A2.Våning FROM ANSTÄLLD A1, AVDELNING A2 WHERE A1.Anamn = A2.Anamn AND Lön > 25000 24 av 50

Alias fortsättning Alias ä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 30000 kr: SELECT A1.Namn, A1.Lön FROM ANSTÄLLD A1, ANSTÄLLD A2 WHERE A1.Chef = A2.Namn AND A2.Lön > 30000 ANSTÄLLD Namn Lˆn Chef Anamn Avd Anamn VÂning Per Kvist 15000 Eva Berg Parfym Bo Gren 20000 Eva Berg Parfym Sten Rot 22000 Nils Hed Skor Nils Hed 30000 Eva Berg Skor Eva Berg 35000 Eva Berg Parfym AVDELNING Leksaker 2 Livsmedel 3 Parfym 3 Skor 2 Tr dgârd 1 Resultat: Namn Per Kvist Bo Gren Nils Hed Eva Berg Lön 15000 20000 30000 35000 25 av 50

Nästlade frågor Ta fram namn och lön på alla anställda som har en chef som tjänar mer än 30000 kr: SELECT Namn, Lön FROM ANSTÄLLD WHERE Chef IN (SELECT Namn FROM ANSTÄLLD WHERE Lön > 30000) 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) 26 av 50

Nästlade frågor med NOT EXISTS Ta fram namn på alla som ätit av alla glasstyperna: SELECT Ä.Namn FROM ÄTANDE Ä WHERE NOT EXISTS (SELECT Glass FROM GLASS WHERE Glass NOT IN (SELECT Glass FORM ÄTANDE WHERE Namn = Ä.Namn)) Det får inte existera någon glass i GLASS som inte ätits av Ä.Namn ÄTANDE Namn Glass Maria Maria Maria Pelle Pelle Stina Stina Stina Resultat: Päronsplitt Vaniljpuck Storstrut Vaniljpuck Storstrut Vaniljpuck Storstrut Päronsplit Namn Maria Stina GLASS Glass Päronsplit Storstrut Vaniljpuck 27 av 50

Nästlade frågor forts. Ta fram namn på alla som ätit samma glassar som Pelle: SELECT Ä.Namn FROM ÄTANDE Ä WHERE NOT EXISTS (SELECT Glass FROM ÄTANDE WHERE Namn = Pelle AND Glass NOT IN (SELECT Glass FROM ÄTANDE WHERE Namn = Ä.Namn)) ÄTANDE Namn Glass Maria Maria Maria Pelle Pelle Stina Stina Stina Päronsplitt Vaniljpuck Storstrut Vaniljpuck Storstrut Vaniljpuck Storstrut Päronsplit GLASS Glass Päronsplit Storstrut Vaniljpuck Det får inte existera någon glass som Pelle ätit som inte den vi söker ätit. Hmm... Räcker detta? 28 av 50

SELECT Ä.Namn FROM ÄTANDE Ä WHERE NOT EXISTS (SELECT Glass FROM ÄTANDE WHERE Namn = Pelle AND Glass NOT IN (SELECT Glass FROM ÄTANDE WHERE Namn = Ä.Namn)) AND NOT EXISTS (SELECT Glass FROM ÄTANDE WHERE Namn = Ä.Namn AND Glass NOT IN (SELECT Glass FROM ÄTANDE WHERE Namn = Pelle)) Nästlade frågor forts. Ta fram namnen på de som ätit samma glassar som Pelle ätit: Det får inte existerar någon glass som Pelle ä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 Pelle ätit. Resultat: Namn Pelle Ingen hade ätit precis de glassar Pelle ätit (utom Pelle). 29 av 50

Vyer kan göra det lite enklare CREATE VIEW Pelles_glassar AS (SELECT Glass FROM ÄTANDE WHERE Namn = Pelle) SELECT Ä.Namn FROM ÄTANDE WHERE NOT EXISTS (SELECT Glass FROM Pelles_glassar WHERE Glass NOT IN (SELECT Glass FROM ÄTANDE WHERE Namn = Ä.Namn)) AND NOT EXISTS (SELECT Glass FROM ÄTANDE WHERE Namn = Ä.Namn AND Glass NOT IN Pelles_glassar) 30 av 50

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 Pelle ätit: SELECT DISTINCT Namn From ÄTANDE WHERE Glass IN Pelles_glassar SELECT Namn From ÄTANDE WHERE Glass IN Pelles_glassar Resultat: Namn Maria Stina Resultat: Namn Maria Maria Maria Stina Stina Stina 31 av 50

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 AVG(kolumnnamn), tar genomsnittet av värdena i en kolumn MAX(kolumnnamn), ger största värdet i en kolumn MIN(kolumnnamn, ger minsta värdet i en kolumn 32 av 50

Exempel på aggregat-funktioner SELECT COUNT(*) FROM ÄTANDE Ger antalet rader i tabellen ÄTANDE Resultat: 8 SELECT COUNT(DISTINCT Namn) FROM ÄTANDE Ger antalet (unika) personer i tabellen ÄTANDE Resultat: 3 33 av 50

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 Namn FROM ÄTANDE ORDER BY Namn Ger alla namnen sorterade i bokstavsordning Resultat: Namn Maria Pelle Stina 34 av 50

GROUP BY Grupperar rader efter det värde som anges. Ta fram alla personer och hur mycket glass de ätit per person: SELECT Namn, count(glass) FROM ÄTANDE GROUP BY Namn Resultat: Namn Maria Pelle Stina 3 2 3 35 av 50

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 Namn, count(glass) AS Glass_antal FROM ÄTANDE GROUP BY Namn Resultat: Namn Glass_antal Maria 3 Pelle 2 Stina 3 36 av 50

GROUP BY OCH HAVING HAVING fungerar på grupper som WHERE fungerar på rader, dvs elimenerar grupper Ta fram alla personer som ätit mer än 2 glassar: SELECT Namn, count(glass) FROM ÄTANDE GROUP BY Namn HAVING COUNT(Glass) > 2 Resultat: Namn Maria Stina 3 3 37 av 50

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 mer glassar än Pelle ätit SELECT Namn, count(glass) FROM ÄTANDE Resultat: GROUP BY Namn Namn HAVING COUNT(Glass) > (SELECT count(glass) Maria 3 FROM ÄTANDE Stina 3 WHERE NAMN = Pelle GROUP BY Namn) 38 av 50

UNION Ta fram alla avdelningar som ligger på plan 1 eller avelningar där personer är antällda som tjänar mer än 20000 eller båda delar: Alternativ SELECT Anamn FROM AVDELNING WHERE Våning = 1 UNION SELECT Anamn FROM ANSTÄLLD WHERE Lön > 20000 SELECT AVDELNING.Anamn FROM AVDELNING, ANSTÄLLD WHERE AVDELNING.Anamn = ANSTÄLLD.Anamn AND Våning = 1 OR Lön > 20000 39 av 50

INTERSECT(SNITT) Ta fram alla avdelningar som ligger på plan 1 OCH där alla personer som arbetar där tjänar mer än 20000: Alternativ SELECT Anamn FROM AVDELNING WHERE Våning = 1 INTERSECT SELECT Anamn FROM ANSTÄLLD WHERE Lön > 20000 SELECT AVDELNING.Anamn FROM AVDELNING, ANSTÄLLD WHERE AVDELNING.Anamn = ANSTÄLLD.Anamn AND Våning = 1 AND Lön > 20000 40 av 50 A

EXCEPT(MINUS) Ta fram alla avdelningar som inte har några personer som tjänar mer än 30000: Alternativ SELECT Anamn FROM AVDELNING EXCEPT SELECT Anamn FROM ANSTÄLLD WHERE Lön > 30000 SELECT Anamn FROM AVDELNING WHERE Anamn NOT IN (SELECT Anamn FROM ANSTÄLLD WHERE Lön > 30000) 41 av 50

Textsträngsmatchning Ta fram alla anställda vars namn börjar på bokstaven n: SELECT Namn FROM ANSTÄLLD WHERE Namn 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: Maria Karlsson, Marie Klasson men också Mari Ksson. I t ex Access svarar % mot * och - mot? 42 av 50

INSERT Anvä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 GLASS(Glass) VALUES( Dajmstrut ) INSERT INTO ÄTANDE(Namn, Glass) VALUES(Maria, Dajmstrut ) Vad händer om de två INSERT-satserna anropas i omvänd ordning? Om man tänker sig att man har en annan tabell (benämnd statistik) som innehåller Namn på personer och deras genomsnittliga ätande kan man skapa INSERT via SELECT INSERT INTO statistik(namn, snittkvant) SELECT Namn, avg(glass) FROM ÄTANDE GROUP BY Namn 43 av 50

DELETE Används för att ta bort rader i redan existerande tabeller: Ta bort glassen Dajmstrut : DELETE FROM GLASS WHERE Glass = Dajmstrut Vad händer om de med de rader i ÄTANDE som refererar till Dajmstrut? Ta bort alla rader i tabellen ÄTANDE: DELETE FROM ÄTANDE 44 av 50

UPDATE Används för att ändra innehållet i ett eller flera attribut i rader i redan existerande tabeller: Betraka tabellan GLASS_I_LAGER till nedan. Om en leverans med 200 päron- split anländer samtidigt som man vill rea just päronsplit kan följande UPDATEsats exekveras. UPDATE GLASS_I_LAGER SET Antal_i_lager = Antal_i_lager + 200, Pris = 6.00 WHERE Glass = Päronsplit GLASS_I_LAGER (före UPDATE) Glass Päronsplit Storstrut Vaniljpuck Antal_i_lager 250 300 700 Pris 7.00 15.00 11.00 GLASS_I_LAGER (efter UPDATE) Glass Päronsplit Storstrut Vaniljpuck Antal_i_lager 450 300 700 Pris 6.00 15.00 11.00 45 av 50

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 Pelle Olle Stina Kalle Olle Maria Eva Knut VG G U VG VG G G G G GruppA GruppA 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 46 av 50

Några slutord om vyer (VIEWS) Vyer kan definieras på en eller flera bastabeller och eller andra vyer. CREATE VIEW Student_vy AS (SELECT Kurs, Student, Grupp FROM KURSTILLFÄLLE) CREATE VIEW Lärar_vy AS (SELECT * FROM KURSTILLFÄLLE) CREATE VIEW Schemaplanerings_vy AS (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 47 av 50

Fördelar med vyer visst logiskt dataoberoende samma data kan betraktas av olika användare på olika sätt (på samma gång) Användaren kan få en förenklad bild av databasen - mindre komplex DML flexibel behörighetskontroll 48 av 50

Mera schema-ddl CREATE TABLE EMPLOYEE (EID VARCHAR(11) NOT NULL UNIQUE, BID CHAR(7) NOT NULL, PRIMARY KEY(EID), FOREIGN KEY(BID) REFERENCES BUSINESS ON DELETE CASCADE ON UPDATE CASCADE) DDL: DML: DCL: CREATE SCHEMA CREATE TABLE CREATE VIEW CREATE INDEX DROP TABLE DROP VIEW DROP INDEX ALTER TABLE SELECT INSERT UPDATE DELETE GRANT REVOKE Förelsäsning 5! 49 av 50

DDL: DROP TABLE Ta bort tabell med angivet namn samt alla rader samt alla referenser (rader med främmande nycklar i annan tabell) till denna tabell. Ta bort GLASS-tabellen och alla referenser till denna tabell (i detta fall tas alltså alla rader i GLASS bort men även själva tabellen GLASS och alla rader i tabellen ÄTANDE. Tabellen ÄTANDE finns dock kvar (tom)). DROP TABLE Glass CASCADE; Ta bort GLASS-tabellen samt alla rader OM det inte finns referenser (främmande nycklar i annan tabell) till GLASS DROP TABLE Glass RESTRICT; 50 av 50