Introduktion til SQLite

I databaser giver vi kommandoer i SQL (Structured Query Language), som er det mest udbredte programmeringssprog til relationelle databaser. Det bruges både til at oprette databaser og til manipulation af data. På mange måder minder programmeringssproget om engelsk med kommandoer som SELECT, FROM, COUNT og lignende. Det er dog et programmeringssprog, der kræver præcision, så I skal være opmærksomme, når I skriver i SQL.

I disse eksempler vil vi tage udgangspunkt i databasen music.db, som I kan downloade her. Når I laver queries gør i det i “Execute SQL”-fanen (som I kan se er markeret øverst til venstre). Resultatet af jeres queries vil fremtræde i rammen under. Nederste ramme informerer om jeres query er udført korrekt (hvis ikke kommer der en fejlkode), hvor mange resultater der matcher jeres query og hvor lang tid det tog at udføre.

I dette afsnit vil vi gennemgå forskellige eksempler på SQLite-queries, som I kan prøve af på databasen music.db. Vær opmærksom på, at de ikke kan kopieres direkte ind i DB Browser, da der bruges forskellige fonts.

SELECT-kommando

SELECT * FROM albums;

Denne query finder alle resultater i tabellen albums. Stjernen * betyder at den returnerer alt i den pågældende tabel.

WHERE-klausul

SELECT * FROM albums WHERE Title like ‘Mozart%’

SELECT * FROM albums WHERE ArtistId = 1;

En mere specifik query kunne lede efter albums, fx hvor Mozart indgår i titlen (Title). %-tegnet indikerer, at Title starter med Mozart med efterfølgende tekst. Hvis %-tegnet placeres foran (‘%Mozart’), vil resultaterne ende med Mozart. Bruges %-tegnet foran og bagved (‘%Mozart%’), returneres resultater, hvor Mozart indgår i Title. Ved tekstresultater bruges ‘LIKE’, ved talresultater bruges ‘=’.

AND & OR-operator

SELECT * FROM albums WHERE Title LIKE ‘Black%’ AND ArtistId = 12;

SELECT * FROM albums WHERE Title LIKE ‘Black%’ OR ArtistId = 1;

AND og OR er effektive redskaber til søgninger, da man hermed kan kombinere resultater fra flere tabeller og/eller kolonner dermed få et mere præcist resultat. AND og OR er fx effektive til queries i databaser til webshops og kundedatabaser. Se videoen for yderligere forklaring og eksempler.

ORDER BY-sortering

SELECT * FROM albums WHERE Title LIKE ‘Black%’ OR ArtistId = 1 ORDER BY ArtistId;

SELECT * FROM albums WHERE Title LIKE ‘Black%’ OR ArtistId = 1 ORDER BY ArtistId DESC;

Ved at tilføje ORDER BY efter en query kan en resultatet organiseres efter et stigende eller faldende princip. Er fx god, hvis man vil have et overblik over sine kunders alder eller lignende.

INSERT INTO- og UPDATE-statements

INSERT INTO albums (AlbumId, Title, ArtistId) VALUES (348, ‘A Test Album’, 1);

Denne query indsætter en ny række i tabellen albums. Bemærk at rækkefølgen af kolonnernes værdier (VALUES) skal udfyldes i samme rækkefølge som de opgives i indledende parentes).

UPDATE playlists SET name = ‘Heavy Metal’ WHERE PlaylistId = 17;

Denne query opdaterer/ændrer en eller flere elementer i en række, i det her tilfælde i tabellen playlist, hvor name ændres fra ‘Heavy Metal Classics’ til ‘Heavy Metal’ ved at identificere primærnøglen (PlaylistId) 17. Skal der ændres mere end et element i en række indsættes det efter SET, fx UPDATE albums SET Title = ‘The Best Album’, ArtistId = 11 WHERE AlbumId = 348;

Aggregate-funktioner

Aggregate funktioner udfører beregninger på et sæt værdier og returnerer et enkelt tal. Dvs. de tæller tæller, sumerer op, finder gennemsnittet, finder det højeste eller det mindste tal. De er derfor gode til fx webshops og kundedatabaser, hvor man har behov for at danne sig overblik over indkøbsvaner og kundetyper.

SELECT count(*) FROM albums;

Denne funktioner tæller antallet af rækker, som opfylder et bestemt kriterie.

SELECT sum(stat) FROM sqlite_stat1;

Denne funktion beregner summen af en numerisk kolonne.

SELECT max(stat) FROM sqlite_stat1;

Denne funktion finder den højeste værdi i en kolonne.

SELECT min(stat) FROM sqlite_stat1;

Denne funktion finder den laveste værdi i en kolonne.

SELECT avg(stat) FROM sqlite_stat1;

Denne funktion beregner gennemsnittet af værdierne i en numerisk kolonne.

INNER JOIN

INNER JOIN i SQL er en kommando, der bruges til at kombinere data fra to tabeller ved at finde de rækker, der har fælles værdier i en bestemt kolonne.

Tænk på det som at finde det, der er fælles i to tabeller: Kun de data, der passer sammen i begge tabeller, bliver vist i resultatet. INNER JOIN er nyttig, når man arbejder med relaterede tabeller i en database, fx kunder og deres køb eller produkter og deres lagerstatus. 

SELECT Kolonner
FROM Tabel1
INNER JOIN Tabel2
ON Tabel1.FællesKolonne = Tabel2.FællesKolonne;

Tabel1 og Tabel2 er de to tabeller, du vil kombinere, mens ON angiver betingelsen for, hvordan rækkerne skal matches (hvilken kolonne der bruges som fællesnævner).

Fx på de to tabeller Kunde og Ordre, kan der laves en INNER JOIN, som viser, hvilke kunder der har købt hvad.

KundeIDNavnBy
1AnnaKøbenhavn
2JensAarhus
3MarieOdense
OrdreIDKundeIDProdukt
1011T-shirt
1022Jakke
1034Sko

Ved at bruge denne SQL-kommando…

SELECT Kunder.Navn, Ordrer.Produkt
FROM Kunder
INNER JOIN Ordrer
ON Kunder.KundeID = Ordrer.KundeID;

…kommer resultatet, hvor forespørgslen kun fandt de rækker, hvor KundeID er ens i begge tabeller, mens Maria og OrdreID 103 blev ikke inkluderet, fordi deres KundeID ikke findes i begge tabeller.

NavnProdukt
Jens Jakke
AnnaT-shirt