MySQL - NOT LIKE 運算子

Hello, 動手學習資料庫的熱心朋友們!今天,我們將要深入 MySQL 的精彩世界,並探索我們 SQL 工具包中的一個強大工具:NOT LIKE 運算子。作為你們親切友善的鄰居電腦老師,我很興奮能夠帶領你們開始這個旅程,即使你們之前從未寫過一行代碼。那麼,請繫好安全帶,我們開始吧!

MySQL - NOT LIKE Operator

MySQL NOT LIKE 運算子

NOT LIKE 運算子就像是 LIKE 運算子的反叛兄弟。當 LIKE 帮助我們找到匹配的模式時,NOT LIKE 則做相反的事情 —— 它幫助我們找到不符合特定模式的每一項。這就像是告訴你的電腦:"除了這個,顯示所有內容!"

讓我們從一個簡單的例子開始。假設我們有一個名為 books 的表,其中有一個名為 title 的列。如果我們想要找到所有不以字母 'A' 開頭的書籍,我們可以使用:

SELECT * FROM books WHERE title NOT LIKE 'A%';

這段代碼的作用如下:

  • SELECT *:這告訴 MySQL 選擇所有列。
  • FROM books:我們在 books 表中查找。
  • WHERE title NOT LIKE 'A%':這是魔法部分。它說:"給我所有不以 'A' 開頭的標題。"

% 是一個萬用字符,意味著 "之後可以是任何東西。" 所以 'A%' 意味著 "A 之後跟隨任何東西。"

使用 NOT LIKE 運算子與萬用字符

現在,讓我們加入一些萬用字符來增加趣味!MySQL 提供了两個主要的萬用字符:

  • %:代表零個、一個或多個字符
  • _:代表一個字符

以下是常見萬用字符的使用表:

萬用字符 描述 示例
% 任何數量的字符 '%adventure%'
_ 單一字符 '_at'
[charlist] charlist 中的任何單一字符 [abc]%'
[^charlist][!charlist] 不在 charlist 中的任何單一字符 '[^abc]%'

假設我們想要找到所有不以 "ing" 結尾的書名:

SELECT * FROM books WHERE title NOT LIKE '%ing';

或者也許我們想要找到沒有恰好三個字符的書籍:

SELECT * FROM books WHERE title NOT LIKE '___';

每個下劃線代表一個字符,所以 '___' 意味著 "恰好三個字符。"

使用 NOT LIKE 運算子與 AND/OR 運算子

有時候,我們需要組合多個條件。這時 AND 和 OR 非常方便。讓我們找到所有不以 'T' 開頭且不以 'ing' 結尾的書籍:

SELECT * FROM books
WHERE title NOT LIKE 'T%'
AND title NOT LIKE '%ing';

或者也許我們想要找到既不以 'A' 開頭也不以 'z' 結尾的書籍:

SELECT * FROM books
WHERE title NOT LIKE 'A%'
OR title NOT LIKE '%z';

記住,AND 意味著兩個條件都必須為真,而 OR 意味著至少一個條件必須為真。

NOT LIKE 運算子在字符串上的使用

NOT LIKE 運算子在處理字符串時特別有用。假設我們有一個 customers 表,我們想要找到所有名稱中不包含 'son' 的客戶:

SELECT * FROM customers
WHERE name NOT LIKE '%son%';

這個查詢將返回所有名稱中不含有 'son' 的記錄。所以 'Johnson' 和 'Sonny' 會被排除,但 'Smith' 和 'Brown' 會被包括。

這裡有一個有趣的變化:如果我們想要找到第二個字母不是 'a' 的名稱呢?

SELECT * FROM customers
WHERE name NOT LIKE '_a%';

這個查詢說:"顯示所有第二個字母不是 'a' 的名稱。"

NOT LIKE 運算子使用客戶端程序

現在,讓我們將所有這些知識應用到使用 MySQL 客戶端程序中。我會使用 MySQL 命令行客戶端作為例子,但這些原則適用於任何 MySQL 客戶端。

首先,讓我們創建一個簡單的 employees 表:

CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
position VARCHAR(50)
);

INSERT INTO employees (name, position) VALUES
('John Doe', 'Manager'),
('Jane Smith', 'Developer'),
('Bob Johnson', 'Designer'),
('Alice Brown', 'Tester');

現在,讓我們找到所有職位不以 'D' 開頭的員工:

SELECT * FROM employees
WHERE position NOT LIKE 'D%';

這應該會返回 John Doe (經理) 和 Alice Brown (測試員)。

讓我們試一些更複雜的。我們想要找到名稱不以 'J' 開頭且職位不以 'er' 結尾的員工:

SELECT * FROM employees
WHERE name NOT LIKE 'J%'
AND position NOT LIKE '%er';

這應該會返回 Alice Brown (測試員)。

就是这样!你剛剛掌握了 MySQL 中的 NOT LIKE 運算子。記住,熟能生巧,所以不要害怕嘗試你自己的查詢。誰知道呢?你可能會在你數據中發現一些之前從未注意到的有趣模式!

當我們結束時,我想要分享一個來自我多年教學經驗的小秘密:學習 SQL 的最佳方式就是把它當作一個謎題遊戲。每一個查詢都是一個等待被解開的謎題。所以,戴上你的偵探帽,開始探索你的數據吧。祝你好運,未來的數據庫魔法師!

Credits: Image by storyset