LIKE 模糊查詢
LIKE 運算子用來進行模式比對(Pattern Matching),搭配萬用字元可以做模糊查詢。
語法
SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;
萬用字元
| 字元 | 說明 | 範例 |
|---|---|---|
% | 代表任意數量的字元(包括零個) | '台%' 符合「台北」「台中」「台」 |
_ | 代表剛好一個字元 | '_三' 符合「王三」「李三」 |
常見模式
-- 以「台」開頭
WHERE city LIKE '台%'
-- 符合:台北、台中、台南...
-- 以「市」結尾
WHERE city LIKE '%市'
-- 符合:台北市、高雄市、新北市...
-- 包含「中」
WHERE city LIKE '%中%'
-- 符合:台中、中壢、中和...
-- 第二個字是「小」
WHERE name LIKE '_小%'
-- 符合:王小明、李小華...
查詢範例
假設有一個 customers 資料表:
| id | name | city |
|---|---|---|
| 1 | 王小明 | 台北市 |
| 2 | 李小華 | 新北市 |
| 3 | 張大同 | 高雄市 |
查詢名字中有「小」的客戶:
SELECT * FROM customers WHERE name LIKE '%小%';
結果:
| id | name | city |
|---|---|---|
| 1 | 王小明 | 台北市 |
| 2 | 李小華 | 新北市 |
NOT LIKE
NOT LIKE 用來排除符合模式的資料:
SELECT * FROM customers WHERE city NOT LIKE '台%';
跳脫特殊字元
如果要搜尋的文字本身包含 % 或 _,需要使用跳脫字元:
-- 搜尋包含 "50%" 的文字
WHERE description LIKE '%50\%%' ESCAPE '\'
-- 或使用自訂跳脫字元
WHERE description LIKE '%50!%%' ESCAPE '!'
效能考量
LIKE 開頭如果是 %,無法使用索引,查詢效能會較差:
-- 可以使用索引
WHERE name LIKE '王%'
-- 無法使用索引(效能較差)
WHERE name LIKE '%王'
WHERE name LIKE '%王%'