• No results found

Databasdesign & SQL

N/A
N/A
Protected

Academic year: 2021

Share "Databasdesign & SQL"

Copied!
9
0
0

Loading.... (view fulltext now)

Full text

(1)

Laboration:

(2)

Målsättning

Syftet med denna laboration är att ge grundläggande kunskap och erfarenhet i databasdesign och frågespråket SQL.

Teori

För laborationen relevanta kompendier och filmer (se kursens Moodlesida) W3schools SQL tutorial: http://www.w3schools.com/sql/

Datatyper: http://msdn.microsoft.com/en-us/library/ms187752.aspx

Material

SQL server

Visual Studio (eller någon annan miljö) för att skapa och komma åt din SQL-server databas.

Genomförande

Denna laboration består av två delar. I den första delen av laborationen arbetar du med att designa och sedan implementera en databas med hjälp av SQL server. Del två av laborationen är en övning i frågespråket SQL.

För plus på denna laboration krävs det att du löser både plusuppgiften för den första delen och den andra.

Redovisning

Redovisning av laboration sker individuellt.

Laborationen redovisas dels genom en individuell rapport som beskriver din/er lösning, men även genom uppvisande av en väl fungerande applikation.

Redovisning av fungerande applikation sker vid en personlig redovisning som vanligtvis sker i slutet av kursen. Ni bokar in en tid för just er redovisning.

Det underlättar för den som rättar rapporten att det tydligt framgår om ni löst plusuppgiften eller inte.

(3)

Uppgift 1

För godkänt på denna laboration ska följande uppgift utföras med en databas innehållande minst en ”en-till-många”-relation. För plusuppgift skall uppgiften som presenteras nedan istället utföras med en databas innehållande minst en ”många-till-många”-relation.

1. Uppgiften går ut på att skapa en databas som innehåller flera tabeller (minst två) och relationer mellan dessa.

Exempelvis:

En skivdatabas med en tabell innehållande din egen skivsamling och en tabell innehållande artister samt en relation som kopplar samman de två tabellerna.

2. Skapa först ett ER-schema över din databas och lämna in denna för översikt till din handledare.

3. Skapa sedan själva databasen i SQL server med både script och i visuellt läge med hjälp av exempelvis Visual studio. Använd namngivningsreglerna när du skapar tabell och

kolumnnamn för att få unika namn och undvika de reserverade ord som finns i SQL. 4. Använd både det visuella läget samt SQL-satser för att fylla på databasen så att den känns

lagom stor. Gör ett antal SQL-frågor/SQL-satser (SELECT, INSERT, UPDATE, DELETE, osv). Testa att modifiera SQL-frågor/SQL-satser.

5. Sätt referensintegritet på din länk mellan tabellerna. Ställ frågor, försök uppdatera samt ta bort information i tabellerna och se vilken skillnaden är då du har referensintegritet med och utan "Uppdatera poster i relaterade tabeller" och "Ta bort poster i relaterade tabeller" samt om du inte alls har referensintegritet.

Sammanfatta dina slutsatser.

6. Redovisa ditt ER-schema, dina egna tabeller, ge exempel på SQL-frågor/-satser, visa din databas i script, samt beskriv referensintegritet och dina slutsatser om referensintegritet.

(4)

Uppgift 2:

I denna uppgift ska du få bekanta dig mer med frågespråket SQL. För att du ska slippa bygga ut din databas och fylla den med gigantiska mängder data låter vi dig utföra denna del av

laborationen mot en mera komplett databas (Nortwinddatabasen).

För godkänt på denna uppgift ska SQL-uppgifter med fet stil redovisas i sin rapport. För plus redovisar du istället svaren på de understrukna uppgifterna. (Se själva SQL-uppgifterna medan.) Redovisning av resultat sker genom att dina frågor (SQL-satser) redovisas i din

laborationsrapport samt de svar som dina SQL-satser gett.

Databasen (Nwind.mdb) hittar du i anslutning till denna laborationsspecifikation, från kursens Moodlesida. Längst bak i detta dokument finna en översikt som beskriver databasen NWIND, dess tabeller och attribut och relationerna dem emellan (Figur 1). Strecken visar vilka fält som hör ihop, skissen tolkas så att en kund kan ha många order medan en order hör till en kund.

Kom igång

• Öppna Nwind.mdb i Visual Studio • Välj New Query

• Sätt igång och skriv SQL-frågan • Ställ fråga genom att välja Execute

• Spara varje fråga som script (för att kunna återskapa och visa dina frågor)

SQL-uppgifter:

