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