NULL có hành vi đặc biệt:so sánh bất cứ thứ gì với NULL sẽ trả lại cho bạn một NULL
, là một cái gì đó khác với false
hoặc 0
. Nó có nghĩa là "không xác định".
Ví dụ:lấy bảng sau:
user_id | gender
------------------
1 | NULL
2 | 'M'
3 | 'F'
4 | 'F'
SELECT * FROM mytable WHERE gender = 'M'
sẽ trả về 1 hàng, như mong đợi
SELECT * FROM mytable WHERE gender != 'M'
sẽ trả về 2 hàng, KHÔNG phải 3 hàng.
SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL
sẽ trả về 3 hàng mong đợi.
Chỉnh sửa:Đối với một số ứng dụng, sử dụng 0
(hoặc, xin Chúa cấm, một "số ma thuật" khác) thay vì NULL
thậm chí không được khuyến khích (đơn vị hoặc giá trị chính xác không liên quan trong ví dụ này):
Date | Temperature
--------------------------
2010-01-01 | 10
2010-01-02 | 4
2010-01-03 | 0
2010-01-04 | -22
2010-01-05 | -45
2010-01-06 | NULL
2010-01-07 | -34
Đây, NULL
vào ngày 6 tháng 1 có nghĩa là "giá trị không xác định" - có thể do nhiệt độ quá thấp nên đầu dò nhiệt kế ngừng phản hồi. Tuy nhiên, nó có ý nghĩa hoàn toàn khác với ngày 3 tháng 1, khi nhiệt độ là 0
, nghĩa là, 0 độ.
Ngoài ra, như @Bill Karwin đã đề cập, NULL hoạt động đặc biệt trong các hàm tổng hợp (COUNT
, SUM
, AVG
v.v.):tính toán AVG(Temperature)
trên dữ liệu trên sẽ cung cấp cho bạn -14.5
, vì hàng NULL bị bỏ qua.