Besvara följande frågor mha av SQL. För godkänt skall frågorna med fet stil redovisas. För pluss redovisas endast de understrukna uppgifterna. Fungerar inte det aktuella datumet eller ordernummret kan det bero på att en annan Norwind-databas används, byt då till datum/ordernummer som

existerar i databasen.

Enkla frågor

1.Visa alla anställda.

2.Visa namnen för alla anställda.

3.Visa alla speditörer.

Enkla villkor

4.Ta fram all information om den anställde med anställningsnummer 1. 5.Ta fram all information om de anställda som jobbar som säljare.

6.Vad har Vice VD för hemtelefonnummer (befattning=Vice VD, försäljning)?

7.Vad heter kontaktpersonen på Svensk Sjöföda AB? 8.Vilka produkter har ett enhetspris på 80,00 kr?

Sortering

Vid sortering används uttrycket ORDER BY följt av ett eller flera fältnamn. Sortering ser på försata fältnamnet, finns flera med samma värde sorteras de på nästa fältnamn (telefonkatalogen skulle se ut:

(5)

ORDER BY Efternamn, Förnamn). Om fältnamnet följs av DESC sorteras i fallande ordning, annars i stigande (man kan skriva ASC men det behövs inte).

Visa alla anställda sorterade i... 9.Bokstavsordning.

10. Yngst först.

11.Visa alla kunderna, sortera dem i landsordning och för de i samma land skall sortera ske på ort.

LIKE, AND och OR

Ibland kan man inte använda = för att göra jämförelser eftersom det man söker inte är lika med utan bara nästan lika med. Då används istället för = ordet LIKE tillsammans med ? och eller *, där ? motsvarar exakt ett valfritt tecken och * motsvarar godtyckligt antal godtyckliga tecken.

EXEMPEL 1 Visa alla Anställda vars postnummer innehåller siffran 5 SELECT *

FROM Anställda

WHERE Postnummer LIKE "*5*"

AND och OR används för att kombinera flera villkor, AND innebär att båda villkoren måste vara uppfyld, OR att minst ett måsta vara uppfyllt

EXEMPEL 2 Visa alla Anställda vars postnummer innehåller siffran 5 eller siffran 7 SELECT *

FROM Anställda

WHERE Postnummer LIKE "*5*" OR Postnummer LIKE "*7*"

EXEMPEL 3Visa alla Anställda vars postnummer innehåller siffran 5 och som bor i Frankrike SELECT *

FROM Anställda

WHERE Postnummer LIKE "*5*" AND Land="Frankrike" 12.Vem av de anställda har studerat vid Trinity College?

13.Visa de anställda på Northwind som har efternamn som slutar på "son"

