CodeGym /Các khóa học /SQL SELF /Kiểm tra giá trị NULL: IS NULL và IS NOT NULL

Kiểm tra giá trị NULL: IS NULL và IS NOT NULL

SQL SELF
Mức độ , Bài học
Có sẵn

Hôm nay tụi mình sẽ tiếp tục tìm hiểu về NULL — anh hùng thầm lặng trong database. Nếu bạn vẫn nghĩ NULL chỉ là "không có gì", thì đúng đó, nhưng chưa đủ đâu nha. Trong bài này, mình sẽ chỉ cho bạn cách kiểm tra xem dữ liệu của mình có NULL không, và làm gì với nó. Sẵn sàng đi săn giá trị thiếu chưa?

Bắt đầu đơn giản nhé — tưởng tượng bạn đang làm việc với database của một shop online. Bạn có bảng đơn hàng, trong đó một số đơn không có thông tin ghi chú, còn một số thì có. Nếu bạn muốn tìm tất cả đơn hàng không có ghi chú mà lại dùng so sánh bình thường =, <>, bạn sẽ bất ngờ đó... Tại sao? Vì NULL là trường hợp đặc biệt mà!

Trong SQL, để kiểm tra có hay không có NULL thì phải dùng IS NULLIS NOT NULL. Hai ông này giúp mình xử lý NULL và lấy đúng dữ liệu cần thiết.

Kiểm tra giá trị với IS NULL

IS NULL dùng để kiểm tra xem một cột hoặc biểu thức có giá trị NULL không.

SELECT *
FROM orders
WHERE comment IS NULL;

Query này sẽ trả về tất cả các dòng mà cột commentNULL. Rất tiện nếu bạn muốn tìm đơn hàng không có ghi chú.

Ví dụ bảng orders:

id customer_name total_amount comment
1 Otto Art 1500 "Giao hàng gấp"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

Query:

SELECT id, customer_name
FROM orders
WHERE comment IS NULL;

Kết quả:

id customer_name
2 Maria Chi
4 Anna Song

Lưu ý là dòng có chuỗi rỗng '' không được tính vào, vì '' không phải là NULL đâu nha.

Kiểm tra giá trị với IS NOT NULL

IS NOT NULL thì ngược lại; nó kiểm tra xem giá trị có phải không phải NULL không. Ví dụ, bạn muốn lấy tất cả đơn hàng có ghi chú:

SELECT *
FROM orders
WHERE comment IS NOT NULL;

Query này chỉ trả về các dòng mà cột comment có dữ liệu (kể cả chuỗi rỗng '').

Ví dụ

Bảng orders vẫn như cũ nha.

id customer_name total_amount comment
1 Otto Art 1500 "Giao hàng gấp"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

Chạy query này nhé:

SELECT id, customer_name, comment
FROM orders
WHERE comment IS NOT NULL;

Kết quả:

id customer_name comment
1 Otto Art "Giao hàng gấp"
3 Alex Lin ''

Lưu ý là dòng có chuỗi rỗng '' cũng được tính vào. SQL coi đây là giá trị "không rỗng".

Khi nào dùng IS NULLIS NOT NULL?

Một vài trường hợp hay gặp nè:

  1. Lọc dữ liệu: bạn muốn loại bỏ các bản ghi chưa đủ thông tin, thiếu giá trị.
  2. Xử lý lỗi: đôi khi NULL có thể là lỗi nhập liệu, bạn cần tách riêng các dòng này ra.
  3. Phân tích dữ liệu: đếm số bản ghi thiếu giá trị giúp bạn đánh giá chất lượng dữ liệu.

Ứng dụng thực tế

Thử vài bài tập thực tế nhé:

Bài 1: Chọn sinh viên chưa có ngày sinh

Giả sử bạn có bảng students:

id name birth_date
1 Otto Art 2000-05-10
2 Maria Chi NULL
3 Alex Lin 1998-12-30
4 Anna Song NULL

Query:

SELECT name
FROM students
WHERE birth_date IS NULL;

Kết quả:

name
Maria Chi
Anna Song

Query này rất hữu ích để tìm sinh viên cần bổ sung ngày sinh.

Bài 2: Chọn đơn hàng có ghi chú

id customer_name total_amount comment
1 Otto Art 1500 "Giao hàng gấp"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

Với bảng orders này, bạn có thể tìm đơn hàng đã có ghi chú như sau:

SELECT customer_name, comment
FROM orders
WHERE comment IS NOT NULL;

Kết quả:

customer_name comment
Otto Art "Giao hàng gấp"
Alex Lin ''

So sánh với các toán tử thông thường

Giờ thử làm một query "sai lầm" để kiểm tra NULL nhé:

SELECT *
FROM orders
WHERE comment = NULL;

Bất ngờ chưa? Query này sẽ không trả về dòng nào, kể cả khi comment rõ ràng là NULL. Đó là vì NULL không thể so sánh bằng các toán tử thông thường. Muốn so sánh kiểu này thì phải dùng IS NULL nha.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION