W SQL LIKE
operator pozwala na dopasowanie wzorca. Określa, czy określony ciąg znaków pasuje do określonego wzorca.
Wzór może zawierać zwykłe znaki i symbole wieloznaczne.
Tabela źródłowa
Poniższa tabela jest używana jako przykłady na tej stronie.
SELECT * FROM Owners;
Wynik:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Przykład
Oto przykład pokazujący, jak LIKE
operator pracuje.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%.com';
Wynik:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Woody | Eastwood | [email protected] | +-------------+------------+-------------------+
W tym przykładzie użyłem LIKE
operator w połączeniu z %
operator symboli wieloznacznych do zwracania właścicieli, których adresy e-mail kończą się na .com
.
LIKE
może być również używany z innymi operatorami ciągów, takimi jak _
, []
i [^]
.
%
Operator wieloznaczny
%
operator symboli wieloznacznych dopasowuje dowolny ciąg składający się z zera lub więcej znaków. Może być używany jako prefiks lub sufiks, a także może być używany w środku ciągu.
Zwykle jest używany jako sufiks i ma ograniczone zastosowanie w środku wzorców, chociaż istnieją pewne uzasadnione przypadki użycia go w środku wzorca, takie jak:
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '[email protected]%.com';
Wynik:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | [email protected] | +-------------+------------+------------------+
W tym przypadku nie znaliśmy adresu e-mail Barta, ale wiedzieliśmy, że zaczyna się od [email protected]
i zakończył się na .com
. Dlatego mogliśmy użyć LIKE
w połączeniu z %
operator wieloznaczny, aby wypełnić resztę.
Pamiętaj, że ta technika może zwrócić wiele nieistotnych wierszy, w zależności od danych i sposobu konstruowania instrukcji SQL.
_
Operator wieloznaczny
Podkreślenie (_
) operator wieloznaczny pasuje do dowolnego pojedynczego znaku.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE 'b_rt';
Wynik:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | [email protected] | | Burt | Tyson | [email protected] | +-------------+------------+------------------+
[]
Operator wieloznaczny
Nawiasy ([]
) operator symboli wieloznacznych dopasowuje dowolny pojedynczy znak z określonego zakresu lub zestawu określonego w nawiasach.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[bh]%';
Wynik:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Boris | Trump | NULL | | Burt | Tyson | [email protected] | +-------------+------------+-------------------+
Tutaj połączyłem symbol wieloznaczny nawiasów ze znakiem procentu, aby zwrócić wszystkich właścicieli, których imię zaczyna się od b
lub h
.
Zauważ, że operator nawiasów nie jest powszechnie stosowany w DBMS. Jest obsługiwany w SQL Server, ale nie jest obsługiwany w MySQL, Oracle, DB2 i SQLite. Sprawdź dokumentację DBMS, aby sprawdzić, czy obsługuje ten operator.
[^]
Operator wieloznaczny
Znak karetki (^
) może być użyty do zanegowania wyników przy użyciu operatora nawiasów.
Dlatego zmieniamy poprzedni przykład, aby zwracać tylko tych właścicieli, których imię nie zacznij od b
lub h
.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[^bh]%';
Wynik:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Nancy | Simpson | NULL | | Woody | Eastwood | [email protected] | +-------------+------------+-------------------+
Wartości NULL
Procent (%
) symbol wieloznaczny pasuje do wszystkiego – prawie. Jedna rzecz, która nie pasuje, to NULL
.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%';
Wynik:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Woody | Eastwood | [email protected] | | Burt | Tyson | [email protected] | +-------------+------------+-------------------+
W naszej tabeli znajdują się dwa wiersze z NULL
w Email
kolumna, ale te nie są tutaj zwracane.
Wydajność
Zapytania zawierające LIKE
operator może działać znacznie wolniej niż inne zapytania i prawdopodobnie powinieneś unikać używania LIKE
operatora, chyba że naprawdę tego potrzebujesz. Korzystanie z %
operator jako prefiks może być szczególnie powolny.
Nie oznacza to, że w ogóle nie powinieneś go używać. LIKE
Operator jest integralną częścią SQL i napotkasz wiele scenariuszy, w których będzie to jedyna opcja (lub przynajmniej najlepsza opcja).