Förberedelser inför SQL-intervjun · Lektion

LIKE, jokertecken och escape

Mönstermatchning, procent kontra understreck och hur du escaper bokstavliga jokertecken

Lektion 3 av 413 steg

LIKE, jokertecken och escape är en gratis lektion i Förberedelser inför SQL-intervjun på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Förberedelser inför SQL-intervjun, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Förberedelser inför SQL-intervjun innehåller totalt 4 lektioner.

Mönstermatchning under intervjun

LIKE ser enkelt ut men döljer tre klassiska intervjufällor: att förväxla % med _, att glömma att ett bokstavligt procenttecken eller understreck i datan måste escap:as och den överraskande skiftlägeskänsligheten som varierar mellan databaser.

Den här lektionen går igenom de två jokertecknen, ESCAPE-satsen och reglerna mellan olika SQL-dialekter som en intervjuare kommer att undersöka för att skilja juniorer från personer som har levererat riktiga sökfunktioner.

De två jokertecknen

LIKE har exakt två jokertecken:

  • % matchar noll eller fler tecken
  • _ matchar exakt ett tecken

'a%' matchar alltså allt som börjar med a, medan 'a_' matchar en sträng med två tecken som börjar med a. Att blanda ihop dessa är det vanligaste LIKE-felet.

SELECT *
FROM customers
WHERE name LIKE 'A%';
-- every name beginning with A

Procenttecknet var som helst

Placera % för att styra var matchningen förankras:

  • '%son' slutar på son (Johnson, Mason)
  • '%mary%' innehåller mary var som helst
  • 'J%n' börjar med J och slutar med n

Ett ensamt '%' matchar varje rad som inte är NULL. NULL-värden matchar aldrig något LIKE-mönster, inte ens '%'.

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

Understreck för fast längd

_ matchar ett godtyckligt enskilt tecken och är användbart för koder med fast bredd. 'A__' matchar exakt tre tecken som börjar med A, varken fler eller färre.

Intervjuare testar detta med produktkoder eller landskoder. Kandidaten som skriver 'A%' när frågan gäller en tresiffrig kod som börjar med A har gjort ett subtilt fel och returnerar A-följt av vad som helst.

SELECT *
FROM products
WHERE sku LIKE 'A__';
-- A followed by exactly two more characters

När % och _ finns i datan

Vad gör man om man behöver hitta värden som bokstavligen innehåller ett procenttecken, till exempel en rabattetikett som '50% rabatt'? Att skriva LIKE '%50%%' fungerar inte, eftersom det avslutande % behandlas som ett jokertecken och inte som ett bokstavligt tecken.

SQL måste få veta att ett visst tecken ska behandlas bokstavligt. Det är det som ESCAPE-satsen används till.

ESCAPE-satsen

Deklarera ett escape-tecken med ESCAPE och sätt det före varje jokertecken som ska behandlas bokstavligt. Här är ! escape-tecknet, så !% betyder ett bokstavligt procenttecken.

Detta hittar värden som innehåller den bokstavliga texten 50% var som helst. Escape-tecknet kan väljas fritt; välj ett som inte förekommer i söktexten.

SELECT *
FROM promos
WHERE label LIKE '%50!%%' ESCAPE '!';
-- matches a literal '50%' anywhere in label

Escape av ett bokstavligt understreck

Understreck förekommer ofta i användarnamn och identifierare, och ett understreck utan escape matchar obemärkt vilket tecken som helst. För att hitta e-postadresser som bokstavligen börjar med 'a_b' måste understrecket escap:as.

Utan escape skulle 'a_b%' också matcha 'axb', 'a9b' och så vidare. Det här felet går ständigt ut i produktion eftersom frågan utan escape fortfarande returnerar rader som ser rimliga ut.

SELECT *
FROM users
WHERE handle LIKE 'a!_b%' ESCAPE '!';
-- handle starting with the literal text a_b

Skiftlägeskänslighet varierar mellan databaser

