Mục lục
Mệnh đề NOT trong SQL dùng để phủ định một điều kiện trong mệnh đề WHERE được sử dụng trong các câu lệnh SELECT, INSERT, UPDATE hay DELETE.
Cú pháp
NOT condition
Condition – Đây là điều kiện để phủ định. Điều kiện ngược lại phải được thỏa mãn để bản ghi được đưa vào tập kết quả.
Ví dụ sử dụng NOT với IN trong SQL
Đầu tiên chúng ta sẽ học cách sử dụng NOT với điều kiện IN trong SQL. Điều kiện IN cho phép chúng ta liệt kê một tập hợp các giá trị có thể có của một cột cụ thể. Việc sử dụng chung với IN nghĩa rằng giá trị của một cột phải khác tập giá trị này.
Giả sử có bảng Product có data sau:
product_id | product_name | category_id |
---|---|---|
1 | Pear | 50 |
2 | Banana | 50 |
3 | Orange | 50 |
4 | Apple | 50 |
5 | Bread | 75 |
6 | Sliced Ham | 25 |
7 | Kleenex | NULL |
SELECT * FROM products WHERE product_name NOT IN ('Pear', 'Banana', 'Bread');
Output
product_id | product_name | category_id |
---|---|---|
3 | Orange | 50 |
4 | Apple | 50 |
6 | Sliced Ham | 25 |
7 | Kleenex | NULL |
Ví dụ này sẽ trả về tất cả các bảng ghi từ bảng product trong đó product_name không phải là Pear, Banana hay Bread.
Câu SQL trên có thể chuyển thành cách viết các toán tử toán học như sau
SELECT * FROM products WHERE product_name <> 'Pear' AND product_name <> 'Banana' AND product_name <> 'Bread';
Ví dụ sử dụng NOT với IS NULL
Điều kiện IS NULL chỉ ra rằng giá trị của một cột phải có giá trị NULL, việc sử dụng với NOT sẽ phủ định lại điều kiện này nghĩa rằng giá trị của một cột phải khác NULL mới thỏa mãn điều kiện.
SELECT * FROM products WHERE category_id IS NOT NULL;
Output
product_id | product_name | category_id |
---|---|---|
1 | Pear | 50 |
2 | Banana | 50 |
3 | Orange | 50 |
4 | Apple | 50 |
5 | Bread | 75 |
6 | Sliced Ham | 25 |
Câu truy vấn trên sẽ trả về tất cả các bản ghi từ bảng product trong đó customer_id không chứa giá trị NULL.
Ví dụ sử dụng NOT với LIKE
Tiếp theo, hãy xem một ví dụ về cách sử dụng toán tử NOT với điều kiện LIKE. Trong ví dụ này, chúng ta có một bảng được gọi là nhà cung cấp với dữ liệu sau:
supplier_id | supplier_name | city | state |
---|---|---|---|
100 | Microsoft | Redmond | Washington |
200 | Mountain View | California | |
300 | Oracle | Redwood City | California |
400 | Kimberly-Clark | Irving | Texas |
500 | Tyson Foods | Springdale | Arkansas |
600 | SC Johnson | Racine | Wisconsin |
700 | Dole Food Company | Westlake Village | California |
800 | Flowers Foods | Thomasville | Georgia |
900 | Electronic Arts | Redwood City | California |
Hãy tìm kiếm tất cả các bản ghi trong bảng nhà cung cấp mà supplier_name cấp không chứa chữ cái ‘o’. Nhập câu lệnh SQL sau
SELECT * FROM suppliers WHERE supplier_name NOT LIKE '%o%';
Output
supplier_id | supplier_name | city | state |
---|---|---|---|
400 | Kimberly-Clark | Irving | Texas |
Ví dụ sử dụng NOT với BETWEEN
Toán tử NOT cũng có thể được kết hợp với điều kiện BETWEEN để tạo ra điều kiện NOT BETWEEN.
customer_id | last_name | first_name | favorite_website |
---|---|---|---|
4000 | Jackson | Joe | techonthenet.com |
5000 | Smith | Jane | digminecraft.com |
6000 | Ferguson | Samantha | bigactivities.com |
7000 | Reynolds | Allen | checkyourmath.com |
8000 | Anderson | Paige | NULL |
9000 | Johnson | Derek | techonthenet.com |
SELECT * FROM customers WHERE customer_id NOT BETWEEN 5000 AND 8000;
Output
customer_id | last_name | first_name | favorite_website |
---|---|---|---|
4000 | Jackson | Joe | techonthenet.com |
9000 | Johnson | Derek | techonthenet.com |
Câu truy vấn này sẽ trả về tất cả các hàng mà customer_id KHÔNG nằm trong khoảng từ 5000 đến 8000, bao gồm cả. Nó sẽ tương đương với câu lệnh SELECT sau:
SELECT * FROM customers WHERE customer_id < 5000 OR customer_id > 8000;
Sử dụng NOT với EXISTS
Cuối cùng, điều kiện NOT có thể được kết hợp với điều kiện EXISTS để tạo ra một điều kiện NOT EXISTS. Hãy xem một ví dụ cho thấy cách sử dụng điều kiện NOT EXISTS trong SQL.
Trong ví dụ này, chúng tacó một bảng được gọi là khách hàng với dữ liệu sau
customer_id | last_name | first_name | favorite_website |
---|---|---|---|
4000 | Jackson | Joe | techonthenet.com |
5000 | Smith | Jane | digminecraft.com |
6000 | Ferguson | Samantha | bigactivities.com |
7000 | Reynolds | Allen | checkyourmath.com |
8000 | Anderson | Paige | NULL |
9000 | Johnson | Derek | techonthenet.com |
Và một bảng được gọi là đơn đặt hàng với dữ liệu sau:
order_id | customer_id | order_date |
---|---|---|
1 | 7000 | 2016/04/18 |
2 | 5000 | 2016/04/18 |
3 | 8000 | 2016/04/19 |
4 | 4000 | 2016/04/20 |
5 | NULL | 2016/05/01 |
SELECT * FROM customers WHERE NOT EXISTS (SELECT * FROM orders WHERE customers.customer_id = orders.customer_id);
Output
customer_id | last_name | first_name | favorite_website |
---|---|---|---|
6000 | Ferguson | Samantha | bigactivities.com |
9000 | Johnson | Derek | techonthenet.co |
Ví dụ này trả về tất cả các khách hàng chưa có đơn đặt hàng nào trong bảng đơn hàng.