Lektion 35. Resten af CRUD

Forberedelse

Formål

  • Arbejde med SQL i SQLite
  • Specifikt øve CREATE, UPDATE og DELETE i SQLite

Fælles gennemgang

Fra sidst

  • Hvad er CRUD og de tilhørende kommandoer
  • Hvad kan vi bruge GROUP BY til
  • Hvad kan vi bruge JOIN til. Prøv at give et eksempel

Lektien til denne gang

  • Gennemgå INSERT, UPDATE og DELETE
  • Hvorfor CRUD

Øvelser

Inden vi går i gang

Hvis du ikke allerede har det på plads, så skal vi arbejde med databasen Kundedatabase i SQLite. Du kan hente den nedenfor.

Udfør kaldene på Kundedatabase ud fra videoen ovenfor: Dvs. hent alle data fra en tabel + udvælg efter postnummer

Du kan hente databasen Kundedatabase nedenfor. Ellers se lektion 34. SQL og SQLite.

Bemærk: Der er en mindre fejl i den øverste fil, der er et mellemrum i feltet “Kunde nr”, og det er uhensigtsmæssigt. Den kan du rette ved at køre scriptet her: Alternativt brug det nederste download, “Kundedatabase1”:

ALTER TABLE "Kunder" RENAME COLUMN "Kunde nr" TO "KundeNr

35.1 Lidt repetition

  • Hent alle data fra tabellen Kunder i SQLite
  • Hent Kundennr, Kunde, Adresse og Postnummer databasen Kunder i SQLite
  • Hent alle data fra tabellen Kunder, men kun for kunder med postnummer 6000
  • Hent alle data fra begge tabeller
  • Hent alle data fra begge tabeller, men kun for kunder med postnummer 8000

35.2 Lidt teori

  • Hvad står RDBMS for, og hvad har det med databaser at gøre
  • Hvilke typer databaser kan RDBMS ikke håndtere
  • Hvorfor er vi ikke så glade for at slette i databaser
  • Nævn nogle af de vigtigste RDBMS systemer og hvad de hver især bruges til
  • Hvad er en .csv fil, og hvad bruger vi den til
  • Hvad er det, som Excel desværre ofte bliver brugt til, men som det i bund og grund er direkte uegnet til
  • Hvad bør arbejdsdelingen være mellem Excel og databaser

35.3 En lidt god CRUD oversigt

I lærebogen afsnit 22.5 Kort overblik over vores daglige CRUD kommandoer ser du nedenstående tabel.

  • Hvorfor tror du, at der er forskelle mellem den måde, som INSERT INTO og DELETE er bygget op på. De kunne jo godt lave kommandoerne mere éns
  • Fortæl om, hvilke ting vi skal passe på ved at bruge UPDATE og DELETE
    • Hvorfor har vi ikke den slags problemer ved INSERT og SELECT
  • Der findes en kommando, der hedder CREATE. Hvorfor tror du, at den ikke er med nedenfor