14.Visa namnet och anknytning för de anställda som har chefsbefattningar (ordet chef i befattning eller vd i befattning

Beräkningar

Beräkningar kan göras direkt i såväl SELECT-delen som WHERE-delen av SQL-satsen: SELECT pris*2 AS DyrtPris

Genom att använda ordet AS enligt ovanstående exempel kan man kalla det beräknade fält för något vettigt.

(6)

eventuell prishöjning, kalla priset för "Nytt pris "? Visa även det gamla priset (Hakparenteser runt, annars tolkar Access Nytt Pris som två ord)

Det beräknade fältet visar bara siffror, Enhetspris i tabellen är formaterat som valuta, därför visas det som valuta

16.Vilket värde finns på lager för varje produkt (enhetspris*Antal i Lager), kallas Lagervärde 17.Visa vilka produkter som har mindre antal i lager än beställningspunkten, visa även de aktuella

siffrorna

18.Vilka produkter behöver beställas (Beställningspunkt underskriden och beställt antal=0) 19.Vilka produkter behöver beställas (Antal i lager+Beställt antal < Beställningspunkt)

Två tabeller

När man behöver data från mer än en tabell får man helt enkelt ta med de tabellerna i FROM-delen

samt att man i WHERE-delen talar om hur de tabellerna hänger ihop EX: Vilken speditör skickar

vilka order:

SELECT Företagsnamn, Ordernr FROM [Order], Speditörer

WHERE [Skickas Med]=Speditörsnr

Om Skickas med hade hetat Speditörsnr hade man varit tvungen att tala om vilken tabell Speditörsnummer kommer ifrån, i så fall hade villkoret varit:

WHERE Order.Speditörsnr = Speditörer.Speditörsnr

Hakparenteserna ovan behövs runt Skickas Med för att tala om att det är ett fält, annars tolkas det som två ord, runt Order behövs hakparenteserna för att markera att order är ett fält eller tabell och inte det Order som används i ORDER BY

20.Till vilken kategori hör produkten Lakkalikööri?

21.Vilka produkter levereras av Karkki Oy? 22.Vad heter de som levererar lax?

Fler tabeller

På motsvarande sätt som med två tabeller

23.Vem levererar de varor som har sålts på order nummer 10249 Aggregering

Sammanslagning, man vill visa data aggregerad, dvs summerad på något vis. Användbara funktioner är sum (summa), count (antal), max (största värde), min (minsta värde), Avg (medelvärde av average), stdev (standardavvikelse av standard deviation). Vill man se ett eller flera aggregerade värden för olika grupper kombineras det med satsen group by som kommer efter FROM-satsen:

EXEMPEL 1 visa dyraste,billigaste, och genomsnittligt pris samt antal produkter för alla produkter: SELECT Max(Enhetspris) AS Dyrast, Min(Enhetspris) AS Billigast, Avg(Enhetspris) AS

(7)

Count(*) AS AntalProdukter FROM Produkter

EXEMPEL 2: visa dyraste, billigaste, och genomsnittligt pris samt antal produkter för respektive kategori

SELECT Kategorinamn, Max(Enhetspris) AS Dyrast, Min(Enhetspris) AS Billigast, Avg(Enhetspris) AS Genomsnitt, Count(*) AS AntalProdukter

FROM Produkter, kategorier

WHERE Produkter.Kategorinr=Kategorier.Kategorinr GROUP BY Kategorinamn

När man räknar antal kan man även skriva SELECT Count(*) eftersom man räknar poster.

24.Hur många säljare finns det på Northwind?

25.Hur många produkter finns det under kategorin Konditorivaror?

26.Hur stor var den totala ordersumman 96-12-12? (Datum är alltid krångliga, skriv det med

brädgårdar runt: #1996-12-12#), tänk på rabatten.

27.Hur mycket har sålts av respektive produkt, visa även kategorinamn och produktnummer ? 28.Vad är medelförsäljningen för produkterna inom respektive kategori?

Nästlade frågor

Ibland behöver man ställa frågan i två led, då kan nästlade frågor vara behändligt. De skrivs som en ny fråga inom parentes i WHERE-delen

EX1: Om det finns order utan Orderspecifikationer, visa all info om de/den ordern: SELECT *

FROM [order]

WHERE ordernr NOT IN

(SELECT ordernr FROM orderspecifikationer) 29.Vilken kund har inte beställt något?

Uppdateringar

Om man vill uppdatera data i tabeller kan man använda SQL till det också. i stället för SELECT används UPDATE för ändringar INSERT för Tillägg och DELETE för borttagning

EXEMPEL 1: Allan produkter som kostar 500 kr eller mer skall ha beställningspunkt på 5 UPDATE Produkter

SET Beställningspunkt=5 WHERE Enhetspris>=500

EXEMPEL 2: Höj beställningspunkten till det dubbla för alla produkter som kostar mindre än 100 kr UPDATE Produkter

SET Beställningspunkt=Beställningspunkt*2 WHERE Enhetspris<100

(8)

30.Priserna för alla produkter i kategorin 4 skall höjas med 20%.

31.Priserna för alla produkter utom för de i kategori 4 skall höjas med 5%

32. En kund i Tyskland har fått fel landsnummer i sitt telefonnummer. Ändra telefonnummer det är +4703 00 07 43 21 men skall vara +49 03 00 07 43 21.

(9)

Figure

Figur 1: Översikt över Nwind databasen och relationerna mellan tabellerna.

References

Related documents

CVE är till för att namnge säkerhetshål, så att världen har ett gemensamt namn för ett visst hål.. 1.1 Kritik

3 Lite svårt med stavning i Quizlet eftersom stavningen är olika men väldigt bra övningar för att lära sig så jag vill egentligen inte ha någon förändring. 9/20/2019

–Vi hoppas att det nya krispaket för omsättningstapp som regeringen och stödpartierna lanserade den 30 april kommer att hjälpa till att rädda många svenska företag att överleva,

841. Två tresiffriga hela tal ge vid division med varandra 5 till kvot. Om den andra siffran i det ena och tredje siffran i det andra talet strykes, blir kvoten också 5. Ett

Hon fick också pyssla om barn och sjuklingar så mycket hon nånsin hann med, och till sist var det rent av som om folk hade trott att deras nyfödda barn inte skulle kunna bli

[r]

Malin Bergstrand-Edfeldt, Hanna Westerlund, Anneli Ekman, Jessica Eriksson (jeer), Karin Antonsson (kaan), Anni

Anm: Observera att om årtalet slutar på 00 är året ett skottår bara om hela årtalet är delbart med 400.. Delbarhet med 5: Den sista siffran ska vara 0