Lær SELECT, INSERT, UPDATE og DELETE for å arbeide med data i en database.
Å snakke med databasen
Nå skal vi lære selve språket vi bruker for å kommunisere med databasen: SQL (Structured Query Language), som uttales «ess-kju-ell» eller «sequel». SQL er et deklarativt språk – du beskriver hva du vil ha, ikke hvordan maskinen skal gjøre det. Skriver du SELECT fornavn FROM elever WHERE klasse = '10A', sier du «gi meg fornavnene til alle elever i klasse 10A», og databasen finner selv den mest effektive måten.
De fire grunnkommandoene tilsvarer CRUD: SELECT (Read), INSERT INTO (Create), UPDATE (Update) og DELETE (Delete). Vi starter med den mest brukte, SELECT. Grunnsyntaksen er SELECT kolonner FROM tabell. Du bruker * for å hente alle kolonner (SELECT * FROM elever), eller lister opp navn for å hente bestemte (SELECT fornavn, etternavn FROM elever). Med SELECT DISTINCT klasse_id FROM elever får du bare de unike verdiene, uten duplikater.
Det virkelig kraftige er WHERE, som filtrerer hvilke rader du får. Den bruker sammenligningsoperatorer: = (lik), <> eller != (ulik), samt <, >, <= og >=. For eksempel gir SELECT fornavn FROM elever WHERE klasse_id = 1 bare elevene i klasse 1. Du kombinerer betingelser med AND, OR og NOT. I tillegg finnes LIKE for søk med jokertegn ('H%' finner alt som starter med H, der % er null eller flere tegn og _ er nøyaktig ett), IN (1, 3) for flere verdier, og BETWEEN 3 AND 5 for et intervall.
Å sortere, begrense og forstå rekkefølgen
To svært nyttige klausuler er ORDER BY og LIMIT. ORDER BY sorterer resultatet: ORDER BY etternavn ASC gir stigende (A–Å, og ASC er standard), mens DESC gir synkende. Du kan til og med sortere etter flere kolonner. LIMIT begrenser antallet rader: ORDER BY karakter DESC LIMIT 3 gir de tre høyeste karakterene.
En fullstendig SELECT-setning har en fast struktur du må følge: SELECT [DISTINCT] kolonner FROM tabell [WHERE betingelse] [ORDER BY kolonne [ASC|DESC]] [LIMIT antall]. Rekkefølgen er ufravikelig – SELECT før FROM, før WHERE, før ORDER BY, før LIMIT. Et interessant poeng er at databasen behandler setningen i en annen rekkefølge enn du skriver den: først FROM (finn tabellen), så WHERE (filtrer rader), så SELECT (velg kolonner), så ORDER BY (sorter), og til slutt LIMIT (begrens).
Dette er verdt å huske når du leser sammensatte spørringer. Tenk deg: SELECT fornavn FROM elever WHERE klasse_id = 1 AND fodselsdato > '2008-06-01' ORDER BY fornavn ASC LIMIT 2. Hvis klasse 1 har Emma (mars), Oliver (juli) og Sofie (mai), filtrerer WHERE først bort alle født før juni – bare Oliver står igjen. Resultatet blir derfor bare Oliver Johansen, selv om LIMIT tillot to. Rekkefølgen WHERE → ORDER BY → LIMIT forklarer hvorfor.
Skape, endre og slette
De tre siste CRUD-kommandoene endrer dataene. INSERT INTO legger til nye rader:
INSERT INTO elever (fornavn, etternavn, klasse_id)
VALUES ('Maja', 'Strand', 1);Legg merke til at vi ikke oppgir elev_id – den fylles automatisk fordi den er AUTOINCREMENT. Du kan sette inn flere rader på én gang ved å liste flere VALUES-grupper. Det anbefales alltid å skrive kolonnenavnene eksplisitt; da blir koden lesbar og fortsetter å virke selv om tabellstrukturen endres.
UPDATE endrer eksisterende data, og her er WHERE livsviktig:
UPDATE elever SET klasse_id = 1 WHERE elev_id = 4;DELETE fjerner rader:
DELETE FROM elever WHERE elev_id = 6;En alvorlig advarsel gjelder begge: glemmer du WHERE, rammer kommandoen alle rader. DELETE FROM karakterer sletter hver eneste rad i tabellen (men beholder selve tabellstrukturen). Tenk deg alltid godt om før du kjører UPDATE eller DELETE uten WHERE. Til slutt en detalj om NULL, som betyr en manglende verdi: du kan ikke sammenligne med =, men må bruke IS NULL eller IS NOT NULL, som i SELECT * FROM elever WHERE fodselsdato IS NULL.
Oppsummering
SQL er det deklarative språket vi snakker med databaser i – du sier hva du vil ha, og databasen ordner resten. De fire grunnkommandoene følger CRUD: SELECT henter data (ofte med WHERE for å filtrere, og LIKE, IN og BETWEEN for finere søk), INSERT INTO legger til rader, UPDATE endrer dem, og DELETE fjerner dem.
ORDER BY sorterer og LIMIT begrenser, og setningen har en fast skriverekkefølge som skiller seg fra databasens behandlingsrekkefølge (FROM → WHERE → SELECT → ORDER BY → LIMIT). Den viktigste sikkerhetsregelen er å aldri glemme WHERE i UPDATE og DELETE – ellers rammer du alle rader. Og husk: NULL sammenlignes med IS NULL, ikke =.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.