SQL LIKE語法是什麼?基礎用法與語法結構全解析

作者:帆軟行業化團隊

2025年7月30日 · 15 min read

來源:帆軟
92eec1c2949d406297b6c4bef6e67305.webp

你在查詢資料時,常常會遇到需要找出包含特定字詞的資料。sql like語法讓你能夠在WHERE子句中進行模糊查詢,不必完全輸入完整的內容。例如在飲料店資料庫中,若你想找出所有名稱中有「茶」的飲品,只需使用 WHERE name LIKE '%茶%',就能輕鬆找到所有相關飲品。這種方式比起只用等號查詢更靈活,也能大幅提升搜尋效率。

核心要點

  • SQL LIKE語法讓你用模糊比對找到包含特定字串的資料,提升查詢靈活度。
  • 通配符「%」代表任意多字元,「_」代表單一字元,搭配方括號可指定字元範圍或排除字元。
  • LIKE語法適用於字串欄位,且大小寫敏感度依資料庫不同而異,查詢前需確認。
  • 避免在模式開頭使用「%」或過度使用NOT LIKE,能提升查詢效能與速度。
  • 遇到特殊字元時,可用ESCAPE語法轉義,確保查詢結果正確無誤。

sql like語法定義

2d27130a49774f2884f7bc4fb757712d.webp

運作原理

你在資料查詢時,常會遇到需要比對部分字串的情境。sql like語法就是為了這種需求而設計。它是一種邏輯運算符,主要用於WHERE子句中,讓你能根據特定模式來搜尋資料。當你使用like語法時,資料庫會將你輸入的模式與資料表中的每一筆資料逐字元比對。

你可以利用通配符來增加查詢彈性。

  • % 代表零個或多個任意字元,適合搜尋包含、開頭或結尾的情境。
  • _ 代表單一任意字元,適合固定長度但部分字元不確定的情境。
  • 方括號[]可以指定一組字元範圍,例如[a-f]代表a到f之間的任一字元。
  • [^]則代表排除某些字元。
  • 若你需要查詢本身就是通配符的字元,可以用ESCAPE子句來轉義。

資料庫在執行sql like語法時,會根據你設定的模式,從頭到尾逐字元比對。只有完全符合模式規則的資料才會被選出。例如,LIKE 'A%'會找到所有以A開頭的資料,LIKE '%茶%'則會找到所有包含「茶」的資料。

不同資料庫系統對大小寫敏感度有差異。MySQL預設不分大小寫,PostgreSQL則區分大小寫。這點在設計查詢時要特別注意。

你也可以使用NOT LIKE來排除不符合模式的資料,或用ESCAPE處理特殊字元。這些設計讓你能更靈活地處理各種查詢需求。

適用情境

你會在許多資料查詢場景中用到sql like語法。以下是常見的應用情境:

  • 查詢以特定字串開頭的資料,例如:LIKE '9%',可以找到所有以9開頭的電話號碼。
  • 查詢以特定字串結尾的資料,例如:LIKE '%abc',適合搜尋以abc結尾的產品編號。
  • 查詢包含特定子串的資料,例如:LIKE '%明%',能找到所有名字中有「明」的學生。
  • 查詢符合特定字元範圍的資料,例如:LIKE '[A-F]%',可以找出以A到F開頭的代碼。
  • 排除特定字元的資料,例如:LIKE '%[^0-9]%',能過濾掉只包含數字的資料。
通配符功能說明範例
%匹配任意數量字元Name LIKE 'SQL%',匹配以SQL開頭的字串
_匹配單一字元Name LIKE 'SQL200_',匹配SQL2000、SQL2005
[]匹配字元集中的任一字元Name LIKE 'SQL200[05]',匹配SQL2000或SQL2005
[^]匹配不在字元集中的任一字元Name LIKE 'SQL200[^05]',匹配SQL2003

你在處理大量文字資料、姓名、產品編號、地址等欄位時,sql like語法都能幫你快速找到需要的資料。

