【MySQL 的 LIKE 運算子徹底解析】使用萬用字元進行模式匹配的基礎與應用

1. MySQL LIKE 的概要

MySQL 的 LIKE 運算子用於在資料庫中搜尋符合特定模式的數據。LIKE 可在 SQL 的 WHERE 子句中使用,根據部分或整個字串設定搜尋條件。例如,您可以用來搜尋「以某個字元開頭的名稱」或「包含特定字元的產品代碼」等資料。

LIKE 運算子的用途

  • 部分匹配搜尋
  • 特定模式匹配
  • 數據過濾

此運算子專為模式匹配而設計,在高效搜尋與操作資料庫數據時不可或缺。

2. MySQL LIKE 的基本語法

在 MySQL 中使用 LIKE 運算子的基本語法如下:

SELECT 欄位名稱 FROM 資料表名稱 WHERE 欄位名稱 LIKE '模式';

LIKE 的使用範例

  • 搜尋以特定字元開頭的數據
    SELECT * FROM users WHERE name LIKE 'A%';
  • 搜尋包含特定字串的數據
    SELECT * FROM products WHERE product_code LIKE '%123%';

LIKE 運算子可與 %_ 等萬用字元結合使用,使搜尋更具彈性。

3. LIKE 運算子使用的萬用字元

LIKE 運算子中,可以使用萬用字元來指定搜尋模式。MySQL 支援的主要萬用字元如下:

% 萬用字元

  • 匹配任意長度的字串(包含 0 個字元)
    SELECT * FROM users WHERE email LIKE '%@example.com';
    此範例將搜尋所有以 @example.com 結尾的電子郵件地址。

_ 萬用字元

  • 匹配任意單個字元
    SELECT * FROM products WHERE product_code LIKE '_A%';
    此範例將搜尋所有第二個字元為 A 的產品代碼。

適當使用萬用字元可以有效過濾資料庫內的數據,提高搜尋效率。

4. 模式匹配技巧

透過 LIKE 運算子與萬用字元的組合,可以實現各種模式匹配。

前綴匹配(Starts With)

  • 搜尋以特定字元開頭的數據
    SELECT * FROM customers WHERE name LIKE 'John%';
    此範例將搜尋所有名稱以 John 開頭的顧客。

後綴匹配(Ends With)

  • 搜尋以特定字元結尾的數據
    SELECT * FROM files WHERE filename LIKE '%.pdf';
    此範例將搜尋所有以 .pdf 結尾的檔案名稱。

部分匹配(Contains)

  • 搜尋包含特定字串的數據
    SELECT * FROM documents WHERE content LIKE '%MySQL%';
    此範例將搜尋所有內容包含 MySQL 的文件。

5. LIKE 運算子中的特殊字元轉義

LIKE 運算子中,%_ 具有特殊意義作為萬用字元。如果希望將它們視為普通字元,需要使用跳脫字元(Escape Character)。

轉義方法

  • 使用跳脫字元來進行搜尋
    SELECT * FROM filenames WHERE filename LIKE 'file!_%' ESCAPE '!';
    此查詢將搜尋所有以 file_ 開頭的檔案名稱。由於 _ 通常作為萬用字元使用,這裡透過 ! 作為跳脫字元,使 _ 被視為普通字元。

6. LIKE 運算子的進階應用

LIKE 運算子可以與其他 SQL 語法結合,實現更高級的搜尋功能。

與 JOIN 搭配使用

  • 搜尋關聯表中的數據
    SELECT orders.id, customers.name FROM orders JOIN customers ON orders.customer_id = customers.id WHERE customers.name LIKE '%Smith%';
    此範例將搜尋所有顧客名稱包含 Smith 的訂單。

使用 NOT LIKE 進行排除

  • 搜尋不符合特定模式的數據
    SELECT * FROM emails WHERE address NOT LIKE '%@spam.com';
    此範例將排除所有以 @spam.com 結尾的電子郵件地址。

7. 使用 LIKE 運算子的最佳實踐

在使用 LIKE 運算子時,有一些最佳實踐和注意事項可以幫助提升效能。

對效能的影響

  • 當使用 LIKE 運算子搜尋大量數據時,查詢效能可能會下降。特別是當 % 放在字串開頭時,索引將無法發揮作用,導致查詢速度變慢。

適當使用索引

  • 為了提升效能,可以考慮建立索引(INDEX),以加快查詢速度。

8. MySQL LIKE 的常見使用場景

MySQL 的 LIKE 運算子可應用於各種場景,例如:

搜尋顧客資訊

  • 根據顧客名稱或電子郵件地址進行搜尋。

搜尋產品代碼

  • 根據產品代碼的部分內容來篩選相關產品。

9. 總結

LIKE 運算子是 MySQL 中強大的模式匹配工具。本文介紹了從基本語法到進階應用,並涵蓋了效能最佳化策略。透過適當使用 LIKE 運算子,可以有效提升資料庫的搜尋與操作效率。

10. 常見問題

Q1: LIKE= 之間的差異是什麼?
A1: = 用於精確匹配,而 LIKE 可用於部分匹配或模式匹配。

Q2: LIKE 運算子區分大小寫嗎?
A2: 在 MySQL 的預設設定下,LIKE 運算子不區分大小寫。不過,可以使用 BINARY 關鍵字來區分大小寫。

Q3: LIKE 運算子可以用於數值嗎?
A3: 通常 LIKE 用於字串,但如果數值以字串形式儲存,也可以使用 LIKE 進行搜尋。