1. Giới thiệu

Trong SQL, toán tử NOT là một công cụ mạnh mẽ giúp phủ định các điều kiện trong truy vấn. Khi làm việc với các câu lệnh như SELECT, UPDATE, DELETE, việc sử dụng toán tử NOT sẽ giúp bạn lọc dữ liệu theo cách phủ định lại một điều kiện cụ thể. Toán tử này rất hữu ích khi bạn muốn lấy những bản ghi không thỏa mãn một hoặc nhiều điều kiện trong truy vấn.

2. SQL NOT là gì?

Toán tử NOT trong SQL được sử dụng để phủ định một điều kiện. Khi điều kiện trả về kết quả đúng (TRUE), thì toán tử NOT sẽ khiến kết quả trở thành sai (FALSE), và ngược lại. Nó được sử dụng để lọc các bản ghi không thỏa mãn điều kiện cụ thể.

3. Các trường hợp sử dụng SQL NOT

a. Sử dụng SQL NOT với điều kiện đơn giản

Bạn có thể sử dụng NOT với các điều kiện cơ bản như so sánh bằng (=), lớn hơn (>), nhỏ hơn (<), v.v. Điều này sẽ giúp truy vấn các bản ghi không thỏa mãn điều kiện được đưa ra.

b. Sử dụng SQL NOT với toán tử LIKE

Toán tử NOT cũng có thể kết hợp với LIKE để lọc các bản ghi không phù hợp với một mẫu chuỗi ký tự cụ thể.

c. Sử dụng SQL NOT với toán tử IN

Khi sử dụng NOT kết hợp với IN, bạn có thể truy vấn các bản ghi có giá trị không thuộc tập hợp giá trị được chỉ định.

d. Sử dụng SQL NOT với toán tử BETWEEN

Bạn có thể sử dụng NOT để phủ định một khoảng giá trị khi sử dụng toán tử BETWEEN.

e. Sử dụng SQL NOT với IS NULL

NOT cũng có thể được sử dụng để phủ định điều kiện IS NULL, giúp bạn truy vấn các bản ghi không có giá trị NULL.

4. Kết hợp SQL NOT với các toán tử khác

Toán tử NOT có thể kết hợp với các toán tử logic khác như ANDOR để tạo ra các điều kiện phức tạp hơn.

Ví dụ 6: Lấy tất cả các nhân viên không thuộc phòng ban "Sales" và có tuổi trên 30

shell
SELECT first_name, last_name, age, department
FROM employees
WHERE NOT department = 'Sales' AND age > 30;

Trong câu lệnh này:

  • NOT phủ định điều kiện department = 'Sales', nghĩa là nhân viên thuộc các bộ phận khác sẽ được chọn.
  • AND kết hợp với điều kiện age > 30 để chỉ lấy những nhân viên có tuổi lớn hơn 30.

Ví dụ 7: Lấy danh sách các đơn hàng không được đặt trong tháng 9 và có giá trị nhỏ hơn 1 triệu

shell
SELECT order_id, order_date, total_amount
FROM orders
WHERE NOT (MONTH(order_date) = 9) AND total_amount < 1000000;

Trong câu lệnh này:

  • Điều kiện NOT (MONTH(order_date) = 9) loại bỏ các đơn hàng được đặt trong tháng 9.
  • Điều kiện AND total_amount < 1000000 lọc các đơn hàng có tổng giá trị nhỏ hơn 1 triệu.

5. Các ví dụ về sử dụng SQL NOT

Ví dụ 1: Lấy tất cả các khách hàng không đến từ "Hà Nội"

shell
SELECT first_name, last_name, city
FROM customers
WHERE NOT city = 'Hà Nội';

Ví dụ 2: Lấy tất cả các sản phẩm không thuộc danh mục "Electronics" và có giá lớn hơn 200.000

shell
SELECT product_name, price, category
FROM products
WHERE NOT category = 'Electronics' AND price > 200000;

Ví dụ 3: Lấy danh sách các đơn hàng có tổng giá trị không nằm trong khoảng từ 1 triệu đến 5 triệu

shell
SELECT order_id, total_amount
FROM orders
WHERE total_amount NOT BETWEEN 1000000 AND 5000000;

Ví dụ 4: Xóa tất cả các bản ghi khách hàng không có địa chỉ email

shell
DELETE FROM customers
WHERE email IS NOT NULL;

6. Một số lưu ý khi sử dụng SQL NOT

a. Kết hợp cẩn thận với các toán tử khác

Khi sử dụng NOT kết hợp với các toán tử khác như AND, OR, IN, LIKE, bạn cần đặc biệt chú ý đến thứ tự ưu tiên của các phép so sánh. Hãy sử dụng dấu ngoặc đơn để nhóm các điều kiện một cách rõ ràng.

b. Hiệu suất của toán tử NOT

Trong các bảng dữ liệu lớn, việc sử dụng NOT có thể ảnh hưởng đến hiệu suất truy vấn vì cơ sở dữ liệu phải duyệt qua nhiều bản ghi để tìm ra những bản ghi không thỏa mãn điều kiện. Bạn nên tối ưu hóa bằng cách sử dụng chỉ mục (index) cho các cột trong điều kiện truy vấn nếu cần thiết.

c. Tránh sử dụng NOT với toán tử LIKE trong các bảng lớn

Khi sử dụng NOT với LIKE, hãy cẩn thận vì việc tìm kiếm các mẫu phủ định trong chuỗi ký tự có thể làm giảm tốc độ truy vấn, đặc biệt trong các bảng có nhiều bản ghi.

7. Kết luận

Toán tử NOT trong SQL là một công cụ hữu ích giúp bạn lọc dữ liệu dựa trên điều kiện phủ định. Nó có thể được sử dụng với các toán tử khác như IN, BETWEEN, LIKE, và IS NULL để tạo ra các truy vấn linh hoạt và hiệu quả hơn. Khi kết hợp với các toán tử logic khác như ANDOR, bạn có thể xây dựng các điều kiện truy vấn phức tạp hơn, phục vụ cho các nhu cầu cụ thể của mình.

Việc hiểu và sử dụng đúng cách toán tử NOT sẽ giúp bạn tối ưu hóa các truy vấn SQL và làm việc hiệu quả hơn với cơ sở dữ liệu. Hãy thử áp dụng các ví dụ và kiến thức trong bài viết này trong các dự án thực tế trên CodeTutHub để thành thạo hơn trong việc xử lý dữ liệu với SQL!