你在查詢資料時,常常會遇到需要找出包含特定字詞的資料。sql like語法讓你能夠在WHERE子句中進行模糊查詢,不必完全輸入完整的內容。例如在飲料店資料庫中,若你想找出所有名稱中有「茶」的飲品,只需使用 WHERE name LIKE '%茶%',就能輕鬆找到所有相關飲品。這種方式比起只用等號查詢更靈活,也能大幅提升搜尋效率。
你在資料查詢時,常會遇到需要比對部分字串的情境。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語法查詢範例:
查詢包含特定字元的資料
你想找出名字中有「明」這個字的資料,可以這樣寫:
SELECT * FROM table1 WHERE name LIKE '%明%';
這個查詢會找出所有名字裡有「明」的紀錄。
查詢以特定字串開頭的資料
如果你想找出所有以「Mc」開頭的名字,可以這樣寫:
SELECT * FROM table1 WHERE name LIKE 'Mc%';
這會選出像是「McBadden」這樣的資料。
查詢以特定字串結尾的資料
你想找出名字以「inger」結尾的資料,可以這樣寫:
SELECT * FROM table1 WHERE name LIKE '%inger';
這會選出「Ringer」、「Stringer」等名字。
查詢包含特定子串的資料
如果你要找出名字中有「en」的資料,可以這樣寫:
SELECT * FROM table1 WHERE name LIKE '%en%';
這會選出「Bennet」、「Green」等名字。
查詢固定長度且部分字元不確定的資料
你想找出六個字母、第二個字母不限的名字,可以這樣寫:
SELECT * FROM table1 WHERE name LIKE '_heryl';
這會選出「Cheryl」、「Sheryl」等名字。
查詢指定範圍字元的資料
你想找出名字以「C」或「K」開頭,並且第四個字母是「e」或「o」的資料,可以這樣寫:
SELECT * FROM table1 WHERE name LIKE '[CK]ars[eo]n';
這會選出「Carson」等名字。
查詢不包含特定字元的資料
你想排除第二個字元是「c」的名字,可以這樣寫:
SELECT * FROM table1 WHERE name LIKE 'M[^c]%';
這會選出「MacFeather」以外的名字。
注意:你在模式字串中使用空格時,必須確保資料也有相同的空格。LIKE語法不會自動補齊或忽略空格。這和一般的字串比較運算子不同。
你在查詢時,常會看到「%」和「」這兩個通配符。記得,「%」代表任意數量的字元,「」代表單一字元。你如果要查詢字串中任意位置的內容,通常會在模式的開頭和結尾都加上「%」。
例如:
SELECT * FROM table1 WHERE name LIKE '%abc%';
這會找出名字中有「abc」的所有資料。
小技巧:有些人會用「*」當通配符,但在sql like語法中,建議你用「%」才正確。尤其當你在模式的兩端同時使用通配時,一定要用「%」。
你可以根據自己的需求,靈活運用這些查詢方式,快速找到你想要的資料。
在你學習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。這個語法會幫你找出不符合特定模式的資料列。
你可以這樣寫:
SELECT EmployeeKey, LastName
FROM DimEmployee
WHERE LastName NOT LIKE '%and%';
這個查詢會選出LastName中不包含「and」的員工。
NOT LIKE常用於排除特定字串模式的資料。不過,這種查詢會讓資料庫掃描每一筆資料,資料量大時效能會變差。你在設計查詢時,建議優先考慮LIKE、IN或EXISTS等正向查詢,能提升查詢速度。
有時候,你會遇到資料本身就包含%或_等通配符。這時候,ESCAPE語法就很重要。ESCAPE可以讓你指定一個逸出字元,讓通配符被當作一般字元處理。
例如,你要查詢折扣欄位中包含「30%」的資料,可以這樣寫:
SELECT * FROM TabTest
WHERE 折扣 LIKE '%30!%%' ESCAPE '!'
這裡「!」是逸出字元,讓後面的%被當作字元而不是通配符。
你也可以用ESCAPE查詢包含底線、星號或減號的資料。例如:
SELECT * FROM TabTest
WHERE 附註 LIKE '@*%' ESCAPE '@'
ESCAPE語法讓你能精確查詢包含特殊符號的資料,避免誤判。
你在使用sql like語法時,容易遇到幾個常見錯誤:
單引號用錯。當字串中有單引號時,必須用兩個單引號表示。例如:
SELECT name FROM book WHERE name='Jason''s book';
如果只用一個單引號,SQL會解析錯誤。
小提醒:LIKE語法只適用於字串型欄位。你在查詢時,盡量用前綴匹配(如
LIKE 'A%'
),這樣資料庫才能用索引,查詢速度才快。
你已經學會如何用sql like語法進行靈活的資料查詢。這個語法讓你能快速找到包含、開頭或結尾特定字串的資料。你在實作時,應該注意查詢效能與常見錯誤。
'%abc'
),這樣才能提升查詢速度。多練習各種查詢模式,你會更熟悉這些技巧。只要掌握這些原則,你就能有效率地處理各種資料查詢需求。
你只能在字串型欄位使用 LIKE。數字欄位建議先轉成字串,否則查詢會失敗。
你用 = 查詢完全相同的內容。你用 LIKE 可以搜尋部分相符的字串,更適合模糊查詢。
你可以同時使用 % 和 _。這樣可以靈活設定查詢模式,找到更精確的資料。
不同資料庫有不同設定。MySQL 預設不區分大小寫,PostgreSQL 會區分。你查詢前要先確認。
你用 LIKE 查詢時,特別是模式開頭有 %,資料庫無法用索引,查詢速度會變慢。你要注意效能。
免費資源下載