在本教學中,您將學習如何使用SQL LIKE
運算符來測試運算式是否與模式匹配。
1. SQL LIKE運算符簡介
有時,測試運算式是否與特定模式匹配很有用,例如,查找名字以Yii
或Su
開頭的所有員工。 在這些情況下,需要使用LIKE
運算符。
LIKE
運算符測試運算式是否與特定模式匹配。 請參閱以下語法:
expression LIKE pattern
如果運算式與模式匹配,則LIKE
運算符返回true
。 否則它返回false
。
LIKE
運算符通常用於SELECT,UPDATE或DELETE語句的WHERE
子句中。
要構造模式,請使用兩個SQL
通配符:
%
百分號匹配零個,一個或多個字元。_
下劃線符號匹配單個字元。
下表說明了一些模式及其含義:
模式 | 含義 |
---|---|
LIKE 'Yii%' |
匹配以Yii 開始的字串 |
LIKE '%su' |
匹配以su 結尾的字串 |
LIKE '%ch% |
匹配包含ch 的字串 |
LIKE 'Luc_' |
以Luc 開始,後面只有一個字元,例如:Lucy ,Lucc 等 |
LIKE '_cy' |
以cy 結尾,前面只有一個字元,例如:Lcy ,ucy 等 |
LIKE '%zaixian_' |
包含zaixian ,以任意數量的字元開頭,最多以一個字元結尾。 |
LIKE '_zaixian%' |
包含zaixian ,最多以一個字元開頭,以任意數量的字元結尾。 |
如果要匹配通配符%
或_
,則必須使用反斜杠字元\
來對其進行轉義。 如果要使用其他的轉義字元而不是反斜杠,可以在LIKE
運算式中使用ESCAPE
子句,如下所示:
expression LIKE pattern ESCAPE escape_character
2. SQL LIKE運算符示例
我們將使用示例資料庫中的employees
表進行演示。
mysql> desc employees;
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| employee_id | int(11) | NO | PRI | NULL | auto_increment |
| first_name | varchar(20) | YES | | NULL | |
| last_name | varchar(25) | NO | | NULL | |
| email | varchar(100) | NO | | NULL | |
| phone_number | varchar(20) | YES | | NULL | |
| hire_date | date | NO | | NULL | |
| job_id | int(11) | NO | MUL | NULL | |
| salary | decimal(8,2) | NO | | NULL | |
| manager_id | int(11) | YES | MUL | NULL | |
| department_id | int(11) | YES | MUL | NULL | |
+---------------+--------------+------+-----+---------+----------------+
10 rows in set
要查找名字以Sh
開頭的所有員工,請使用Sh%
模式,如以下語句所示:
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE 'Sh%';
執行上面查詢語句,得到以下結果 -
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 116 | Shelli | Zhang |
| 123 | Shanta | Liu |
| 205 | Shelley | Wu |
+-------------+------------+-----------+
3 rows in set
執行上面查詢語句,得到以下結果 -
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE '%na';
執行上面查詢語句,得到以下結果 -
以下語句查找姓氏包含字元:en
的所有員工:
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
last_name LIKE '%en%';
執行上面查詢語句,得到以下結果 -
以下語句檢索名字以Jo
開頭且後跟最多2
個字元的員工:
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE 'Jo__';
執行上面查詢語句,得到以下結果 -
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 110 | John | Chen |
| 145 | John | Liu |
+-------------+------------+-----------+
2 rows in set
以下語句選擇名字以任意數字開頭且後跟最多一個字元的員工。
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE '%are_';
執行上面查詢語句,得到以下結果 -
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 119 | Karen | Zhang |
| 146 | Karen | Liu |
+-------------+------------+-----------+
2 rows in set
3. SQL NOT LIKE運算符
要否定LIKE
運算符的結果,可以使用NOT
運算符,如下所示:
expression NOT LIKE pattern ESCAPE escape_character
例如,要查找名字以M
開頭但不以Ma
開頭的所有員工,請使用以下語句:
SELECT
employee_id, first_name, last_name
FROM
employees
WHERE
first_name LIKE 'M%'
AND first_name NOT LIKE 'Ma%'
ORDER BY
first_name;
執行上面查詢語句,得到以下結果 -
+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 201 | Michael | Zhou |
| 113 | Min | Su |
| 122 | Min | Liu |
+-------------+------------+-----------+
3 rows in set
在本教學中,您學習了如何使用SQL LIKE
運算符選擇與特定模式匹配的值。
上一篇:
SQL In運算符
下一篇:
SQL Is Null運算符