Trong MySQL, ISNULL()
hàm cho phép chúng tôi kiểm tra xem giá trị có phải là null
hay không. Nếu nó là null
, rồi đến 1
được trả lại, nếu không thì 0
được trả lại.
Cú pháp
ISNULL(expr)
Ví dụ
Dưới đây là một ví dụ đơn giản để chứng minh:
SELECT ISNULL( null );
Kết quả:
1
Trong trường hợp này, biểu thức là null
và vì vậy đầu ra là 1
.
Đây là với một không null
giá trị:
SELECT ISNULL( 'Cake' );
Kết quả:
0
Lần này kết quả là 0
(bởi vì biểu thức không phải là null
).
Biểu thức
ISNULL()
kiểm tra kết quả của bất kỳ biểu thức nào. Vì vậy, nếu chúng ta làm như sau, ví dụ:
SELECT ISNULL( 3 / 0 );
Chúng tôi nhận được điều này:
1
Vì vậy, mặc dù chúng tôi không chỉ định null
là đối số, kết quả của biểu thức là null
và vì vậy ISNULL()
trả về 1
.
Điều này có thể được chứng minh rõ ràng hơn với ví dụ tiếp theo:
SELECT
3 / 0,
ISNULL( 3 / 0 );
Kết quả:
+-------+-----------------+ | 3 / 0 | ISNULL( 3 / 0 ) | +-------+-----------------+ | NULL | 1 | +-------+-----------------+ 1 row in set, 2 warnings (0.00 sec)
Trong cột đầu tiên, chúng ta có thể thấy rằng bản thân phép tính đã dẫn đến giá trị null và do đó cột thứ hai trả về 1
.
Trong khi chúng tôi đang ở đó, đây là các cảnh báo:
SHOW WARNINGS
Kết quả:
+---------+------+---------------+ | Level | Code | Message | +---------+------+---------------+ | Warning | 1365 | Division by 0 | | Warning | 1365 | Division by 0 | +---------+------+---------------+
Chúng tôi được cảnh báo rằng chúng tôi đã cố gắng chia cho 0 (dẫn đến giá trị rỗng).
Ví dụ về cơ sở dữ liệu
Giả sử chúng ta có một bảng cơ sở dữ liệu như sau:
SELECT * FROM Pets;
Kết quả:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | | 9 | 3 | 1 | Woof | 2020-10-03 | | 10 | 4 | 5 | Ears | 2022-01-11 | +-------+-----------+---------+---------+------------+
Đây là một truy vấn sử dụng ISNULL()
chức năng chống lại bảng đó:
SELECT
PetId,
PetName,
ISNULL( DOB ) AS "DOB is Missing?"
FROM Pets;
Kết quả:
+-------+---------+-----------------+ | PetId | PetName | DOB is Missing? | +-------+---------+-----------------+ | 1 | Fluffy | 0 | | 2 | Fetch | 0 | | 3 | Scratch | 0 | | 4 | Wag | 0 | | 5 | Tweet | 0 | | 6 | Fluffy | 0 | | 7 | Bark | 1 | | 8 | Meow | 1 | | 9 | Woof | 0 | | 10 | Ears | 0 | +-------+---------+-----------------+
Trong trường hợp đó, chúng tôi đã tạo một cột hiển thị 1
cho tất cả các vật nuôi không có bất kỳ thứ gì trong cột DOB của chúng.
Giả sử chúng tôi muốn trả lại tất cả vật nuôi không có ngày sinh được liệt kê (tức là DOB
của chúng trường null
). Trong trường hợp này, chúng ta có thể làm như sau:
SELECT * FROM Pets
WHERE ISNULL(DOB) = 1;
Kết quả:
+-------+-----------+---------+---------+------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------+ | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------+
Điều đó mang lại kết quả tương tự như làm như sau:
SELECT * FROM Pets
WHERE DOB IS NULL;
Kết quả:
+-------+-----------+---------+---------+------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------+ | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------+