MySQL - NOT REGEXP Operator

Giới thiệu về NOT REGEXP

Xin chào các bạn yêu thích cơ sở dữ liệu! Hôm nay, chúng ta sẽ cùng khám phá thế giới kỳ diệu của toán tử NOT REGEXP trong MySQL. Là người giáo viên máy tính gần gũi của bạn, tôi ở đây để hướng dẫn bạn qua chủ đề này với cùng niềm vui mà tôi đã cảm nhận khi lần đầu tiên học về nó. tin tôi đi, đến cuối bài học này, bạn sẽ sử dụng công cụ mạnh mẽ này như một phù thủy cơ sở dữ liệu!

MySQL - NOT REGEXP Operator

NOT REGEXP là gì?

Trước khi chúng ta đi vào chi tiết, hãy hiểu xem NOT REGEXP thực sự có nghĩa là gì. Nói đơn giản, NOT REGEXP giống như một bảo vệ tại câu lạc bộ độc quyền, nhưng thay vì để người vào, nó giữ các mẫu nhất định khỏi kết quả tìm kiếm của chúng ta.

REGEXP có nghĩa là Regular Expression, là một chuỗi ký tự tạo thành một mẫu tìm kiếm. Khi chúng ta thêm NOT trước nó, chúng ta thực sự đang nói, "Hey MySQL, hãy hiển thị cho tôi tất cả những gì không khớp với mẫu này!"

Toán tử NOT REGEXP trong hành động

Hãy c rolled up our sleeves và xem điều này hoạt động trong thực tế. Giả sử chúng ta có một bảng叫做 book_club với một cột book_title. Chúng ta muốn tìm tất cả các sách không có từ "mystery" trong tiêu đề.

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

Trong ví dụ này, MySQL sẽ trả về tất cả các tiêu đề sách không chứa từ "mystery". Đó giống như hỏi thư viện của bạn về tất cả các sách không phải là bí ẩn - rất thú vị phải không?

Case Sensitivity

Một điều quan trọng cần lưu ý là theo mặc định, REGEXP (và NOT REGEXP) không phân biệt chữ cái. Vì vậy 'mystery', 'Mystery', và thậm chí 'mYsTeRy' sẽ đều bị loại bỏ trong ví dụ trước. Nếu bạn muốn làm cho nó phân biệt chữ cái, bạn có thể sử dụng từ khóa BINARY:

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

Bây giờ, chỉ có 'mystery' (toàn bộ chữ thường) sẽ bị loại bỏ, nhưng 'Mystery' hoặc 'MYSTERY' vẫn sẽ xuất hiện trong kết quả của chúng ta.

Mẫu NOT REGEXP Nâng cao

Hãy nâng cấp và xem xét một số mẫu phức tạp hơn. Nhớ rằng NOT REGEXP rất linh hoạt!

Loại trừ Nhiều Từ

Nếu chúng ta muốn loại trừ sách có từ "mystery" hoặc "thriller" trong tiêu đề?

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

Ký tự | hoạt động như một toán tử "hoặc". Truy vấn này sẽ trả về tất cả các sách không có từ "mystery" hoặc "thriller" trong tiêu đề.

Loại trừ Từ ở Đầu hoặc Cuối

Có lẽ chúng ta muốn tìm sách không bắt đầu bằng "The":

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

Ký tự ^ neo mẫu vào đầu chuỗi. Tương tự, nếu chúng ta muốn sách không kết thúc bằng "Chronicles", chúng ta có thể sử dụng:

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

Ký tự $ neo mẫu vào cuối chuỗi.

Toán tử NOT REGEXP trong Chương trình Khách

Bây giờ, hãy xem chúng ta có thể sử dụng NOT REGEXP trong chương trình khách như thế nào. Tôi sẽ sử dụng Python với thư viện MySQL Connector làm ví dụ, nhưng khái niệm này cũng tương tự trong các ngôn ngữ khác.

import mysql.connector

# Thiết lập kết nối
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="book_club_db"
)

mycursor = mydb.cursor()

# Thực thi truy vấn NOT REGEXP
mycursor.execute("SELECT book_title FROM book_club WHERE book_title NOT REGEXP 'fantasy|sci-fi'")

# Lấy và in kết quả
for x in mycursor:
print(x)

Script này kết nối đến cơ sở dữ liệu của chúng ta, thực thi một truy vấn để tìm tất cả các sách không có "fantasy" hoặc "sci-fi" trong tiêu đề, và sau đó in kết quả.

Mẫu NOT REGEXP Thường gặp

Hãy xem xét một số mẫu phổ biến bạn có thể thấy hữu ích:

Mẫu Mô tả Ví dụ
[^...] Khớp với bất kỳ ký tự nào không trong dấu ngoặc '[^aeiou]' khớp với bất kỳ ký tự nào không phải nguyên âm
.* Khớp với bất kỳ chuỗi ký tự nào 'not.*end' khớp với các chuỗi có "not" và "end" với bất kỳ thứ gì ở giữa
\d Khớp với bất kỳ chữ số nào '\d' khớp với bất kỳ chữ số nào
\D Khớp với bất kỳ ký tự không phải chữ số nào '\D' khớp với bất kỳ ký tự không phải chữ số nào
\s Khớp với bất kỳ ký tự trắng nào '\s' khớp với các khoảng trống, tab, ký tự mới
\S Khớp với bất kỳ ký tự không phải trắng nào '\S' khớp với bất kỳ ký tự không phải khoảng trống, tab, ký tự mới

Kết luận

Và thế là bạn đã có nó, các nhà cơ sở dữ liệu tương lai! Chúng ta đã khám phá toán tử NOT REGEXP, từ cách sử dụng cơ bản đến các mẫu nâng cao. Nhớ rằng, như bất kỳ công cụ mạnh mẽ nào, nó cần thời gian để thành thạo. Đừng ngại thử nghiệm với các mẫu khác nhau và xem bạn sẽ nhận được kết quả gì.

Trong những năm dạy học của tôi, tôi đã thấy học sinh từ việc gãi đầu không hiểu NOT REGEXP đến việc sử dụng nó dễ dàng trong các truy vấn phức tạp. Bạn đang trên con đường gia nhập hàng ngũ của họ!

Trước khi tôi rời đi, đây là một chút hài hước về cơ sở dữ liệu: Tại sao nhà phát triển lại từ bỏ công việc của mình? Anh ấy không thể TABLE cuộc thảo luận về lương của mình! (Hiểu không? TABLE? Được rồi, tôi sẽ tự mình ra khỏi đây...)

Tiếp tục thực hành, giữ vững sự tò mò, và chúc may mắn với việc truy vấn!

Credits: Image by storyset