小提醒:LIKE語法適合簡單的模糊查詢。如果你需要更複雜的比對,可以考慮正則表達式(REGEXP),但要注意效能問題。

基本語法結構

語法格式

你在使用sql like語法時,最基本的格式如下:

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

這個語法讓你可以根據特定的字串模式,從資料表中找出符合條件的資料。你只要將「欄位名稱」和「資料表名稱」換成你自己的資料庫內容,再設定好「模式」即可。

小提醒:在sql like語法中,模式字串的每一個字元都會被嚴格比對,包括空格和特殊符號。空格不會被自動忽略,也不會自動補齊。如果你在模式中加了一個空格,查詢時就必須完全符合這個空格,否則資料庫不會選出這筆資料。特殊字元(像是底線 _ 或百分比 %)也有特別的意義,除非你用ESCAPE語法,否則它們會被當作通配符處理。

你可以利用「%」來代表零個或多個任意字元,用「_」來代表單一任意字元。如果你想比對字串中的特定範圍或排除某些字元,也可以用方括號 [ ] 或 [^ ]。

查詢範例

你在實際查詢時,常會遇到各種不同的需求。以下是幾個常見的sql like語法查詢範例:

  1. 查詢包含特定字元的資料
    你想找出名字中有「明」這個字的資料,可以這樣寫:

    SELECT * FROM table1 WHERE name LIKE '%明%';
    

    這個查詢會找出所有名字裡有「明」的紀錄。

  2. 查詢以特定字串開頭的資料
    如果你想找出所有以「Mc」開頭的名字,可以這樣寫:

    SELECT * FROM table1 WHERE name LIKE 'Mc%';
    

    這會選出像是「McBadden」這樣的資料。

  3. 查詢以特定字串結尾的資料
    你想找出名字以「inger」結尾的資料,可以這樣寫:

    SELECT * FROM table1 WHERE name LIKE '%inger';
    

    這會選出「Ringer」、「Stringer」等名字。

  4. 查詢包含特定子串的資料
    如果你要找出名字中有「en」的資料,可以這樣寫:

    SELECT * FROM table1 WHERE name LIKE '%en%';
    

    這會選出「Bennet」、「Green」等名字。

  5. 查詢固定長度且部分字元不確定的資料
    你想找出六個字母、第二個字母不限的名字,可以這樣寫:

    SELECT * FROM table1 WHERE name LIKE '_heryl';
    

    這會選出「Cheryl」、「Sheryl」等名字。

  6. 查詢指定範圍字元的資料
    你想找出名字以「C」或「K」開頭,並且第四個字母是「e」或「o」的資料,可以這樣寫:

    SELECT * FROM table1 WHERE name LIKE '[CK]ars[eo]n';
    

    這會選出「Carson」等名字。

  7. 查詢不包含特定字元的資料
    你想排除第二個字元是「c」的名字,可以這樣寫:

    SELECT * FROM table1 WHERE name LIKE 'M[^c]%';
    

    這會選出「MacFeather」以外的名字。

注意:你在模式字串中使用空格時,必須確保資料也有相同的空格。LIKE語法不會自動補齊或忽略空格。這和一般的字串比較運算子不同。

你在查詢時,常會看到「%」和「」這兩個通配符。記得,「%」代表任意數量的字元,「」代表單一字元。你如果要查詢字串中任意位置的內容,通常會在模式的開頭和結尾都加上「%」。
例如:

SELECT * FROM table1 WHERE name LIKE '%abc%';

這會找出名字中有「abc」的所有資料。

小技巧:有些人會用「*」當通配符,但在sql like語法中,建議你用「%」才正確。尤其當你在模式的兩端同時使用通配時,一定要用「%」。

你可以根據自己的需求,靈活運用這些查詢方式,快速找到你想要的資料。

通配符解析

91611d9f54ca4e04acde7888b234a5df.webp

