SQL LIKE 運算子
在本教程中,你將學習如何基於部分匹配來檢索資料。
模式匹配
到目前為止,你已經看到了識別精確字串的條件,例如 WHERE name='Lois Lane'
。但在 SQL 中,你也可以使用 LIKE
運算子執行部分或模式匹配。
LIKE
運算子允許你為一個或多個字元指定萬用字元提供模式匹配的度量。你可以使用以下兩個萬用字元:
- 百分號(
%
) - 匹配任意數量的字元,甚至零個字元。 - 下劃線(
_
) - 恰好匹配一個字元
以下是一些示例,說明如何將 LIKE
操作符與萬用字元一起使用。
考慮我們在資料庫中有一個 employees 表,其中包含以下記錄:
+--------+------------------+------------+--------+---------+
| emp_id | emp_name | hire_date | salary | dept_id |
+--------+------------------+------------+--------+---------+
| 1 | Ethan Hunt | 2001-05-01 | 5000 | 4 |
| 2 | Tony Montana | 2002-07-15 | 6500 | 1 |
| 3 | Sarah Connor | 2005-10-18 | 8000 | 5 |
| 4 | Rick Deckard | 2007-01-03 | 7200 | 3 |
| 5 | Martin Blank | 2008-06-24 | 5600 | NULL |
| 6 | simons bistro | 2009-04-01 | 6000 | 1 |
+--------+------------------+------------+--------+---------+
現在,假設你要查詢名稱以 S 字母開頭的所有員工。
SELECT * FROM employees
WHERE emp_name LIKE 'S%';
執行查詢後,你將獲得如下輸出:
+--------+------------------+------------+--------+---------+
| emp_id | emp_name | hire_date | salary | dept_id |
+--------+------------------+------------+--------+---------+
| 3 | Sarah Connor | 2005-10-18 | 8000 | 5 |
| 6 | simons bistro | 2009-04-01 | 6000 | 1 |
+--------+------------------+------------+--------+---------+
在 MySQL 非二進位制串(CHAR
, VARCHAR
, TEXT
)比較預設是不區分大小寫,而二進位制字串(BINARY
, VARBINARY
, BLOB
)比較是大小寫敏感的。
這意味著如果你搜尋 WHERE name LIKE 'S%'
,你得到所有以 S 或 s 開頭的列值(你可以看到我們有 Sarah
和 simons
)。但是,如果你想使此搜尋區分大小寫,則可以使用 BINARY
運算子,如下所示:
-- Syntax for MySQL Database
SELECT * FROM employees
WHERE BINARY emp_name LIKE 'S%';
現在,此語句將僅返回名稱以大寫字母 S 開頭的員工:
+--------+------------------+------------+--------+---------+
| emp_id | emp_name | hire_date | salary | dept_id |
+--------+------------------+------------+--------+---------+
| 3 | Sarah Connor | 2005-10-18 | 8000 | 5 |
+--------+------------------+------------+--------+---------+
注意: 如果希望始終以區分大小寫的方式處理列,請使用區分大小寫或二進位制排序規則來宣告它,以避免出現任何效能問題。
提示: 當你不知道要搜尋的字串的確切形式時,部分匹配很有用。你還可以使用部分匹配來檢索表中列之一中包含類似字串的多個行。