請說明 (NOT) LIKE 運算子是用來做什麼的?
2022年9月29日
💎 加入 E+ 成長計畫 如果你喜歡我們的內容,歡迎加入 E+,獲得更多深入的軟體前後端內容
LIKE
運算子是用來做模糊搜尋時使用的,它可以協助我們找到「具有特定模式」的資料,在使用上經常會搭配 %
來用。而 NOT LIKE
則是反過來,它可以協助我們找到「不具」特定模式的資料。舉例來說,在讀取、更新、刪除上,我們可以這樣使用 LIKE
-- 讀取具有某個模式的資料
SELECT column FROM table_name WHERE column LIKE pattern;
-- 更新具有某個模式的資料
UPDATE table_name SET column=value WHERE column LIKE pattern;
-- 刪除具有某個模式的資料
DELETE FROM table_name WHERE column LIKE pattern;
讓我們透過實戰題目來了解,LeetCode 的 1873. Calculate Special Bonus 正好是可以透過 NOT LIKE
解的題目。
題目給了一個叫 Employees
的表 (如下),要我們算出每個員工的 bonus
。 每位員工的bonus
是根據以下條件計算,如果員工的 ID 要是奇數,以及員工的名字開頭不能是 M
,則可以拿到薪水 100%
的 bonus
;如果不符合上述條件,拿到的 bonus
會是 0
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| employee_id | int |
| name | varchar |
| salary | int |
+-------------+---------+
看到題目給的範例。根據輸入的 Employees
表,我們可以看到,有拿到 bonus
的只有 Addilyn 跟 Kannon。Michael 雖然 ID 是奇數,但因為名字開頭是 M
所以只拿到 0
;Juan 雖然名字開頭不是 M
但因為 ID 是偶數,所以也是拿到 0
。
輸入:
Employees table:
+-------------+---------+--------+
| employee_id | name | salary |
+-------------+---------+--------+
| 2 | Meir | 3000 |
| 3 | Michael | 3800 |
| 7 | Addilyn | 7400 |
| 8 | Juan | 6100 |
| 9 | Kannon | 7700 |
+-------------+---------+--------+
輸出:
+-------------+-------+
| employee_id | bonus |
+-------------+-------+
| 2 | 0 |
| 3 | 0 |
| 7 | 7400 |
| 8 | 0 |
| 9 | 7700 |
+-------------+-------+
使用 NOT LIKE
上面提到 LIKE
可以用來搜尋具有特定模式的資料、NOT LIKE
可以用來搜尋不具特定模式的資料。而在這一題,「名字開頭不是 M
」這個條件,正是要搜尋「不具 M
」這個特定模式,所以我們可以用 NOT LIKE
,把這句轉換成 SQL 語法會變成:
-- 名字不為 M 開頭
name NOT LIKE 'M%'
而這一題的完整解答如下:
SELECT employee_id,
IF (employee_id % 2 != 0 AND name NOT LIKE 'M%', salary, 0) as bonus
FROM Employees ORDER BY employee_id