LIKE w SQL


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ę.