Bài này cafedev chia sẻ cho ace về cách sử dụng giá trị NULL và hàm IFNULL(), ISNULL(), COALESCE(), and NVL() trong SQL để lấy ra dữ liệu theo ý muốn của mình.
Lưu ý: Các bạn tham khảo bài giới thiệu này để lấy dữ liệu mẫu, cấu trúc và chạy các ví dụ của toàn bộ series này nha. Khi bạn thực hành mà không tìm thấy kết quả và không xảy ra lỗi thì có thể dữ liệu của bạn không tồn tại, vì vậy, bạn có thể insert thêm data vào bảng và thực hành lại nha.
Nội dung chính
1. Giá trị NULL là gì?
Trường có giá trị NULL là trường không có giá trị.
Nếu một trường trong bảng là tùy chọn, có thể chèn dữ liệu mới hoặc cập nhật dữ liệu mà không cần thêm giá trị vào trường này. Sau đó, trường sẽ được lưu với giá trị NULL.
Lưu ý: Giá trị NULL khác với giá trị 0 hoặc trường chứa khoảng trắng. Trường có giá trị NULL là trường đã bị bỏ trống trong quá trình tạo dữ liệu!
2. Làm thế nào để kiểm tra giá trị NULL?
Không thể kiểm tra các giá trị NULL bằng các toán tử so sánh, chẳng hạn như =, .
Thay vào đó, chúng ta sẽ phải sử dụng các toán tử IS NULL và IS NOT NULL.
Cú pháp IS NULL
SELECT column_names
FROM table_name
WHERE column_name IS NULL;
Cú pháp IS NOT NULL
SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;
Ví dụ: IS NULL
Toán tử IS NULL được sử dụng để kiểm tra các giá trị trống (giá trị NULL).
SQL sau liệt kê tất cả các khách hàng có giá trị NULL trong trường “Address”:
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NULL;
Mẹo: Luôn sử dụng IS NULL để tìm kiếm các giá trị NULL.
Ví dụ: IS NOT NULL
Toán tử IS NOT NULL được sử dụng để kiểm tra các giá trị không trống (giá trị NOT NULL).
SQL sau liệt kê tất cả các khách hàng có giá trị trong trường “Address”:
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NOT NULL;
3. Hàm IFNULL(), ISNULL(), COALESCE(), and NVL()
Ta có bảng:
P_Id | ProductName | UnitPrice | UnitsInStock | UnitsOnOrder |
---|---|---|---|---|
1 | Jarlsberg | 10.45 | 16 | 15 |
2 | Mascarpone | 32.56 | 23 | |
3 | Gorgonzola | 15.67 | 9 | 20 |
Giả sử rằng cột “UnitsOnOrder” là tùy chọn và có thể chứa giá trị NULL.
Nhìn vào câu lệnh SELECT sau:
SELECT ProductName, UnitPrice * (UnitsInStock + UnitsOnOrder)
FROM Products;
Trong ví dụ trên, nếu bất kỳ giá trị “UnitsOnOrder” nào là NULL, kết quả sẽ là NULL.
Các giải pháp
MySQL
Hàm IFNULL () trong MySQL cho phép bạn trả về một giá trị thay thế nếu một biểu thức là NULL:
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/
SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))
FROM Products;
hoặc chúng ta có thể sử dụng hàm COALESCE (), như sau:
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products;
SQL Server
Hàm ISNULL () của SQL Server cho phép bạn trả về một giá trị thay thế khi một biểu thức là NULL:
SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0))
FROM Products;
MS Access
Hàm MS Access IsNull () trả về TRUE (-1) nếu biểu thức là giá trị rỗng, ngược lại FALSE (0):
SELECT ProductName, UnitPrice * (UnitsInStock + IIF(IsNull(UnitsOnOrder), 0, UnitsOnOrder))
FROM Products;
Oracle
Hàm Oracle NVL () đạt được kết quả tương tự:
SELECT ProductName, UnitPrice * (UnitsInStock + NVL(UnitsOnOrder, 0))
FROM Products;
Lưu ý: Các bạn tham khảo bài giới thiệu này để lấy dữ liệu mẫu và chạy các ví dụ của toàn bộ series này nha. Khi bạn thực hành mà không tìm thấy kết quả và không xảy ra lỗi thì có thể dữ liệu của bạn không tồn tại, vì vậy, bạn có thể insert thêm data vào bảng và thực hành lại nha.
Full series tự học SQL từ cơ bản tới nâng cao tại đây nha.
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng!