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 | example@sqldat.com | | 2 | Bart | Pitt | (231) 465-3497 | example@sqldat.com | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | example@sqldat.com | | 6 | Burt | Tyson | (309) 565-0112 | example@sqldat.com | +-----------+-------------+------------+----------------+-------------------+
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 | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Woody | Eastwood | example@sqldat.com | +-------------+------------+-------------------+
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 'example@sqldat.com%.com'; Wynik:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | example@sqldat.com | +-------------+------------+------------------+
W tym przypadku nie znaliśmy adresu e-mail Barta, ale wiedzieliśmy, że zaczyna się od example@sqldat.com 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 | example@sqldat.com | | Burt | Tyson | example@sqldat.com | +-------------+------------+------------------+
[] 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 | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Boris | Trump | NULL | | Burt | Tyson | example@sqldat.com | +-------------+------------+-------------------+
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 | example@sqldat.com | +-------------+------------+-------------------+
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 | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Woody | Eastwood | example@sqldat.com | | Burt | Tyson | example@sqldat.com | +-------------+------------+-------------------+
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).