在你學習SQL查詢時,通配符是非常重要的工具。你可以利用通配符來增加查詢的彈性,讓搜尋結果更符合你的需求。最常見的通配符有百分比 % 和底線 _。這兩個符號讓你可以輕鬆找到包含、開頭、結尾或特定位置的字串。

百分比 %

你可以用百分比 % 來代表零個或多個任意字元。這個符號讓你不用知道完整的字串內容,也能找到相關資料。例如,你想找出所有以「C」開頭的名稱,只要這樣寫:

SELECT name FROM table1 WHERE name LIKE 'C%';

這個查詢會選出所有名稱以C開頭的資料,不管後面有幾個字元。你也可以用%放在字串中間或結尾,像是'%茶%'就能找到所有包含「茶」的飲品名稱。

查詢語法說明查詢結果示例
SELECT name FROM sys.databases WHERE name LIKE 'm[n-z]%';匹配以 m 後接 n 到 z 其中一字元開頭,後面可接任意字元的字串model, msdb
SELECT [object_id], OBJECT_NAME(object_id) AS object_name, name, column_id FROM sys.columns WHERE name LIKE '[0-9!@#$.,;_]%';匹配以數字或特定符號開頭,後面可接任意字元的字串2002, 2003, _xyz 等

小提醒:在 Microsoft Access SQL 中,* 也能當作通配符使用,但大多數資料庫都用 %

底線 _

底線 _ 代表任意單一字元。你可以用它來比對字串中特定位置的字元。例如,你想找出名稱第二個字母是任意字元、第一個字母是m、第三個字母是d的資料,可以這樣寫:

SELECT name FROM sys.databases WHERE name LIKE 'm_d%';

這個查詢會選出像「model」和「msdb」這樣的名稱,但不會選到「master」。如果你用多個底線,例如m__%,就能比對第三個字元也是任意字元的名稱。

  • 你可以用底線來比對固定長度的字串。
  • 如果你要比對字面上的底線字元,可以用方括號[_],像是LIKE 'db[_]%',這樣只會選出以「db_」開頭的名稱。

注意:你在使用LIKE語法時,只能用%_這兩種通配符。LIKE不支援正則表達式,因為它設計目標是簡單又快速。如果你需要更複雜的比對,可以考慮MySQL的REGEXP或RLIKE語法。

不同資料庫系統對大小寫敏感度也有差異。MySQL預設不分大小寫,PostgreSQL則會區分大小寫。你在查詢時要特別注意這一點,才能得到正確的結果。

進階用法與注意事項

NOT LIKE

你在查詢資料時,常常需要排除某些不想要的字串。這時可以使用NOT LIKE。這個語法會幫你找出不符合特定模式的資料列。

  • NOT LIKE是LIKE的反向用法。你用LIKE找出符合條件的資料,用NOT LIKE則排除這些資料。
  • 你可以這樣寫:

    SELECT EmployeeKey, LastName
    FROM DimEmployee
    WHERE LastName NOT LIKE '%and%';
    

    這個查詢會選出LastName中不包含「and」的員工。

NOT LIKE常用於排除特定字串模式的資料。不過,這種查詢會讓資料庫掃描每一筆資料,資料量大時效能會變差。你在設計查詢時,建議優先考慮LIKE、IN或EXISTS等正向查詢,能提升查詢速度。

ESCAPE

有時候,你會遇到資料本身就包含%或_等通配符。這時候,ESCAPE語法就很重要。ESCAPE可以讓你指定一個逸出字元,讓通配符被當作一般字元處理。

  • 例如,你要查詢折扣欄位中包含「30%」的資料,可以這樣寫:

    SELECT * FROM TabTest
    WHERE 折扣 LIKE '%30!%%' ESCAPE '!'
    

    這裡「!」是逸出字元,讓後面的%被當作字元而不是通配符。

  • 你也可以用ESCAPE查詢包含底線、星號或減號的資料。例如:

    SELECT * FROM TabTest
    WHERE 附註 LIKE '@*%' ESCAPE '@'
    
  • 你還可以用方括號[]包住通配符,讓它變成一般字元。

