LIKE, wildcards en escaping
Patroonherkenning, procenttekens versus underscores en het escapen van letterlijke wildcardtekens
LIKE, wildcards en escaping is een gratis Voorbereiding op SQL-sollicitatiegesprekken-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Voorbereiding op SQL-sollicitatiegesprekken. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Voorbereiding op SQL-sollicitatiegesprekken bevat in totaal 4 lessen.
Patroonvergelijking onder interviewdruk
LIKE lijkt eenvoudig, maar verbergt drie klassieke valkuilen tijdens interviews: % verwarren met _, vergeten dat een letterlijk procentteken of onderstrepingsteken in de gegevens moet worden geëscapet en de verrassing rond hoofdlettergevoeligheid, die per database verschilt.
In deze les oefen je met de twee jokertekens, de ESCAPE-clausule en de regels die per SQL-dialect verschillen en waarmee een interviewer onderscheid maakt tussen beginners en mensen die echte zoekfuncties in productie hebben gebracht.
De twee jokertekens
LIKE heeft precies twee jokertekens:
%komt overeen met nul of meer tekens_komt overeen met precies één teken
'a%' komt dus overeen met alles wat met a begint, terwijl 'a_' overeenkomt met een tekenreeks van twee tekens die met a begint. Deze twee door elkaar halen is de belangrijkste LIKE-fout.
SELECT *
FROM customers
WHERE name LIKE 'A%';
-- every name beginning with AProcentteken op elke positie
Plaats het %-teken om te bepalen waar de overeenkomst begint en eindigt:
'%son'eindigt op son (Johnson, Mason)'%mary%'bevat mary ergens'J%n'begint met J en eindigt op n
Een los '%'-teken komt overeen met elke niet-NULL-rij. NULL-waarden komen nooit overeen met een LIKE-patroon, ook niet met '%'.
SELECT *
FROM customers
WHERE email LIKE '%@gmail.com';Onderstrepingsteken voor een vaste lengte
_ komt overeen met één willekeurig teken en is handig voor codes met een vaste lengte. 'A__' komt overeen met precies drie tekens die met A beginnen, niet meer en niet minder.
Interviewers testen dit met productcodes of landcodes. De kandidaat die 'A%' schrijft wanneer om een drie tekens lange code wordt gevraagd die met A begint, zit er subtiel naast: de query levert A-gevolgd-door-willekeurig-wat op.
SELECT *
FROM products
WHERE sku LIKE 'A__';
-- A followed by exactly two more charactersWanneer % en _ in de gegevens voorkomen
Wat doe je als je waarden wilt vinden die letterlijk een procentteken bevatten, zoals een kortingslabel '50% korting'? LIKE '%50%%' schrijven werkt niet, omdat het laatste %-teken als jokerteken wordt behandeld en niet als letterlijk teken.
Je moet SQL vertellen dat één specifiek teken letterlijk is. Daarvoor dient de ESCAPE-clausule.
De ESCAPE-clausule
Declareer een escape-teken met ESCAPE en zet het voor elk jokerteken dat je letterlijk wilt behandelen. Hier is ! het escape-teken, dus !% betekent een letterlijk procentteken.
Hiermee vind je waarden die de letterlijke tekst 50% ergens bevatten. Het escape-teken mag je zelf kiezen; kies er een dat niet in je zoektekst voorkomt.
SELECT *
FROM promos
WHERE label LIKE '%50!%%' ESCAPE '!';
-- matches a literal '50%' anywhere in labelEen letterlijk onderstrepingsteken escapen
Onderstrepingstekens komen voor in gebruikersnamen en identificaties, en een niet-geëscapet _-teken komt stilletjes met elk teken overeen. Om e-mailadressen te vinden die letterlijk met 'a_b' beginnen, moet je het onderstrepingsteken escapen.
Zonder het escape-teken zou 'a_b%' ook overeenkomen met 'axb', 'a9b' enzovoort. Deze fout komt voortdurend in productie terecht, omdat de query zonder escape nog steeds rijen oplevert die er aannemelijk uitzien.
SELECT *
FROM users
WHERE handle LIKE 'a!_b%' ESCAPE '!';
-- handle starting with the literal text a_bHoofdlettergevoeligheid verschilt per database
Of LIKE hoofdlettergevoelig is, hangt af van de database-engine en de sortering:
- PostgreSQL:
LIKEis hoofdlettergevoelig; gebruikILIKEvoor hoofdletterongevoelige vergelijkingen - MySQL: hangt af van de kolomsortering en is standaard vaak hoofdletterongevoelig
- SQL Server: hangt af van de sorteringsinstelling
De database-onafhankelijke, expliciete aanpak is om beide kanten naar kleine letters om te zetten.
SELECT *
FROM customers
WHERE LOWER(name) LIKE 'a%';De verborgen prestatiekosten
Een jokerteken aan het begin, zoals '%son', kan geen normale B-tree-index gebruiken, omdat de index op voorvoegsel is geordend en je het begin niet hebt vastgelegd. De database-engine moet elke rij doorlopen.
'son%', met een jokerteken aan het einde en een vastgelegd voorvoegsel, kan wel een index gebruiken. Tijdens interviews wordt graag gevraagd waarom een LIKE-zoekopdracht traag is; het voorloopteken % is meestal het antwoord.
-- index-friendly (anchored prefix):
WHERE name LIKE 'Smi%'
-- forces a scan (leading wildcard):
WHERE name LIKE '%mith'Verder dan LIKE
Als LIKE niet volstaat, noem dan deze alternatieven om te laten zien dat je diepgang hebt:
SIMILAR TOen POSIX-reguliere expressies (~,~*) in PostgreSQL voor echte reguliere expressies- Indexen voor zoeken in volledige tekst voor grote verzamelingen vrije tekst
- Trigramindexen (pg_trgm) om zoekopdrachten met een jokerteken aan het begin snel te maken
Als je deze noemt, laat je zien dat LIKE het beginpunt is, niet het eindpunt, van tekstzoeken.
LIKE-patronen veilig opbouwen vanuit gebruikersinvoer
Interviewers vragen vaak: hoe zoek je met LIKE naar een door de gebruiker ingevoerde term zonder dat er iets misgaat? Benoem twee risico's:
- Injectie — bind de waarde als parameter; voeg onbewerkte invoer nooit samen met de SQL-tekenreeks.
- Niet-geëscapete jokertekens — als de invoer zelf
%of_bevat, escapen je die zodat ze letterlijk worden gevonden.
Bind de parameter en voeg daarna je eigen jokertekens toe in de query.
-- $1 is bound as a parameter; wildcards are added in SQL
SELECT *
FROM products
WHERE name LIKE '%' || replace(replace($1, '_', '\_'), '%', '\%') || '%' ESCAPE '\';Snelle controle
Onthoud het verschil tussen de twee jokertekens.
Samenvatting
Belangrijkste punten:
%komt overeen met nul of meer tekens;_komt overeen met precies één teken- Declareer een
ESCAPE-teken en zet het voor het jokerteken om een letterlijk%- of_-teken in de gegevens te vinden - Hoofdlettergevoeligheid verschilt per database-engine;
LOWER()aan beide kanten is de database-onafhankelijke oplossing (Postgres heeftILIKE) - Een jokerteken aan het begin dwingt een volledige scan af; een vastgelegd voorvoegsel kan een index gebruiken
Een niet-geëscapet _-teken is een stille fout: de query levert nog steeds aannemelijke rijen op.
Leer SQL met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 30
- Lessen
- 120
Veelgestelde vragen
Is de les “LIKE, wildcards en escaping” gratis?
Ja — de volledige tekst van “LIKE, wildcards en escaping” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Voorbereiding op SQL-sollicitatiegesprekken wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Voorbereiding op SQL-sollicitatiegesprekken bevat in totaal 4 lessen.
Wat leer ik in “LIKE, wildcards en escaping”?
Patroonherkenning, procenttekens versus underscores en het escapen van letterlijke wildcardtekens Je oefent met Voorbereiding op SQL-sollicitatiegesprekken door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Voorbereiding op SQL-sollicitatiegesprekken te beginnen?
Ervaring vooraf is niet nodig. Voorbereiding op SQL-sollicitatiegesprekken op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “LIKE, wildcards en escaping”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Voorbereiding op SQL-sollicitatiegesprekken?
Ja. Elke les over Voorbereiding op SQL-sollicitatiegesprekken bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- AND/OR-prioriteit en haakjesgebruik
- BETWEEN, IN en inclusieve grenzen
- LIKE, wildcards en escaping
- Filteren op berekende waarden