MySQL - NOT LIKE Operator

Xin chào, những người đam mê cơ sở dữ liệu! Hôm nay, chúng ta sẽ lặn sâu vào thế giới kỳ diệu của MySQL và khám phá một công cụ mạnh mẽ trong bộ công cụ SQL của chúng ta: toán tử NOT LIKE. Là người giáo viên máy tính gần gũi của bạn, tôi rất vui mừng được hướng dẫn bạn trong hành trình này, ngay cả khi bạn chưa bao giờ viết một dòng mã trước đây. Hãy căng dây và bắt đầu nào!

MySQL - NOT LIKE Operator

MySQL NOT LIKE Operator

Toán tử NOT LIKE là như anh chị em nổi loạn của toán tử LIKE. Còn LIKE giúp chúng ta tìm thấy các mẫu khớp, NOT LIKE lại làm ngược lại - nó giúp chúng ta tìm thấy mọi thứ không khớp với một mẫu cụ thể. Đó như đang nói với máy tính của bạn, "Hiển thị cho tôi tất cả ngoại trừ điều này!"

Hãy bắt đầu với một ví dụ đơn giản. Giả sử chúng ta có một bảng叫做 books với một cột title. Nếu chúng ta muốn tìm tất cả các sách không bắt đầu bằng chữ cái 'A', chúng ta có thể sử dụng:

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

Dưới đây là những gì đoạn mã này làm:

  • SELECT *: Điều này yêu cầu MySQL chọn tất cả các cột.
  • FROM books: Chúng ta đang tìm kiếm trong bảng books.
  • WHERE title NOT LIKE 'A%': Đây là phần kỳ diệu. Nó nói, "cho tôi tất cả các tựa sách không bắt đầu bằng 'A'."

Dấu % là một ký tự đại diện có nghĩa là "bất kỳ điều gì cũng có thể theo sau." Vậy 'A%' có nghĩa là "A theo sau bởi bất kỳ điều gì."

Using NOT LIKE Operator with Wildcards

Bây giờ, hãy làm cho mọi thứ thú vị hơn với một số ký tự đại diện! MySQL cung cấp hai ký tự đại diện chính:

  • %: Đại diện cho không, một hoặc nhiều ký tự
  • _: Đại diện cho một ký tự

Dưới đây là bảng các sử dụng ký tự đại diện phổ biến:

Ký tự đại diện Mô tả Ví dụ
% Bất kỳ số lượng ký tự nào '%adventure%'
_ Một ký tự '_at'
[charlist] Bất kỳ ký tự nào trong charlist '[abc]%'
[^charlist] hoặc [!charlist] Bất kỳ ký tự nào không trong charlist '[^abc]%'

Giả sử chúng ta muốn tìm tất cả các tựa sách không kết thúc bằng "ing":

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

Hoặc có thể chúng ta muốn sách không có chính xác ba ký tự:

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

Mỗi gạch dưới đại diện cho một ký tự, vậy '___' có nghĩa là "chính xác ba ký tự."

Using NOT LIKE Operator with AND/OR Operators

Đôi khi, chúng ta cần kết hợp nhiều điều kiện. Đó là khi AND và OR rất hữu ích. Hãy tìm sách không bắt đầu bằng 'T' và không kết thúc bằng 'ing':

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

Hoặc có thể chúng ta muốn sách không bắt đầu bằng 'A' và không kết thúc bằng 'z':

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

Nhớ rằng, AND có nghĩa là cả hai điều kiện phải đúng, trong khi OR có nghĩa là ít nhất một điều kiện phải đúng.

NOT LIKE Operator on Strings

Toán tử NOT LIKE đặc biệt hữu ích khi làm việc với chuỗi. Giả sử chúng ta có một bảng customers và chúng ta muốn tìm tất cả khách hàng whose names don't contain 'son':

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

Truy vấn này sẽ trả về tất cả các tên không có 'son' ở bất kỳ đâu. Vậy 'Johnson' và 'Sonny' sẽ bị loại bỏ, nhưng 'Smith' và 'Brown' sẽ được bao gồm.

Đây là một twist thú vị: giả sử chúng ta muốn tìm tên không có 'a' là ký tự thứ hai?

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

Truy vấn này nói, "Hiển thị cho tôi tất cả các tên mà ký tự thứ hai không phải là 'a'."

NOT LIKE Operator Using a Client Program

Bây giờ, hãy áp dụng tất cả kiến thức này vào thực tế bằng cách sử dụng một chương trình khách MySQL. Tôi sẽ sử dụng MySQL command-line client cho ví dụ này, nhưng các nguyên tắc này áp dụng cho bất kỳ khách MySQL nào.

Trước hết, hãy tạo một bảng employees đơn giản:

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');

Bây giờ, hãy tìm tất cả nhân viên whose positions don't start with 'D':

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

Điều này nên trả về John Doe (Manager) và Alice Brown (Tester).

Hãy thử một điều gì đó phức tạp hơn. Chúng ta muốn tìm nhân viên không bắt đầu bằng 'J' và không kết thúc bằng 'er':

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

Điều này nên trả về Alice Brown (Tester).

Và thế là xong! Bạn đã thành thạo toán tử NOT LIKE trong MySQL. Nhớ rằng, thực hành làm nên完美, vì vậy đừng ngại thử nghiệm với các truy vấn của riêng bạn. Ai biết được? Bạn có thể phát hiện ra một số mẫu thú vị trong dữ liệu của bạn mà bạn chưa bao giờ chú ý đến trước đây!

Khi chúng ta kết thúc, tôi muốn chia sẻ một bí mật từ những năm dạy học của mình: cách tốt nhất để học SQL là coi nó như một trò chơi puzzle. Mỗi truy vấn là một câu đố chờ đợi được giải quyết. Vậy, hãy đội mũ thám tử của bạn và bắt đầu khám phá dữ liệu của bạn. Chúc may mắn trong việc truy vấn, những phù thủy cơ sở dữ liệu tương lai!

Credits: Image by storyset