LIKE
Klauzula LIKE w języku SQL jest używana w warunku WHERE do wyszukiwania wierszy, których wartości w danej kolumnie tekstowej pasują do określonego wzorca. W odróżnieniu od operatora =, który szuka identycznego ciągu znaków, LIKE pozwala na dopasowanie częściowe przy użyciu znaków specjalnych (tzw. wildcards).
Kluczowe znaki specjalne
% (procent) – zastępuje dowolną liczbę znaków (zero, jeden lub więcej).
_ (podkreślnik) – zastępuje dokładnie jeden, dowolny znak.
Przykłady zastosowania
LIKE 'A%' – znajdzie teksty zaczynające się na literę „A” (np. „Adam”, „Alicja”).
LIKE '%ski' – znajdzie teksty kończące się na „ski” (np. „Kowalski”, „Nowakowski”).
LIKE '%on%' – znajdzie teksty zawierające „on” w dowolnym miejscu (np. „Rower”, „Monitor”).
LIKE 'B_r' – znajdzie teksty trzyliterowe zaczynające się na „B” i kończące na „r” (np. „Bar”, „Bor”).
Ważne! Wielkość liter: W wielu bazach danych (np. Oracle) LIKE jest czułe na wielkość liter (case-sensitive), chyba że użyjesz specjalnych funkcji lub operatora ILIKE (np. w PostgreSQL).
NOT LIKE
Możesz zaprzeczyć warunek, aby znaleźć wiersze, które nie pasują do wzorca.
Wydajność:
Wyszukiwanie zaczynające się od % (np. LIKE '%tekst’) uniemożliwia bazie danych skorzystanie z indeksów, co może spowolnić działanie na dużych zbiorach danych.
Znaki specjalne jako tekst: Jeśli chcesz wyszukać sam znak % lub _, musisz użyć klauzuli ESCAPE
Przykłady:
Przeszukiwanie początku i końca tekstu
WHERE miasto LIKE 'Warsz%' – wszystkie miasta zaczynające się na „Warsz” (Warszawa, Warszewo).
WHERE email LIKE '%@gmail.com' – tylko adresy w domenie Gmail.
WHERE kod LIKE '00-%' – kody pocztowe zaczynające się od 00-.
Szukanie frazy w środku (najczęstsze)
WHERE nazwisko LIKE '%kowalski%' – znajdzie „Kowalski”, ale też „Nowak-Kowalski” czy „Kowalskiewicz”.
WHERE opis LIKE '%pilne%' – wyszuka słowo „pilne” w dowolnym miejscu dłuższego tekstu.
Precyzyjna liczba znaków (użycie _)
WHERE model LIKE 'L_200' – znajdzie L200, LX200, ale nie L1000 (podkreślnik to dokładnie jeden znak).
WHERE id LIKE '___' – znajdzie wszystkie identyfikatory składające się z dokładnie 3 znaków.
WHERE tel LIKE '___-___-___' – format numeru telefonu (np. 123-456-789).
Wykluczenia (NOT LIKE)
WHERE login NOT LIKE 'test%' – ukrywa konta testowe (zaczynające się od „test”).
WHERE domena NOT LIKE '%.ru' – pomija adresy z konkretną końcówką kraju.
Łączenie warunków
WHERE (email LIKE '%@wp.pl' OR email LIKE '%@onet.pl') – szukanie w dwóch konkretnych domenach jednocześnie.
Problem znaku specjalnego (ESCAPE)
Jeśli szukasz tekstu, który sam zawiera % (np. rabat 10%):
WHERE znizka LIKE '%10\%’ ESCAPE '\’ – znak po backslashu jest traktowany jako zwykły tekst, a nie wildcard.
Zaawansowane wzorce (zależne od silnika bazy danych)
W niektórych bazach (np. SQL Server) możesz używać nawiasów kwadratowych do definiowania zakresów:
WHERE imie LIKE '[AB]%’ – imiona zaczynające się na A lub B.
WHERE produkt LIKE '%[0-9]%’ – nazwy zawierające przynajmniej jedną cyfrę.