0Pricing
SQL Interview Prep · Lekcja

LIKE, symbole wieloznaczne i znaki ucieczki

Dopasowywanie wzorców, znaczenie procentu i podkreślenia oraz zabezpieczanie dosłownych symboli wieloznacznych

LIKE, symbole wieloznaczne i znaki ucieczki to bezpłatna lekcja SQL Interview Prep na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Interview Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Interview Prep zawiera 4 lekcji w sumie.

Dopasowywanie wzorców pod lupą rekrutera

LIKE wygląda prosto, ale kryje trzy klasyczne pułapki rekrutacyjne: pomylenie % z _, zapomnienie, że występujący w danych dosłowny znak procentu lub podkreślenia wymaga zmiany znaczenia, oraz niespodziankę związaną z wrażliwością na wielkość liter, która różni się w zależności od bazy danych.

W tej lekcji szczegółowo omówiono oba znaki wieloznaczne, klauzulę ESCAPE oraz zasady różniące poszczególne dialekty, które rekruter wykorzysta, aby odróżnić osoby początkujące od tych, które wdrażały rzeczywiste funkcje wyszukiwania.

Dwa znaki wieloznaczne

LIKE ma dokładnie dwa znaki wieloznaczne:

  • % dopasowuje zero lub więcej znaków
  • _ dopasowuje dokładnie jeden znak

Dlatego 'a%' dopasowuje wszystko, co zaczyna się od a, natomiast 'a_' dopasowuje dwuznakowy ciąg zaczynający się od a. Pomylenie tych znaków to najczęstszy błąd związany z LIKE.

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

Znak procentu w dowolnym miejscu

Umiejscowienie znaku % określa, gdzie zakotwiczone jest dopasowanie:

  • '%son' kończy się na son (Johnson, Mason)
  • '%mary%' zawiera mary w dowolnym miejscu
  • 'J%n' zaczyna się od J i kończy na n

Samotny znak '%' dopasowuje każdy wiersz, który nie ma wartości NULL. Wartości NULL nigdy nie pasują do żadnego wzorca LIKE, w tym do '%'.

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

Podkreślenie dla stałej długości

Symbol _ dopasowuje pojedynczy, dowolny znak, dlatego przydaje się w przypadku kodów o stałej długości. 'A__' dopasowuje dokładnie trzy znaki zaczynające się od A — ani mniej, ani więcej.

Rekruterzy sprawdzają to na przykładzie kodów produktów lub kodów krajów. Kandydat, który na prośbę o trzyznakowy kod zaczynający się od A napisze 'A%', popełnia subtelny błąd, zwracając ciągi zaczynające się od A o dowolnej długości.

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

Gdy % i _ występują w danych

Co zrobić, jeśli trzeba znaleźć wartości zawierające dosłowny znak procentu, na przykład etykietę rabatową „50% off”? Zapis LIKE '%50%%' nie zadziała, ponieważ końcowy znak % zostanie potraktowany jako symbol wieloznaczny, a nie znak dosłowny.

Należy poinformować SQL, że konkretny znak ma być traktowany dosłownie. Służy do tego klauzula ESCAPE.

Klauzula ESCAPE

Za pomocą ESCAPE należy zadeklarować znak zmiany znaczenia, a następnie poprzedzać nim każdy znak wieloznaczny, który ma być traktowany dosłownie. Tutaj ! jest znakiem zmiany znaczenia, więc !% oznacza dosłowny znak procentu.

Ten zapis wyszukuje wartości zawierające dosłowny tekst 50% w dowolnym miejscu. Znak zmiany znaczenia może być dowolny; należy wybrać taki, który nie występuje w wyszukiwanym tekście.

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

Escapowanie dosłownego podkreślenia

Podkreślenia często występują w nazwach użytkowników i identyfikatorach, a niepoprzedzony znakiem zmiany znaczenia symbol _ po cichu dopasowuje dowolny znak. Aby znaleźć adresy e-mail zaczynające się dosłownie od „a_b”, należy zmienić znaczenie podkreślenia.

Bez tego znaku 'a_b%' pasowałoby również do „axb”, „a9b” i podobnych wartości. Ten błąd nieustannie trafia do środowiska produkcyjnego, ponieważ zapytanie bez zmiany znaczenia nadal zwraca wiersze wyglądające wiarygodnie.

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

Wrażliwość na wielkość liter zależy od bazy danych

