請說明 (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
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們