MySQL - NOT REGEXP 運算子

NOT REGEXP 的介紹

你好,有志於數據庫的愛好者們!今天,我們將要深入探索MySQL的NOT REGEXP運算子的迷人世界。作為你們親切鄰居的計算機老師,我將帶著第一次學習這個主題時的興奮心情,來指導你們。相信我,到了這堂課的結尾,你將能像數據庫巫師一樣運用這個強大的工具!

MySQL - NOT REGEXP Operator

NOT REGEXP 是什麼?

在我們深入細節之前,讓我們先了解NOT REGEXP到底是什麼。簡單來說,NOT REGEXP就像是一家獨家俱樂部的保鏢,但它不是讓人進去,而是將特定的模式從我們的搜索結果中排除。

REGEXP代表正則表達式,是一組形成搜索模式的字符序列。當我們在它前面加上NOT時,我們其實是在說:“嘿,MySQL,讓我看看所有不匹配這個模式的東西!”

MySQL NOT REGEXP 運算子的實際應用

讓我們捲起袖子,看看這個是如何在實踐中運作的。假設我們有一個名為book_club的表,其中有一個列book_title。我們想要找到所有標題中不含單詞“mystery”的書籍。

SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP 'mystery';

在這個例子中,MySQL會返回所有不包含單詞“mystery”的書名。這就像請你的圖書管理員為你找出所有不是神秘小說的書籍——相當厲害,不是嗎?

大小寫敏感

有一點要注意的是,默認情況下,REGEXP(和NOT REGEXP)是不區分大小寫的。所以'mystery'、'Mystery',甚至是'mYsTeRy'都會在我們之前的例子中被排除。如果你想要讓它區分大小寫,你可以使用BINARY關鍵字:

SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP BINARY 'mystery';

現在,只有'mystery'(全部小寫)會被排除,但'Mystery'或'MYSTER'會出現在結果中。

高級 NOT REGEXP 模式

讓我們把技術提升一個層次,看看一些更複雜的模式。記住,NOT REGEXP是非常多功能的!

排除多個單詞

如果我們想要排除標題中有“mystery”或“thriller”的書籍怎麼辦?

SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP 'mystery|thriller';

|符號的作用就像是一個“或”運算符。這個查詢會返回所有標題中不包含“mystery”或“thriller”的書籍。

排除開頭或結尾的單詞

也許我們想要找到不以“The”開頭的書籍:

SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP '^The';

^符號將模式固定到字符串的開頭。同樣,如果我們想要找不以“Chronicles”結尾的書籍,我們可以使用:

SELECT book_title
FROM book_club
WHERE book_title NOT REGEXP 'Chronicles$';

$符號將模式固定到字符串的結尾。

在客戶端程序中使用 NOT REGEXP 運算子

現在,讓我們看看如何在客戶端程序中使用NOT REGEXP。我將使用Python和MySQL Connector庫作為示例,但其他語言的概念是相似的。

import mysql.connector

# 建立連接
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="book_club_db"
)

mycursor = mydb.cursor()

# 執行 NOT REGEXP 查詢
mycursor.execute("SELECT book_title FROM book_club WHERE book_title NOT REGEXP 'fantasy|sci-fi'")

# 獲取並打印結果
for x in mycursor:
print(x)

這個腚本連接到我們的數據庫,運行一個查詢以找到所有標題中不含“fantasy”或“sci-fi”的書籍,然後打印結果。

常見 NOT REGEXP 模式

讓我們看看一些你可能會發現有用的常見模式:

模式 描述 示例
[^...] 匹配任何不在括號中的字符 '[^aeiou]' 匹配任何非元音字母
.* 匹配任何字符序列 'not.*end' 匹配包含“not”和“end”並且有任意字符在它們之間的字符串
\d 匹配任何數字 '\d' 匹配任何單個數字
\D 匹配任何非數字 '\D' 匹配任何單個非數字字符
\s 匹配任何空白字符 '\s' 匹配空格、制表符、換行符
\S 匹配任何非空白字符 '\S' 匹配任何不是空格、制表符或換行符的字符

結論

以上就是NOT REGEXP運算子的介紹,從基本使用到更複雜的模式。記住,像任何強大的工具一樣,它需要練習才能掌握。不要害怕嘗試不同的模式,看看你會得到什麼結果。

在我多年的教學經歷中,我見過學生從對NOT REGEXP感到困惑,到在複雜查詢中輕鬆使用它。你已經在成為他們中的一員的路上!

在我離開之前,這裡有一個數據庫幽默給你:為什麼開發人員放棄了他的工作?他無法TABLE(表示)關於他薪水的討論!(懂了嗎?TABLE?好吧,我會自己出去...)

持續練習,保持好奇心,並且快樂地進行查詢!

Credits: Image by storyset