SQL - LIKE 運算子
Hello, 動手的 SQL 爱好者們!今天,我們將要深入探討 SQL 中最有用和最通用的一個運算子:LIKE 運算子。作為你們親切友善的計算機科學老師,我很興奮能夠帶領你們進行這次旅程。所以,拿起你們最喜歡的飲料,放鬆身心,讓我們一起踏上這次 SQL 的冒險之旅吧!
SQL LIKE 運算子
LIKE 運算子在 SQL 中是一個強大的工具,它能讓我們在數據中尋找特定的模式。這就像是一個超級智能的放大鏡,能夠在我們的數據庫中精準地找到我們正在尋找的東西。
想像一下你在一個巨大的圖書館裡尋找一本書。你可能記不住確切的書名,但你知道書名中有 "adventure" 這個詞。LIKE 運算子就是你的圖書館助手朋友,能夠幫你找到所有標題中包含 "adventure" 的書籍。
LIKE 運算子的基本語法是:
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;
但這裡所謂的 "pattern" 到底是什麼呢?這就是我們下一個討論的主題...
什麼是萬用字符?
萬用字符是可以在搜索模式中代表一個或多個字符的特殊字符。它們就像牌堆中的一張王牌,可以代替任何其他牌。在 SQL 中,我們使用萬用字符與 LIKE 運算子一起創建靈活的搜索模式。
LIKE 運算子主要使用的兩種萬用字符是:
- % (百分號)
- _ (下劃線)
讓我們詳細探討這兩種萬用字符。
'%' 萬用字符
'%' 萬用字符代表零個、一個或多個字符。它是最多功能的萬用字符,通常在你對搜索模式的準確位置或長度不確定時使用。
以下是一些例子:
-- 找到所有名字以 'A' 開頭的客戶
SELECT * FROM Customers WHERE CustomerName LIKE 'A%';
-- 找到所有以 'phone' 結尾的產品
SELECT * FROM Products WHERE ProductName LIKE '%phone';
-- 找到所有產品名稱中包含 'book' 的訂單
SELECT * FROM Orders WHERE ProductName LIKE '%book%';
在第一個例子中,我們正在尋找所有名字以 'A' 開頭的客戶,後面跟隨任意數量的字符。這將匹配像 "Alex"、"Anna" 或甚至是 "A very long name" 這樣的名字。
第二個例子搜索以 'phone' 結尾的產品,這可能匹配 "iPhone"、"Smartphone" 或 "Headphone"。
最後一個例子找到任何產品名稱中包含 'book' 的訂單,所以它會匹配 "Bookshelf"、"Notebook" 或 "Book of Spells"。
'_' 萬用字符
'_' 萬用字符代表一個字符。它就像一個占位符,在模式中代表正好一個字符。
讓我們看一些例子:
-- 找到所有名字正好四個字符長的客戶
SELECT * FROM Customers WHERE CustomerName LIKE '____';
-- 找到所有以 'A' 開頭且長度為五個字符的產品
SELECT * FROM Products WHERE ProductName LIKE 'A____';
-- 找到所有訂單編號的第二個字符是 '3' 的訂單
SELECT * FROM Orders WHERE OrderID LIKE '_3%';
在第一個例子中,我們正在尋找名字正好四個字符長的客戶。這將匹配像 "John" 或 "Mary" 這樣的名字,但不會匹配 "Alexander" 或 "Bob"。
第二個例子搜索以 'A' 開頭且長度為五個字符的產品名稱。它將匹配 "Apple" 或 "Audio",但不會匹配 "Apricot" 或 "A4 paper"。
最後一個例子找到訂單編號的第二個字符是 '3' 的所有訂單。它可能匹配 "13456"、"23789" 或任何第二個字符為 '3' 的組合。
LIKE 運算子與 OR
有時候,我們想同時搜索多個模式。這時,OR 運算子就派上用場了。我們可以將它與 LIKE 一起使用,在同一個查詢中搜索不同的模式。
這裡有一個例子:
-- 找到所有名字以 'A' 開頭或以 's' 結尾的客戶
SELECT * FROM Customers
WHERE CustomerName LIKE 'A%' OR CustomerName LIKE '%s';
這個查詢將返回像 "Alice"、"Andreas"、"Boris" 或 "Charles" 的客戶。它匹配那些要么以 'A' 開頭,要么以 's' 結尾的名字(或者兩者都是)。
NOT 運算子與 LIKE條件
如果我們想要找到與特定模式不匹配的所有東西該怎麼辦?這時,NOT 運算子就派上用場了。我們可以使用 NOT LIKE 來排除我們搜索中的某些模式。
這裡有一個例子:
-- 找到所有不以 'A' 開頭的產品
SELECT * FROM Products
WHERE ProductName NOT LIKE 'A%';
這個查詢將返回除了以 'A' 開頭的所有產品。所以它會包括 "Banana"、"Cherry"、"Dell Laptop",但不會包括 "Apple" 或 "Acer Monitor"。
LIKE 運算子中的脫逸字符
有時候,我們可能想要搜索包含萬用字符本身的模式。例如,如果我們想要找到名稱中包含 '%' 的產品該怎麼辦?我們使用脫逸字符來告訴 SQL 我們想將這些特殊字符當作普通字符對待。
在 SQL 中,脫逸字符默認是反斜杠 ()。以下是如何使用它:
-- 找到名稱中包含 '%' 的產品
SELECT * FROM Products
WHERE ProductName LIKE '%\%%';
-- 找到名稱中包含 '_' 的產品
SELECT * FROM Products
WHERE ProductName LIKE '%\_%';
第一個查詢將匹配像 "50% off"、"100% cotton" 等名稱。第二個查詢將匹配像 "A_B"、"C_D" 等名稱。
LIKE 運算子在 SQL 中的應用
LIKE 運算子在數據庫查詢中有許多實際應用。以下是一個總結常見應用的表格:
使用案例 | 示例查詢 |
---|---|
查找部分匹配 | SELECT * FROM Customers WHERE CustomerName LIKE '%son%'; |
搜索特定格式 | SELECT * FROM Orders WHERE OrderID LIKE 'ORD_____'; |
根據開頭/結尾字符過濾 | SELECT * FROM Products WHERE ProductName LIKE 'A%' OR ProductName LIKE '%z'; |
排除某些模式 | SELECT * FROM Employees WHERE EmployeeName NOT LIKE 'John%'; |
搜索特殊字符 | SELECT * FROM Products WHERE ProductName LIKE '%\%%'; |
記住,在大多數 SQL 實現中,LIKE 運算子默認是不區分大小寫的。這意味著 'a%' 將匹配 'Apple'、'apple' 和 'APPLE'。
總結來說,LIKE 運算子是你 SQL 工具箱中的一個強大工具。它允許靈活的字符串匹配,在許多數據分析和检索任務中都非常關鍵。多加練習使用不同的萬用字符和組合,你很快就會像專業人士一樣使用它!
祝你們查詢愉快,未來的 SQL 大師們!
Credits: Image by storyset