Oppgave 1 (Opprett en database og en tabell) 1) I «Object Explorer» (i «SQL Server Management Studio»), høyreklikk over Databases : 1 2 2) Skriv så databasenavnet og klikk OK: 3) Plasser så kursoren på den nye databasen i «Object Explorer», så denne blir markert. 3 4 4) Åpne et spørrevindu ved å klikke på «New Query» i menyen: 5) Lag SQL-kode som oppretter tabellen WEATHERDATA: CREATE TABLE WEATHERDATA ( StationID int, RegDate date, MinTemp float, 5 MidTemp float, MaxTemp float, Rainfall float, CONSTRAINT PK_WEATHERDATA PRIMARY KEY (StationID, RegDate) ) Oppgave 2 (Importer data fra Excel-fil til tabell) Importer fila «weather_testdata.xlsx». Skjermbilder for fremgangsmåten er vist på leksjons-lysarkene. Nedenfor er fremgangsmåten kort beskrevet: 1) Lagre fila «weather_testdata.xlsx» på harddisken 2) Høyreklikk over databasen «WeatherDatabase» 3) Velg Tasks -> Import Data 4) Velg «Microsoft Excel» som «Data Source» 5) Avkryss for «First row has Column Names», velg «Microsoft Excel 2016» og søk (Browse) så etter Excelfila som inneholder værdataene («weather_testdata.xlsx»). Klikk så på «Next». 6) Som «Destination:» velges «SQL Server Native Client 11.0». Velg «servernavnet» til SQL Serveren din og bruk «Use Windows Authentication». For feltet «Database:» skal «WeatherDatabase» være valgt. 7) I skjermbildet «Specify Table Copy or Query», velg Copy data from one or more tables or views 8) I neste skjermbilde, sørg for at Excel-arket Sheet1$ er valgt som «Source» og [dbo].weatherdata som «Destination» (hvilket velges i nedtrekksmenyen). Trykk på Preview for å se at dataene ser riktig ut Olav Dæhli Øvingsoppgaver til databasedelen av emnet EE1212 høsten 2017 side 1 av 5
9) Ser dataene OK ut, klikk Next og fortsett så gå gjennom resten av veiviseren uten å gjøre endringer. Det kommer trolig noen warnings på noen av datatypene, med varsel om «Use Global». Dette har med datatypene i Excel å gjøre og skal ikke skape problemer for importen, så gå bare videre. Har du Express-versjonen av «SQL Server», kommer det et varsel om at importen ikke kan lagres. Kjør «Run immediately» ved å klikke på Next, så skal importen utføres. Tabellen importeres da til SQL Server-tabellen WEATHERDATA. Plasser kursoren på tabellen i «Object Explorer» og klikk F5 så det utføres en «refresh». Høyreklikk så over tabellen og utfør «Select Top 100 Rows». Dataene som er importert skal da vises. Nedenfor ses et utdrag av dataene. Oppgave 3 (Legg inn en ny rad med data) INSERT INTO WEATHERDATA VALUES(92000, '2015-04-01', -5.3, -5.1, -2.3, 22.5) INSERT INTO WEATHERDATA VALUES (92001, '2015-04-01', -0.7,-2.1, 1.2, 1.1) Resultat: Oppgave 4 (Legg inn en ny rad med data) INSERT INTO WEATHERDATA (StationId, RegDate, Rainfall) VALUES (95000, '2015-04-02', 27.2), (95001, '2015-04-02', 3.7) Resultat: Prøv å legge inn et nytt stasjonsnummer uten data, f.eks. 90000. Hva skjer og hvorfor? INSERT INTO WEATHERDATA (StationId) VALUES(90000) Resultat: Feilmelding fordi primærnøkkelen består av kombinasjonen av StationId og RegDate. Entitetsintegritet tillater ikke at ett eller flere felt i en primærnøkkel inneholder NULL-merker. Oppgave 5 (Slett data) Slett alle rader med stasjonsnummer større eller lik 90000 og sjekk at de fire radene som ble lagt inn slettes. Legg dem deretter inn igjen, med SQL-setningene fra Oppgave 3 og Oppgave 4. WHERE StationID >= 90000 Olav Dæhli Øvingsoppgaver til databasedelen av emnet EE1212 høsten 2017 side 2 av 5
Slett alle rader som har stasjonsnummer som begynner på 95. Legg deretter inn dataene igjen med spørringen fra Oppgave 4. Slett alle rader som har «rainfall» større eller lik 20,00 mm og mindre eller lik 30,00 mm. WEATHERDATA WHERE ((Rainfall >= 20) AND (Rainfall <= 30)) Slett alle rader med data registrert 02.04.2015. Sørg deretter for å utføre instruksjoner som gjør at alle de fire radene fra Oppgave 3 og Oppgave 4 legges inn i tabellen igjen. WHERE RegDate = '2015-04-02' Oppgave 6 (Oppdatere/endre data) UPDATE WEATHERDATA UPDATE WEATHERDATA SET StationID = StationID + 1000 SET StationID = StationID - 1000 Oppgave 7 SELECT TOP 5 * Oppgave 8 SELECT TOP 5 StationId, RegDate, Rainfall Oppgave 9 SELECT DISTINCT StationId Hva skjer dersom det i tillegg vises data fra MidTemp- og Rainfall-kolonnene? SELECT DISTINCT StationId, MidTemp, Rainfall DISTINCT vil nå ikke fungere. Isteden vil alle radene vises. Dette fordi det ikke gir mening å knytte én av radene med data til en stasjon, når det for hver stasjon finnes mange rader. Oppgave 10 SELECT StationId, RegDate, Rainfall WHERE ((Rainfall >= 0.5) AND (Rainfall <= 2.5)) Olav Dæhli Øvingsoppgaver til databasedelen av emnet EE1212 høsten 2017 side 3 av 5
Oppgave 11 SELECT StationId, RegDate, Rainfall WHERE Rainfall BETWEEN 0.5 AND 2.5 AND StationID = 87640 ORDER BY Rainfall ASC Oppgave 12 SELECT StationId, RegDate, Rainfall, Rainfall/100 AS [Rainfall (meter)] WHERE Rainfall BETWEEN 0.5 AND 2.5 AND StationID = 87640 ORDER BY Rainfall DESC Oppgave 13 SELECT StationId, RegDate, Year(RegDate) As Årstall, Rainfall WHERE Year(RegDate) = 2015 AND Month(RegDate) = 4 Oppgave 14 Oppgave 15 GROUP BY StationId Oppgave 16 GROUP BY StationId HAVING MAX(MidTemp) < 0 Oppgave 17 SELECT StationID, RegDate, MinTemp, DATEDIFF(day, RegDate, GETDATE()) AS [Number of days since measure] Olav Dæhli Øvingsoppgaver til databasedelen av emnet EE1212 høsten 2017 side 4 av 5
Oppgave 18 SELECT * WHERE MinTemp IS NULL SELECT * WHERE MinTemp IS NOT NULL Oppgave 19 SELECT ROUND(AVG(MidTemp),2) AS [Average MidTemp], COUNT(*) AS [Number of values] WHERE StationId = 87640 Olav Dæhli Øvingsoppgaver til databasedelen av emnet EE1212 høsten 2017 side 5 av 5