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