Du trenger fakturaer for kunde 1, kunde 2 og kunde 7. Du kan skrive WHERE customer_id = 1 OR customer_id = 2 OR customer_id = 7, men med tre verdier er det allerede tungvint. Med ti verdier blir det uleselig. IN løser dette på én linje.
IN tester om en verdi finnes i en liste du oppgir. Det er en renere måte å sjekke mot flere spesifikke verdier enn å lenke sammen OR-betingelser.
Grunnleggende syntaks
IN brukes i WHERE-setningen. Du oppgir en kommaseparert liste med verdier i parentes.
SELECT * FROM invoices WHERE customer_id IN (1, 2, 7);
Denne spørringen returnerer alle fakturaer der kunde-ID er 1, 2 eller 7. Det er identisk med å bruke tre OR-betingelser, men mye kortere og lettere å lese.
Sammenlignet med BETWEEN, som filtrerer på et sammenhengende intervall, lar IN deg plukke spesifikke verdier som ikke trenger å henge sammen. Kunde 1, 2 og 7 er ikke et intervall. De er tre konkrete verdier du vil ha.
IN med tekstverdier
Når du bruker IN med tekst, må hver verdi stå i apostrofer:
SELECT * FROM customers WHERE country IN ('Norway', 'Sweden', 'Denmark');
Denne gir deg alle kunder fra de tre skandinaviske landene. Legg merke til at hver verdi har sine egne apostrofer, og at verdiene er separert med komma.
Det er en vanlig feil å glemme apostrofene rundt tekstverdier. Uten apostrofer tolker SQL verdiene som kolonnenavn, og du får en feilmelding.
NOT IN: ekskluder fra listen
NOT IN gir deg det motsatte. Det returnerer alle rader der verdien ikke finnes i listen.
SELECT * FROM invoices WHERE customer_id NOT IN (1, 2, 7);
Her får du alle fakturaer bortsett fra de som tilhører kunde 1, 2 og 7. NOT IN er nyttig når det er enklere å spesifisere hva du vil ekskludere enn hva du vil inkludere.
Pass på med NULL-verdier og NOT IN. Hvis listen inneholder NULL (for eksempel NOT IN (1, 2, NULL)), gir spørringen ingen resultater. Det skyldes at SQL ikke kan avgjøre om en verdi er «ikke lik» NULL. Unngå å ha NULL i IN-listen, eller bruk IS NOT NULL som et eget filter.
IN med tall vs. tekst
Reglene er enkle: tall skrives uten apostrofer, tekst skrives med.
- Tall: WHERE customer_id IN (1, 2, 7)
- Tekst: WHERE country IN ('Norway', 'Sweden')
Blander du dette (for eksempel setter apostrofer rundt tall), vil noen databaser håndtere det greit, mens andre kan gi feil eller uventede resultater. Hold deg til riktig format for datatypen.
Kombinere IN med andre betingelser
IN fungerer sammen med AND, OR og alle andre operatorer i WHERE-setningen:
SELECT * FROM invoices WHERE customer_id IN (1, 2, 7) AND total > 5;
Denne gir deg fakturaer fra kunde 1, 2 eller 7 der totalbeløpet er over 5. Du kan kombinere IN med LIKE, BETWEEN og andre operatorer i samme spørring.
IN med underspørringer
En kraftig egenskap ved IN er at listen kan komme fra en annen spørring. I stedet for å skrive verdiene manuelt, kan du hente dem dynamisk:
SELECT * FROM customers WHERE customer_id IN (SELECT customer_id FROM invoices WHERE total > 10);
Denne finner alle kunder som har minst én faktura over 10. Underspørringen (den indre SELECT) produserer en liste med kunde-IDer, og den ytre spørringen bruker den listen med IN. Dette er et vanlig mønster som knytter sammen data fra flere tabeller uten å bruke JOIN.
Hvor mange verdier kan du ha i IN?
Det er ingen fast grense i SQLite, men i praksis bør du holde listen håndterbar. Har du hundrevis av verdier i IN-listen, er det ofte et tegn på at du bør bruke en underspørring eller en JOIN i stedet.
Ytelsesmessig er IN effektivt for korte lister. For lengre lister optimaliserer de fleste databaser automatisk, men en JOIN mot en midlertidig tabell kan være raskere i ekstreme tilfeller.
IN i hverdagen
IN er spesielt nyttig i rapportering og dataanalyse. Kanskje du har fått en liste over spesifikke produkter, ansatte eller regioner du skal analysere. I stedet for å bygge en lang kjede med OR-betingelser, limer du verdiene rett inn i en IN-liste.
Det er også vanlig å bruke IN for å filtrere på statusverdier. For eksempel kan du hente alle bestillinger med status 'sendt', 'levert' eller 'returnert' i én spørring. Det gir renere og mer vedlikeholdbar SQL enn alternativet med flere OR-betingelser.
Vanlige feil med IN
- Glemme apostrofer rundt tekst. WHERE country IN (Norway, Sweden) gir feil. Bruk apostrofer: IN ('Norway', 'Sweden').
- NULL i NOT IN-listen. NOT IN (1, 2, NULL) gir null resultater. Filtrer bort NULL-verdier separat.
- Bruke IN for intervaller. WHERE total IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) er tungvint. Bruk BETWEEN 1 AND 10 i stedet.
Neste steg
IN gir deg presis filtrering mot spesifikke verdier. Neste naturlige steg er å lære ORDER BY for å sortere resultatene dine, eller utforske GROUP BY for å gruppere og aggregere data.
Denne videoen er hentet fra kurset SQL for nybegynnere på Utdannet.no. I kurset bygger du opp SQL-ferdighetene dine steg for steg med praktiske øvelser mot en ekte database.



