SQL
WHERE - filtrér rækker
WHERE bestemmer, hvilke rækker der kommer med i resultatet. Du skriver en betingelse, og kun rækker, hvor den er sand, tages med. Betingelser kan kombineres med AND og OR, og NULL kræver sin egen særlige behandling.
Forudsætter, at du har set select - hent data .
Formen
SELECT navn, pris
FROM produkt
WHERE pris > 100;
Betingelsen vurderes for hver eneste række. Er den sand, kommer rækken med.
Operatorerne er dem, du kender. Med én undtagelse: i SQL betyder ét lighedstegn
sammenligning, ikke tildeling. Og “forskellig fra” skrives <> (eller != i de
fleste databaser).
WHERE status = 'aktiv'
WHERE status <> 'lukket'
WHERE pris >= 100 AND pris <= 500
Tekst skrives i enkelte anførselstegn i SQL. Dobbelte betyder noget andet.
Kombinér med AND og OR
SELECT navn
FROM produkt
WHERE (kategori = 'kaffe' OR kategori = 'te')
AND pris < 200;
Sæt parenteser om dine OR-grupper. AND binder stærkere end OR, så uden
parenteser betyder ovenstående noget helt andet, og det er en fejl, der giver et
resultat, som ser plausibelt ud. Det er den slags, der koster point uden at ligne
en fejl.
De praktiske genveje
WHERE kategori IN ('kaffe', 'te', 'kakao')
WHERE pris BETWEEN 100 AND 500
WHERE navn LIKE 'Ka%'
WHERE navn LIKE '%kop%'
INer kortere end en langOR-kæde.BETWEENer inklusiv i begge ender.LIKEsøger i tekst:%er nul eller flere vilkårlige tegn,_er præcis ét.
SELECT navn FROM kunde WHERE email IS NULL;
Samme problem rammer negationer: WHERE status <> 'lukket' udelader også rækker,
hvor status er NULL. Skal de med, skal du skrive det:
WHERE status <> 'lukket' OR status IS NULL;
WHERE eller HAVING?
WHERE filtrerer rækker, før de grupperes. HAVING filtrerer grupper,
efter. Skal du filtrere på en sum eller et antal, skal du bruge HAVING. Se
GROUP BY.
Undgå SQL-injektion
Byg aldrig en forespørgsel ved at klistre brugerens tekst ind i strengen. Skriver
nogen ' OR 1=1 -- i et søgefelt, får de hele tabellen ud. Brug pladsholdere og
lad databasedriveren indsætte værdien:
SELECT * FROM kunde WHERE email = ?
Det er også et spørgsmål, der falder ved den mundtlige eksamen, hvis I har et søgefelt i projektet.
Kort opsamling
WHEREfiltrerer rækker; ét lighedstegn sammenligner.- Parenteser om
OR-grupper. IN,BETWEENogLIKEsparer skrivearbejde.- NULL kræver
IS NULL, aldrig= NULL.
Læs videre
- SELECT - hent data SELECT i SQL forklaret på dansk: kolonner, ORDER BY, DISTINCT og aliasser. Med eksempler og rækkefølgen databasen faktisk udfører delene i.
- GROUP BY og aggregering GROUP BY i SQL forklaret på dansk: COUNT, SUM og AVG, forskellen på WHERE og HAVING, og hvorfor du får en fejl om kolonner der ikke er i gruppen.
- JOIN forklaret SQL JOIN forklaret på dansk: inner join, left join og forskellen på dem. Hvorfor du pludselig får flere rækker, end du forventede, og hvordan du undgår det.
Senest gennemgået .