ESCAPE語法讓你能精確查詢包含特殊符號的資料,避免誤判。

常見錯誤

你在使用sql like語法時,容易遇到幾個常見錯誤:

  1. 單引號用錯。當字串中有單引號時,必須用兩個單引號表示。例如:

    SELECT name FROM book WHERE name='Jason''s book';
    

    如果只用一個單引號,SQL會解析錯誤。

  2. 忽略空格。LIKE模式中的每個字元都會被比對,包括空格。你多打或少打一個空格,查詢結果就會不同。
  3. 通配符誤用。有些人會用*當通配符,但sql like語法只認得%和_。
  4. 效能問題。你用LIKE時,如果模式開頭是%,資料庫無法用索引,查詢會變慢。NOT LIKE、!=等負向查詢也會讓效能下降

小提醒:LIKE語法只適用於字串型欄位。你在查詢時,盡量用前綴匹配(如LIKE 'A%'),這樣資料庫才能用索引,查詢速度才快。

 

你已經學會如何用sql like語法進行靈活的資料查詢。這個語法讓你能快速找到包含、開頭或結尾特定字串的資料。你在實作時,應該注意查詢效能與常見錯誤。

  • 避免在查詢欄位上使用函數,這會讓資料庫無法利用索引。
  • 儘量不要用前置通配符(如'%abc'),這樣才能提升查詢速度。
  • 減少使用NOT LIKE等負向條件,避免效能下降。
  • 善用資料庫的執行計畫工具,檢查查詢是否會全表掃描。
  • 對於長字串欄位,可以考慮建立全文索引。

多練習各種查詢模式,你會更熟悉這些技巧。只要掌握這些原則,你就能有效率地處理各種資料查詢需求。

FAQ

SQL LIKE 語法可以用在數字欄位嗎?

你只能在字串型欄位使用 LIKE。數字欄位建議先轉成字串,否則查詢會失敗。

LIKE 和 = 有什麼不同?

你用 = 查詢完全相同的內容。你用 LIKE 可以搜尋部分相符的字串,更適合模糊查詢。

通配符 % 和 _ 可以一起用嗎?

你可以同時使用 % 和 _。這樣可以靈活設定查詢模式,找到更精確的資料。

LIKE 查詢會區分大小寫嗎?

不同資料庫有不同設定。MySQL 預設不區分大小寫,PostgreSQL 會區分。你查詢前要先確認。

查詢速度會因為使用 LIKE 變慢嗎?

你用 LIKE 查詢時,特別是模式開頭有 %,資料庫無法用索引,查詢速度會變慢。你要注意效能。

帆軟產品免費試用

企業戰情室報表軟體

企業戰情室報表軟體

複雜報表/戰情室/資料填報/數位孿生

企業商業智慧BI軟體

企業商業智慧BI軟體

自助資料處理/Dashboard/探索分析

一站式資料整合平台

一站式資料整合平台

資料同步/ETL資料開發/API資料服務

免費資源下載

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

×

立即下載

姓名

郵箱

公司完整名稱

管道了解

-- 您是怎麽瞭解的我們 --

網路搜尋
Facebook臉書
媒體/部落格/論壇
YouTube
電子報
線下展會
線下課程
他人推薦
其他

職位

-- 選擇您的職稱 --

IT資訊&數據部門
一般部門
管理/ 決策者
老師
學生
其他

是否有報表/BI/數位建設需求?

-- 請選擇 --

沒有
不確定

手機號碼

SMS 驗證碼

我們很樂意傾聽你的需求,解答您的疑問,並提供專業建議, 助力您的企業實現智慧轉型!

×

意見回饋

姓名

電郵

公司

國家/地區

-- select an option --

電話

投訴原因

請選擇投訴原因

代理商問題
產品問題
技術支援服務問題
專案問題
銷售問題
商務問題
行銷問題
其他

投訴內容