Database
 sql >> база данни >  >> RDS >> Database

SQL LIKE оператор за начинаещи

В 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 и ще срещнете много сценарии, при които той ще бъде единствената опция (или поне най-добрата опция).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да намерите дублиращи се редове в SQL?

  2. Пич, кой притежава тази #temp маса?

  3. Подобрения на Showplan за UDFs

  4. SQL справочник за начинаещи

  5. Как да намерите и маскирате PII в Elasticsearch