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 資料表:

idnamecity
1王小明台北市
2李小華新北市
3張大同高雄市

查詢名字中有「小」的客戶:

SELECT * FROM customers WHERE name LIKE '%小%';

結果:

idnamecity
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 '%王%'