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 非二進位制串(CHARVARCHARTEXT)比較預設是不區分大小寫,而二進位制字串(BINARYVARBINARYBLOB)比較是大小寫敏感的。

這意味著如果你搜尋 WHERE name LIKE 'S%' ,你得到所有以 S 或 s 開頭的列值(你可以看到我們有 Sarahsimons)。但是,如果你想使此搜尋區分大小寫,則可以使用 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 |
+--------+------------------+------------+--------+---------+

注意: 如果希望始終以區分大小寫的方式處理列,請使用區分大小寫或二進位制排序規則來宣告它,以避免出現任何效能問題。

提示: 當你不知道要搜尋的字串的確切形式時,部分匹配很有用。你還可以使用部分匹配來檢索表中列之一中包含類似字串的多個行。