Forberedelse
- Læs kapitel 21 Hent data med SELECT. Det er et langt kapitel, men du skal bare “skimme” det. Dvs. brug ca. 20 minutter på at orientere dig i kapitlet, og tag nogle få noter
Formål
- Kort og godt: Arbejde med SQL
Fælles gennemgang
Fra sidst
- Hvad er en database i sin simpleste form
- Giv eksempler på forskelle på begreber i tabeller og databaser
- Hvad er SQL, og hvad bruger vi det til
- Er SQL et dynamisk sprog
- Hvad er CRUD
- Hvilken rolle spiller SELECT i CRUD
Lektien til denne gang
- Gennemgå figuren her. Gruppevis: Hvad kan de forskellige kommandoer i figuren her

Øvelser
Som alle andre øvning-af-kodning og teknikopgaver skal du lave øvelserne individuelt, dvs. på din egen computer.
33.1 SQL opvarmning
Gå ind på w3schools f.eks. under SQL Select. Tag skærmfotos af alle dine svar og tag gerne tekstkopier af dine svar, så du senere bare kan kopiere koden ind.
- Skriv SQL, der vælger alle data i tabellen Customers
- Skriv SQL, der vælger alle data i kolonnerne CustomerName, City og Country. Svaret ser sådan ud, jeg har kun vist de øverste poster.

- Skriv SQL, der vælger alle kolonner undtagen CustomerID. Svaret ser sådan ud:

- Skriv SQL, der henter kolonnerne CustomerName, City og Country men kun for Mexico

- Skriv SQL, der henter de samme kolonner som før, men kun for Danmark.

- Skriv SQL, der henter de samme kolonner som før. Denne gang skal kunderne bo i Danmark, Norge eller Sverige

- Kunderne fra sidste øvelse står hulter til bulter. Derfor vil jeg gerne have dem sorteret, så de står i stigende alfabetisk rækkefølge efter land. Svaret ser sådan ud:

- Nu skal du sortere CustomerName i faldende orden, dvs. med Å først. Svaret ser du her

- Næstsidste sorteringsopgave. Du skal nu sortere først efter land, herefter efter by. Begge dele i faldende orden, dvs fra Å – A. Det kan godt være, at du bliver nødt til at google for at få lidt hjælp. Svaret ser du her:

- Til sidst. Byt om på rækkefølgen af kolonnerne i svaret fra sidste opgave, så du får City først, så Country og til sidste CustomerName. Den skal stadigvæk sortere først efter land, så efter by, begge i faldende orden. Svaret er her:

33.2 DISTINCT, COUNT, SUM og AVG
Tag skærmfotos af alle dine svar præcis som i forrige opgave og tag gerne tekstkopier af dine svar, så du senere bare kan kopiere koden ind.
Gå igen ind på w3schools f.eks. under SQL Select. Hvis du kikker lidt nede i indholdsfortegnelsen til venstre hos W3Schools, så ser du menupunkter med både DISTINCT, COUNT, SUM og AVERAGE (AVG). Brug dem endelig som eksempler.
- Test koden her “SELECT Country FROM Customers;” af. Hvad gør den?
- Test så efterfølgende koden “SELECT DISTINCT Country FROM Customers;” af. Hvad er forskellen på de resultatet af de 2 koder? TIP: Svaret kan du f.eks. se oppe i venstre hjørne under “Number of records”. Ved den første er Number of Records = 91, ved den sidste er Number of Records = 21

- Udfør en tilsvarende kommando med DISTINCT for City. Hvor mange forskellige byer er der? Svaret er 69, men vis koden og resultatet
- Prøv at vælge CustomerName sammen med DISTINCT og CITY. Kan vi det? Hvis nej, hvad tror du, at der går galt
Det er ikke alle databaser, som oplyser antal poster. Vi kan heldigvis finde dem selv.
- Udfør kommandoen her: SELECT COUNT(Country) FROM Customers;
- … hvad bliver resultatet
- Få tilsvarende kommandoen til at tælle antal lande, hvis du kombinerer kolonne Country med DISTINCT
De næste kommandoer SUM() og AVG() finder du på https://www.w3schools.com/sql/sql_count_avg_sum.asp
- Udfør kommandoen: SELECT SUM(Quantity) FROM OrderDetails; Du kan udføre kommandoen direkte hos W3schools på linket ovenfor. Svaret er 12743
- Hvad gør kommandoen
- Udfør tilsvarende kommandoen SELECT AVG(Price) FROM Products; Svaret er 28.8664. Bemærk at det svarer til 28,8664 med dansk notation
- Hvad gør kommandoen
- Byt om, så du tager SUM af kolonnen Price og gennnemsnit af kolonnen Quantity. Svarene er hhv. 2222.71 og 24.6003861003861.
- Vis, hvordan du kommer frem til de resultater
- Giver svarene mening
33.3 MAX() og MIN()
I databasen fra før på https://www.w3schools.com/sql/sql_count_avg_sum.asp: Find ud af, hvad der er max og min for både kolonnerne Quantity og Price. Svarene er:
- Største og mindste pris: 263.5 hhv. 2.5. Bemærk at du skal søge i tabellen Products
- Største og mindste 120 hhv. 1. Bemærk at du skal søge i tabellen OrderDetails
33.4 Wildcards
- Hvad er et wildcard i forbindelse med SQL (NEJ, vi skal ikke snakke wildcards og tennisturneringer, det overlader jeg til din idrætslærer)
- Hvordan kan vi bruge wildcards, og hvorfor optræder de ofte sammen med kommandoen LIKE. Brug gerne siden https://www.w3schools.com/sql/sql_like.asp og koden herunder til at forklare, hvad du mener
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';
- Når du har testet koden ovenfor. Skift lille a ud med et stort A. og forklar, om koden er case sensitiv
- Skriv et SQL kald, der henter alle oplysninger om alle kunder, der starter med “K”. Svaret ser du nedenfor. Test efter, om koden er case sensitiv

- Skriv et SQL kald, der henter alle kunder, der starter med “S”

- Skriv et SQL kald, der ligesom ovenfor henter alle oplysninger om alle kunder, der starter med “S”. Denne gang vil jeg kun have vist de kunder, der bor i USA. Svar:

- Skriv et SQL kald, der henter alle oplysninger om kunder, hvor bogstavkombinatione “st” er en del af navnet, og hvor kunderne bor i USA

33.5 Opsamling
Lav en opsummering af dagens opgaver. Kopier gerne SQL koden direkte ind i din opsummering, for du kan lave kommentarer i din SQL kode vha. 2 streger. F.eks. “SELECT * FROM …” bliver til en kommentar, hvis du skriver “– SELECT * FROM …”. BEMÆRK: Det er en klar fordel, hvis du bruger figuren øverst i lektionen her til at strukturere din viden.
- Hvad har du lært
- Hvad var svært
- Er noget kommet bag på dig i forhold til at kode SQL?
33.6 Færdig før de andre
Læs/genlæs kapitel 21, og kik på opgave 34.1. Vi fortsætter, hvor vi slap