В SQL, LIKE оператор ви позволява да правите съвпадение на шаблони. Той определя дали конкретен символен низ съответства на определен модел.
Моделът може да включва обикновени знаци и заместващи знаци.
Изходна таблица
Следната таблица се използва за примерите на тази страница.
SELECT * FROM Owners; Резултат:
+-----------+-------------+------------+----------------+-------------------+ | 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 | +-----------+-------------+------------+----------------+-------------------+
Пример
Ето пример, за да демонстрирате как LIKE оператор работи.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%.com'; Резултат:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Woody | Eastwood | example@sqldat.com | +-------------+------------+-------------------+
В този пример използвах LIKE оператор във връзка с % заместващ знак за връщане на собственици, чиито имейл адреси завършват на .com .
LIKE може да се използва и с други низови оператори, като _ , [] и [^] .
% Оператор за заместващи знаци
% Операторът за заместващ знак съответства на всеки низ от нула или повече знака. Може да се използва като префикс или суфикс и може да се използва и в средата на низ.
Той има тенденция да се използва по-често като суфикс и има ограничена употреба в средата на шаблони, въпреки че има някои валидни случаи на използване в средата на шаблон, като например следното:
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE 'example@sqldat.com%.com'; Резултат:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | example@sqldat.com | +-------------+------------+------------------+
В този случай не знаехме имейл адреса на Барт, но знаехме, че започва с example@sqldat.com и завършва на .com . Затова успяхме да използваме LIKE във връзка с % заместващ знак за попълване на останалото.
Имайте предвид, че тази техника може да върне много неподходящи редове в зависимост от данните и начина, по който конструирате своя SQL израз.
_ Оператор за заместващи знаци
Долната черта (_ ) операторът за заместващ знак съответства на всеки единичен знак.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE 'b_rt'; Резултат:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | example@sqldat.com | | Burt | Tyson | example@sqldat.com | +-------------+------------+------------------+
[] Оператор за заместващи знаци
Скобите ([] ) операторът за заместващ знак съответства на всеки единичен знак в рамките на посочения диапазон или набор, който е посочен между скобите.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[bh]%'; Резултат:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Boris | Trump | NULL | | Burt | Tyson | example@sqldat.com | +-------------+------------+-------------------+
Тук комбинирах заместващия знак в скоби със знака за процент, за да върна всички собственици, чието име започва с b или h .
Имайте предвид, че операторът със скоби няма широко разпространено приложение в СУБД. Поддържа се в SQL Server, но не се поддържа в MySQL, Oracle, DB2 и SQLite. Проверете документацията на вашата СУБД, за да видите дали поддържа този оператор.
[^] Оператор за заместващи знаци
Знакът на карета (^ ) може да се използва за отхвърляне на резултатите при използване на оператора за скоби.
Така че променяме предишния пример, за да върнем само онези собственици, чието име не започнете с b или h .
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[^bh]%'; Резултат:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Nancy | Simpson | NULL | | Woody | Eastwood | example@sqldat.com | +-------------+------------+-------------------+
NULL стойности
Процентът (% ) заместващият знак съответства на всичко – почти. Едно нещо, което не съвпада, е NULL .
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%'; Резултат:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Woody | Eastwood | example@sqldat.com | | Burt | Tyson | example@sqldat.com | +-------------+------------+-------------------+
В нашата таблица има два реда с NULL в Email колона, но те не се връщат тук.
Ефективност
Заявки, които съдържат LIKE операторът може да работи много по-бавно от другите заявки и вероятно трябва да избягвате използването на LIKE оператор, освен ако наистина не се нуждаете от него. Използване на % операторът като префикс може да бъде особено бавен.
Това не означава, че изобщо не трябва да го използвате. LIKE операторът е неразделна част от SQL и ще срещнете много сценарии, при които той ще бъде единствената опция (или поне най-добрата опция).