Phủ định NOT trong SQL

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 Google 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.

0 0 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x