Slik søker du i tekst med LIKE i SQL

Lær å bruke LIKE i SQL for tekstsøk med jokertegn. Prosent og understrek forklart med eksempler. Gratis video og guide.

Du vet at kunden heter noe som starter med «B», men du husker ikke hele navnet. Eller du skal finne alle e-postadresser fra Gmail. Med vanlig = kan du bare søke etter eksakte verdier. LIKE lar deg søke etter mønstre.

LIKE er SQL sin versjon av jokertegnsøk. Du kombinerer det med spesielle tegn som representerer «hva som helst», og plutselig kan du filtrere tekst på en helt annen måte enn med =.

Prosent-tegnet: % matcher alt

Det viktigste jokertegnet i LIKE er %. Det matcher null, ett eller flere vilkårlige tegn. Tenk på det som «hva som helst her».

SELECT * FROM customers WHERE first_name LIKE 'B%';

Denne spørringen finner alle kunder med fornavn som starter med B. Prosent-tegnet etter B betyr «etterfulgt av hva som helst». Det matcher Barbara, Bjørn, B og alle andre navn som begynner med B.

Du kan plassere % hvor som helst i mønsteret:

  • 'B%' matcher alt som starter med B
  • '%son' matcher alt som slutter med «son»
  • '%NA%' matcher alt som inneholder «NA» et sted i teksten

Understrek: _ matcher nøyaktig ett tegn

Mens % matcher vilkårlig mange tegn, matcher understrek (_) nøyaktig ett tegn. Det er nyttig når du vet lengden på det du leter etter, men ikke alle tegnene.

SELECT * FROM customers WHERE first_name LIKE '_a%';

Denne finner kunder der det andre tegnet i fornavnet er «a». Understreken matcher det første tegnet (uansett hva det er), «a» matcher bokstaven a, og % matcher resten av navnet. Resultatet kan inkludere navn som Hans, Karen eller Lars.

Du kan kombinere flere understreker:

SELECT * FROM customers WHERE postal_code LIKE '____';

Fire understreker matcher postnummer med nøyaktig fire tegn. Det er en enkel måte å finne verdier med en bestemt lengde.

Finne e-postadresser fra et bestemt domene

Et vanlig bruksområde for LIKE er å filtrere e-postadresser. Si at du vil finne alle kunder med Gmail-adresse:

SELECT * FROM customers WHERE email LIKE '%@gmail.com';

Prosent-tegnet i starten matcher brukernavnet (det som kommer før @), og resten av mønsteret matcher det eksakte domenet. Du kan bruke samme teknikk for å finne adresser fra en bestemt bedrift eller et bestemt land.

Store og små bokstaver

Hvordan LIKE håndterer store og små bokstaver avhenger av databasen. I SQLite er LIKE som standard ikke følsom for store og små bokstaver for ASCII-tegn. Det betyr at LIKE 'b%' og LIKE 'B%' gir samme resultat.

I andre databaser som PostgreSQL er LIKE derimot følsom for store og små bokstaver. Der kan du bruke ILIKE for å ignorere forskjellen. Det er lurt å vite hvilken database du jobber med.

NOT LIKE: ekskluder et mønster

Noen ganger vet du hva du ikke vil ha. NOT LIKE ekskluderer rader som matcher mønsteret.

SELECT * FROM customers WHERE email NOT LIKE '%@gmail.com';

Denne gir deg alle kunder som ikke har Gmail-adresse. NOT LIKE fungerer med alle de samme jokertegnene som LIKE.

Kombinere LIKE med andre betingelser

LIKE brukes i WHERE-setningen, så du kan kombinere det fritt med AND, OR og andre operatorer:

SELECT * FROM customers WHERE first_name LIKE 'B%' AND country = 'Norway';

Her får du norske kunder med fornavn som starter med B. Du kan også kombinere flere LIKE-betingelser:

SELECT * FROM customers WHERE first_name LIKE 'A%' OR first_name LIKE 'B%';

Denne finner kunder med fornavn som starter med enten A eller B.

Når bør du bruke LIKE fremfor =?

Bruk = når du vet den eksakte verdien du leter etter. Bruk LIKE når du trenger mønstersøk. LIKE uten jokertegn fungerer teknisk sett som =, men det er ryddigere å bruke = for eksakte treff.

LIKE er også tregere enn = fordi databasen må evaluere mønsteret for hver rad. For store tabeller kan det lønne seg å ha en indeks på kolonnen du søker i, spesielt hvis mønsteret starter med en fast tekst (som 'B%'). Mønstre som starter med % (som '%son') kan ikke bruke indekser like effektivt.

Praktiske bruksområder

LIKE er nyttig i mange hverdagslige situasjoner. Du kan finne produkter som inneholder et bestemt ord i navnet, filtrere telefonnumre som starter med en bestemt landskode, eller finne adresser i en bestemt gate. I rapportering brukes LIKE ofte for å søke i fritekstfelter der verdiene ikke er standardiserte.

Et annet vanlig eksempel er å finne varianter av et navn. Kanskje noen kunder er registrert som «Hansen» og andre som «Hanssen». Med LIKE 'Hans_n' fanger du begge variantene. For mer avanserte søk i tekst tilbyr noen databaser fulltext-søk, men for enkle mønstre er LIKE mer enn godt nok.

Vanlige feil med LIKE

  • Glemme apostrofer. Mønsteret må stå i apostrofer, akkurat som andre tekstverdier i WHERE.
  • Forveksle % og _. Prosent matcher vilkårlig mange tegn, understrek matcher nøyaktig ett. Bruker du feil, får du enten for mange eller for få resultater.
  • Anta at store/små bokstaver behandles likt overalt. Sjekk dokumentasjonen for din database.

Neste steg

LIKE gir deg fleksibel tekstfiltrering. Skal du sjekke mot en fast liste med verdier, er IN et bedre valg. Trenger du et tallintervall, sjekk BETWEEN. Alle disse operatorene brukes sammen med WHERE og kan kombineres fritt.

Denne videoen er hentet fra kurset SQL for nybegynnere på Utdannet.no. Der lærer du å skrive spørringer mot en ekte database med praktiske øvelser underveis.