KOMMANDOEKSEMPELFORKLARING
INSERTINSERT INTO Kunde(KundeID, Postnummer, By, Aktiv/passiv)
VALUES (6, “Niels Ny”, 6000, “Kolding”, “Aktiv”
Opretter en ny række
med værdier
SELECTSELECT *
FROM Kunde
Henter alle data fra
tabellen Kunde
UPDATEUPDATE Kunde
SET Postnummer = 6000, By = “Kolding”
WHERE KundeNavn = “Viggo Vare”
Viggo er flyttet til Kolding,
så vi opdaterer hans
postnummer og by.
Husk at
bruge WHERE, ellers opdaterer
du alle rækker
DELETEDELETE FROM Kunde
WHERE Kundenavn = “Tommy Træls”
Vi sletter kunden Tommy Træls.
Husk kommandoen WHERE,
ellers sletter du alt i tabellen

35.4 Datatyper

Du ser her SQLites datatyper. ‘

  • Hvad er en datatype. Giv et eksempel fra både SQLite og Excel
  • Hvad kan vi bruge datatyper til
  • Kan vi klare os uden datatyper i den type databaser, vi arbejder med? Begrund dit svar
  • Herunder ser du datatyper i SQLite i tabellen Kunder. Hvordan passer de ind med teorien
    • Hvad skal vi gøre, hvis vi ønsker at have et felt til kundens fødselsdag
    • Hvad skal vi gøre, hvis vi ønsker et felt, hvor vi kan markere om kunden er aktiv eller passiv

35.5 Lidt INSERT opgave

  • Kør kommandoen nedenfor i SQLite og se, hvad den kan. Tip. Når du har prøvet koden af, så prøv at lave en SELECT * FROM Kunder
  • Hvorfor er der anførselstegn foran nogle af felterne men ikke foran alle?
INSERT INTO Kunder
   VALUES(13, 'Vera Mode', 'Butikvej 3', 6000, '76547654', 'vera@mode.dk', 3000)
  • Nedenfor har du nogle INSERT koder. Hvis du prøver dem af, så virker de ikke. Forklar hvorfor, og brug gerne fejlmeddelelserne fra SQLite i din forklaring
Kode 1: INSERT INTO Kunder
   VALUES('Sille Smart', 'Bøjlegade 3', 8000, '12233344', 'sille@smart.dk', 300)
   
Kode 2: INSERT INTO Kunder
   VALUES(17, NULL, 'Bøjlegade 3', 8000, '12233344', 'sille@smart.dk', 300)

Kode 3: INSERT INTO Kunder
   VALUES(17, Sille Smart, 'Bøjlegade 3', 8000, '12233344', 'sille@smart.dk', 300)
  • Ret koden til, så vi får indsat Sille Smart som kunde

35.6 Lidt mere INSERT

  • Indsæt 2 kunder efter eget valg. Den ene hedder Bo Butterfly og den anden hedder Hanne Hootie. Find selv på adresser og postnumre, men brug postnumre, der findes i databasen i forvejen
  • Vi har nu en ny kunde, “Moe i Melfar” (udtal det på fynsk, så giver det mening). Adressen er Molevej 5, 5500 Middelfart, telefon = “87655678” og emailen er mo-e@melfar.dk. Kunden har ingen gæld. Vi har ikke postnummer 5500 Middelfart oprettet i vores database
    • Hvorfor kan det være en god idé at oprette postnummeret før, at du indtaster selve kunden
    • Opret postnummeret
  • Lav til sidst en SELECT, hvor du vælger Kundenr, Kunde, Postnummer og Byen fra databasen

35.7 Lidt UPDATE og lidt DELTE

Det gælder for alle opgaverne her, at du først skal få koden til at virke. Bagefter laver du en SELECT, der viser, at dine ændringer er gennemført. Tag skærmfotos af dine koder.

  • I Middelfart har de fået lov til at ændre byens navn til fynsk: Skriv en SQL kommando, der kan ændre navnet “Middelfart” til “Melfar” i tabellen Postnummer_by
  • Vis din UPDATE kommando
  • Ret kunden med navnet Moden til “Genbrugstøj: Rode i Mode”. Vis din kode
  • Det gik ikke for “Genbrugstøj: Rode i Mode”, så din chef beder dig om at slette kunden. Slet kunden
  • Hvorfor er det en dårlig idé, din chef havde med at slette kunden. Hvad ville være et bedre alternativ end at slette kunden

35.8 Prøv noget kode af

Kopier koden her over i SQLite og test den af. Hvad gør koden?

  • Hvad gør koden
  • Hvad betyder koden “INTEGER” hhv. “TEXT”
  • Forklar brugen af koden “NOT NULL”
  • Hvad gør koden “PRIMARY KEY”
CREATE TABLE "Kundetype" (
	"KundetypeID"	INTEGER NOT NULL,
	"Kundetype"	TEXT NOT NULL,
	"Kommentarer"	TEXT,
	PRIMARY KEY("KundetypeID")
);

35.9 Opret selv en kundedatabase i SQLite

  • Følg videoen og opret en kundedatabase med mindst 5 kunder med tilhørende postnummer. 2 – 3 af kunderne skal have postnummer 5000 Odense C, resten skal have et andet postnummer f.eks. 6000 Kolding
  • Lav følgende SQL kald og tag et skærmfoto af både kode og resultat
    • 1. Hvor du henter alle data i tabellen Kunder
    • 2. Hvor du henter alle data fra begge tabeller
    • 3. Hvor du henter data for alle kunder i Odense C

35. 10 Ekstra opgave. Lager for “Vær-sko”

Du skal lave en database over sko for den nystartede webshop “Vær-sko” :-).

Opret fra bunden i SQLite database over sko til enten mænd eller kvinder.

  • Der er kun 1 entitet, “sko” med følgende attributter
    • Sko størrelse
    • Sko mærke
    • Sko type (vælg selv 3 – 4 typer sko, f.eks. “sneakers”, “fest”, “vandrestøvler” eller hvad du vil
    • Sko pris
  • Normaliser tabellen
  • Sæt datatyper på (int = heltal, text = tekst, real = tal med komma. Se evt. afsnit 22.8
  • Start SQLite. Opret 10 varer i en tabel i SQLite. Du må maks have 3 par sko med samme pris. Mindst 3 par sko skal koste over kr. 800, mindst 3 par sko skal koste under kr. 800. Se gerne videoen i opgave 35.9, hvis du er i tvivl om, hvordan man gør.
  • Lav disse trækninger vha SQL kodning i SQLite. Tag skærmdumps af dine resultater
    • Først skal du hente alle varer ud
    • Herefter skal du vise alle sko med en pris, der er under kr. 800
    • Vis til sidst alle par sko med en pris, der er under kr. 800, sorteret med de dyreste øverst