To, czy LIKE rozróżnia wielkość liter, zależy od silnika i sortowania:

  • PostgreSQL: LIKE rozróżnia wielkość liter; do wyszukiwania bez rozróżniania wielkości liter służy ILIKE
  • MySQL: zależy od sortowania kolumny, które często domyślnie nie rozróżnia wielkości liter
  • SQL Server: zależy od ustawienia sortowania

Przenośnym i jednoznacznym rozwiązaniem jest zamiana obu stron na małe litery.

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

Ukryty koszt wydajnościowy

Wiodący symbol wieloznaczny, taki jak '%son', nie może użyć zwykłego indeksu B-tree, ponieważ indeks jest uporządkowany według prefiksu, a początek wyszukiwania nie został zakotwiczony. Silnik musi przeskanować każdy wiersz.

'son%' — końcowy symbol wieloznaczny przy zakotwiczonym prefiksie — może użyć indeksu. Rekruterzy uwielbiają pytać, dlaczego wyszukiwanie za pomocą LIKE działa wolno; zwykle odpowiedzią jest wiodący znak %.

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

Alternatywy dla LIKE

Gdy LIKE nie wystarcza, warto wspomnieć o alternatywach, aby pokazać szerszą wiedzę:

  • SIMILAR TO i wyrażenia regularne POSIX (~, ~*) w PostgreSQL — do obsługi prawdziwych wyrażeń regularnych
  • indeksy wyszukiwania pełnotekstowego dla dużych korpusów tekstu swobodnego
  • indeksy trygramów (pg_trgm), które przyspieszają wyszukiwanie z wiodącym symbolem wieloznacznym

Wymienienie tych rozwiązań pokazuje, że wiadomo, iż LIKE wyznacza poziom podstawowy, a nie granicę możliwości wyszukiwania tekstowego.

Bezpieczne tworzenie wzorców LIKE na podstawie danych użytkownika

Rekruterzy często pytają: jak wyszukiwać wpisany przez użytkownika termin za pomocą LIKE, nie powodując problemów? Należy wskazać dwa zagrożenia:

  • Wstrzyknięcie SQL — wartość należy przekazywać jako parametr; nigdy nie należy konkatenować surowych danych wejściowych z ciągiem SQL.
  • Nieescapowane symbole wieloznaczne — jeśli dane wejściowe zawierają % lub _, należy je poprzedzić znakiem ucieczki, aby były dopasowywane dosłownie.

Najpierw należy przekazać wartość jako parametr, a następnie dodać własne symbole wieloznaczne w zapytaniu.

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

Szybki test

Proszę przypomnieć sobie różnicę między dwoma znakami wieloznacznymi.

Podsumowanie

Najważniejsze wnioski:

  • % dopasowuje zero lub więcej znaków; _ dopasowuje dokładnie jeden
  • Aby dopasować występujący w danych dosłowny znak % lub _, należy zadeklarować znak zmiany znaczenia za pomocą ESCAPE i poprzedzić nim symbol wieloznaczny
  • Wrażliwość na wielkość liter zależy od silnika; zastosowanie LOWER() po obu stronach jest przenośnym rozwiązaniem (Postgres ma ILIKE)
  • Wiodący symbol wieloznaczny wymusza pełne skanowanie, natomiast zakotwiczony prefiks może korzystać z indeksu

Podkreślenie bez zmiany znaczenia to cichy błąd: nadal zwraca wiarygodnie wyglądające wiersze.

Często zadawane pytania

Czy lekcja „LIKE, symbole wieloznaczne i znaki ucieczki” jest bezpłatna?

Tak — pełny tekst „LIKE, symbole wieloznaczne i znaki ucieczki” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Interview Prep, przejdź na CoddyKit PRO. Kurs SQL Interview Prep zawiera 4 lekcji w sumie.

Co nauczysz się w „LIKE, symbole wieloznaczne i znaki ucieczki”?

Dopasowywanie wzorców, znaczenie procentu i podkreślenia oraz zabezpieczanie dosłownych symboli wieloznacznych Ćwiczysz SQL Interview Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Interview Prep?

Nie wymagamy żadnego doświadczenia. SQL Interview Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „LIKE, symbole wieloznaczne i znaki ucieczki”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Interview Prep?

Tak. Każda lekcja SQL Interview Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Pierwszeństwo AND/OR i używanie nawiasów
  2. BETWEEN, IN i granice włączne
  3. LIKE, symbole wieloznaczne i znaki ucieczki
  4. Filtrowanie według wartości obliczanych
← Powrót do SQL Interview Prep