Om LIKE är skiftlägeskänsligt beror på motorn och kollationen:

  • PostgreSQL: LIKE är skiftlägeskänsligt; använd ILIKE för skiftlägesokänsliga sökningar
  • MySQL: beror på kolumnens kollation och är ofta skiftlägesokänsligt som standard
  • SQL Server: beror på kollationsinställningen

Det portabla och tydliga sättet är att göra båda sidorna till gemener.

SELECT *
FROM customers
WHERE LOWER(name) LIKE 'a%';

Den dolda prestandakostnaden

Ett inledande jokertecken som '%son' kan inte använda ett normalt B-tree-index, eftersom indexet är sorterat efter prefix och början inte är förankrad. Motorn måste skanna varje rad.

'son%' (avslutande jokertecken med förankrat prefix) kan använda ett index. Intervjuare frågar gärna varför en LIKE-sökning är långsam; det inledande % är oftast svaret.

-- index-friendly (anchored prefix):
WHERE name LIKE 'Smi%'
-- forces a scan (leading wildcard):
WHERE name LIKE '%mith'

Alternativ till LIKE

När LIKE inte räcker kan du nämna alternativen för att visa bredare kunskap:

  • SIMILAR TO och POSIX-reguljära uttryck (~, ~*) i PostgreSQL för riktiga reguljära uttryck
  • Fulltextindex för stora textkorpusar
  • Trigramindex (pg_trgm) som gör sökningar med inledande jokertecken snabba

Att nämna dessa visar att du vet att LIKE är grundnivån, inte taket, för textsökning.

Skapa LIKE-mönster säkert från användarinmatning

Intervjuare frågar ofta: hur söker ni efter en term som användaren har skrivit in med LIKE utan att något går sönder? Två risker att nämna:

  • Injektion — bind värdet som en parameter; sammanfoga aldrig rå indata med SQL-strängen.
  • Oescapade jokertecken — om indata själv innehåller % eller _ måste ni escapa dem så att de matchar bokstavligt.

Bind parametern och lägg sedan till era egna jokertecken i frågan.

-- $1 is bound as a parameter; wildcards are added in SQL
SELECT *
FROM products
WHERE name LIKE '%' || replace(replace($1, '_', '\_'), '%', '\%') || '%' ESCAPE '\';

Snabbkontroll

Kom ihåg skillnaden mellan de två jokertecknen.

Sammanfattning

Viktiga slutsatser:

  • % matchar noll eller fler tecken; _ matchar exakt ett
  • För att matcha ett bokstavligt % eller _ i datan deklarerar du ett escape-tecken och sätter det före jokertecknet
  • Skiftlägeskänsligheten varierar mellan motorer; LOWER() på båda sidor är den portabla lösningen (Postgres har ILIKE)
  • Ett inledande jokertecken tvingar fram en fullständig skanning; ett förankrat prefix kan använda ett index

Ett _ utan escape är ett tyst fel: det returnerar fortfarande rader som ser rimliga ut.

Gratis att börja

Lär dig SQL med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”LIKE, jokertecken och escape” gratis?

Ja – hela texten till ”LIKE, jokertecken och escape” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Förberedelser inför SQL-intervjun, kan Ni uppgradera till CoddyKit PRO. Kursen i Förberedelser inför SQL-intervjun innehåller totalt 4 lektioner.

Vad lär jag mig i ”LIKE, jokertecken och escape”?

Mönstermatchning, procent kontra understreck och hur du escaper bokstavliga jokertecken Ni övar på Förberedelser inför SQL-intervjun med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Förberedelser inför SQL-intervjun?

Du behöver inga förkunskaper. Utbildningen i Förberedelser inför SQL-intervjun på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”LIKE, jokertecken och escape”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Förberedelser inför SQL-intervjun-lektionen?

Ja. Varje Förberedelser inför SQL-intervjun-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. AND/OR-prioritet och parenteser
  2. BETWEEN, IN och inkluderande gränser
  3. LIKE, jokertecken och escape
  4. Filtrera på beräknade värden
← Tillbaka till Förberedelser inför SQL-intervjun