Du har en tabell med tusenvis av rader. Kanskje det er kunder, fakturaer eller bestillinger. Du trenger ikke alle radene, bare de som oppfyller et bestemt krav. Det er her WHERE kommer inn.
WHERE er filteret i SQL. Det sier til databasen: «Gi meg bare radene der dette kravet er oppfylt.» Uten WHERE får du alt. Med WHERE får du akkurat det du trenger.
Grunnleggende filtrering med WHERE
En WHERE-setning legges etter FROM i spørringen din. Du angir en betingelse, og databasen returnerer bare radene som matcher.
SELECT * FROM invoices WHERE customer_id = 3;
Denne spørringen henter alle fakturaer der kunde-ID er 3. Resten av radene blir utelatt. Legg merke til at du bruker ett enkelt likhetstegn (=) for sammenligning i SQL, ikke dobbelt som i mange programmeringsspråk.
Sammenligningsoperatorer
Likhetstegnet er bare én av flere operatorer du kan bruke med WHERE. Her er de viktigste:
- = er lik
- != er ikke lik (kan også skrives <>)
- > større enn
- < mindre enn
- >= større enn eller lik
- <= mindre enn eller lik
Vil du for eksempel finne alle fakturaer med totalbeløp over 10, skriver du:
SELECT * FROM invoices WHERE total > 10;
Vil du finne fakturaer som ikke tilhører kunde 5:
SELECT * FROM invoices WHERE customer_id != 5;
Operatorene fungerer på tall, tekst og datoer. Med tekst sammenlignes verdiene alfabetisk, og med datoer sammenlignes kronologisk.
Kombinere betingelser med AND og OR
Ofte trenger du mer enn én betingelse. Da bruker du AND og OR for å kombinere dem.
AND krever at begge betingelsene er oppfylt:
SELECT * FROM invoices WHERE customer_id = 3 AND total > 5;
Denne gir deg fakturaer der kunden er 3 og totalbeløpet er over 5. Begge kravene må være sanne for at en rad skal bli med i resultatet.
OR krever at minst én av betingelsene er oppfylt:
SELECT * FROM invoices WHERE customer_id = 3 OR customer_id = 7;
Her får du fakturaer som tilhører enten kunde 3 eller kunde 7. Det holder at én av betingelsene slår til.
Ekskludere med NOT
NOT snur en betingelse. Det er nyttig når du vil utelukke noe spesifikt i stedet for å liste opp alt du vil ha.
SELECT * FROM invoices WHERE NOT customer_id = 3;
Denne gir deg alle fakturaer bortsett fra de som tilhører kunde 3. Resultatet er det samme som customer_id != 3, men NOT er spesielt nyttig i kombinasjon med andre operatorer som IN og LIKE.
Kombinere flere operatorer
Du kan bygge ganske avanserte filtreringer ved å kombinere AND, OR og NOT. Vær oppmerksom på rekkefølgen: AND evalueres før OR. Bruk parenteser for å styre rekkefølgen eksplisitt.
SELECT * FROM invoices WHERE (customer_id = 3 OR customer_id = 7) AND total > 5;
Uten parenteser ville SQL først evaluert customer_id = 7 AND total > 5, og deretter lagt til alle rader med customer_id = 3. Parentesene sørger for at OR-betingelsen evalueres først, slik at du får fakturaer fra kunde 3 eller 7 der totalbeløpet er over 5.
Filtrere på tekst
Når du filtrerer på tekstverdier, må du sette verdien i apostrofer:
SELECT * FROM customers WHERE country = 'Norway';
SQL skiller mellom store og små bokstaver i noen databaser, mens andre (som SQLite) ikke gjør det for standard sammenligninger. Det er lurt å være konsekvent med skrivemåten uansett.
WHERE med tall og datoer
Tall skriver du uten apostrofer. Datoer skriver du med apostrofer, og formatet er vanligvis YYYY-MM-DD:
SELECT * FROM invoices WHERE invoice_date > '2023-01-01';
Denne gir deg alle fakturaer etter 1. januar 2023. Du kan kombinere dette med andre betingelser for å lage presise datofiltre, for eksempel sammen med BETWEEN for å angi et datointervall.
WHERE i praksis: bygge spørringer steg for steg
Når du skriver WHERE-betingelser, er det lurt å starte enkelt og legge til betingelser gradvis. Begynn med én betingelse og kjør spørringen. Sjekk at resultatet ser riktig ut. Legg så til neste betingelse med AND eller OR. Denne fremgangsmåten gjør det enklere å finne feil hvis resultatet ikke blir som forventet.
Et praktisk eksempel: du skal finne alle fakturaer fra norske kunder med beløp over 5, sortert etter dato. Start med WHERE country = 'Norway'. Sjekk resultatet. Legg til AND total > 5. Sjekk igjen. Avslutt med ORDER BY invoice_date DESC for å sortere. Steg for steg unngår du at en liten feil i en kompleks betingelse gir et uventet resultat du ikke forstår.
Vanlige feil med WHERE
- Glemme apostrofer rundt tekst. WHERE country = Norway gir feilmelding. Du må skrive WHERE country = 'Norway'.
- Bruke AND når du mener OR. WHERE country = 'Norway' AND country = 'Sweden' gir null rader, fordi ingen rad kan ha begge verdier samtidig. Du trenger OR her.
- Glemme parenteser. Når du kombinerer AND og OR uten parenteser, kan resultatet bli annerledes enn du forventet.
Neste steg
WHERE er grunnmuren i SQL-filtrering. Når du har den på plass, kan du bygge videre med LIKE for mønstersøk i tekst, IN for å sjekke mot en liste med verdier, og ORDER BY for å sortere resultatene.
Denne videoen er hentet fra kurset SQL for nybegynnere på Utdannet.no. I kurset jobber du med en ekte database og skriver spørringer fra første leksjon.



