1. Giới thiệu
Trong MySQL, việc xử lý các giá trị NULL là điều thường xuyên gặp phải khi làm việc với cơ sở dữ liệu. NULL đại diện cho giá trị không xác định hoặc thiếu dữ liệu. Để kiểm tra và thay thế các giá trị NULL trong MySQL, chúng ta có thể sử dụng các hàm như IFNULL(), ISNULL(), COALESCE(), và NVL(). Mỗi hàm có cách sử dụng khác nhau và tùy thuộc vào hệ quản trị cơ sở dữ liệu (DBMS) mà bạn sử dụng.
Bài viết này sẽ giúp bạn hiểu rõ về từng hàm và cung cấp các ví dụ minh họa.
2. Hàm IFNULL() trong MySQL
a. Mô tả:
Hàm IFNULL() trong MySQL được sử dụng để trả về giá trị thay thế nếu giá trị đầu vào là NULL. Nếu giá trị không phải là NULL, hàm sẽ trả về chính giá trị đó.
b. Cú pháp:
IFNULL(expression, replacement_value);expression: Giá trị cần kiểm tra.replacement_value: Giá trị thay thế nếuexpressionlàNULL.
c. Ví dụ:
Giả sử chúng ta có bảng employees với các cột như sau:
| employee_id | first_name | last_name | department | bonus |
|---|---|---|---|---|
| 1 | John | Doe | Sales | 5000 |
| 2 | Jane | Smith | Marketing | NULL |
| 3 | Bob | Johnson | Sales | 3000 |
| 4 | Alice | Brown | HR | NULL |
Ví dụ 1: Sử dụng IFNULL() để thay thế giá trị NULL bằng 0
SELECT first_name, last_name, IFNULL(bonus, 0) AS bonus
FROM employees;Kết quả:
| first_name | last_name | bonus |
|---|---|---|
| John | Doe | 5000 |
| Jane | Smith | 0 |
| Bob | Johnson | 3000 |
| Alice | Brown | 0 |
3. Hàm ISNULL() trong MySQL
a. Mô tả:
Hàm ISNULL() kiểm tra xem một giá trị có phải là NULL hay không. Nó trả về 1 nếu giá trị là NULL và 0 nếu giá trị không phải là NULL. Trong MySQL, ISNULL() hoạt động tương tự như việc so sánh trực tiếp với NULL.
b. Cú pháp:
ISNULL(expression);expression: Giá trị cần kiểm tra.
c. Ví dụ:
Ví dụ 2: Kiểm tra xem giá trị của cột bonus có phải là NULL hay không
SELECT first_name, last_name, ISNULL(bonus) AS is_bonus_null
FROM employees;Kết quả:
| first_name | last_name | is_bonus_null |
|---|---|---|
| John | Doe | 0 |
| Jane | Smith | 1 |
| Bob | Johnson | 0 |
| Alice | Brown | 1 |
4. Hàm COALESCE() trong MySQL
a. Mô tả:
Hàm COALESCE() trả về giá trị không phải là NULL đầu tiên từ danh sách các đối số. Nếu tất cả các đối số đều là NULL, COALESCE() sẽ trả về NULL.
b. Cú pháp:
COALESCE(expression1, expression2, ..., expression_n);expression1, expression2, ..., expression_n: Các biểu thức cần kiểm tra. Hàm sẽ trả về giá trị không phảiNULLđầu tiên trong danh sách.
c. Ví dụ:
Ví dụ 3: Sử dụng COALESCE() để lấy giá trị bonus, nếu bonus là NULL, trả về 1000
SELECT first_name, last_name, COALESCE(bonus, 1000) AS bonus
FROM employees;Kết quả:
| first_name | last_name | bonus |
|---|---|---|
| John | Doe | 5000 |
| Jane | Smith | 1000 |
| Bob | Johnson | 3000 |
| Alice | Brown | 1000 |
Ví dụ 4: Sử dụng COALESCE() với nhiều biểu thức
SELECT first_name, last_name, COALESCE(bonus, salary, 5000) AS adjusted_value
FROM employees;Hàm sẽ trả về giá trị bonus nếu không phải là NULL, nếu bonus là NULL, nó sẽ kiểm tra và trả về salary, nếu cả hai đều NULL, nó sẽ trả về 5000.
5. Hàm NVL() trong MySQL
a. Mô tả:
Hàm NVL() hoạt động tương tự như IFNULL(). Nó được sử dụng trong Oracle để thay thế giá trị NULL bằng một giá trị khác. Nếu giá trị đầu tiên là NULL, NVL() trả về giá trị thay thế.
b. Cú pháp:
NVL(expression, replacement_value);expression: Giá trị cần kiểm tra.replacement_value: Giá trị thay thế nếuexpressionlàNULL.
c. Ví dụ:
Ví dụ 5: Sử dụng NVL() để thay thế giá trị NULL trong Oracle
SELECT first_name, last_name, NVL(bonus, 0) AS bonus
FROM employees;Kết quả:
| first_name | last_name | bonus |
|---|---|---|
| John | Doe | 5000 |
| Jane | Smith | 0 |
| Bob | Johnson | 3000 |
| Alice | Brown | 0 |
Lưu ý rằng NVL() chỉ khả dụng trong Oracle và không được hỗ trợ trực tiếp trong MySQL. Trong MySQL, bạn có thể sử dụng IFNULL() để thay thế.
6. Các ví dụ
Ví dụ 6: Kiểm tra và thay thế giá trị NULL trong câu lệnh tính toán
Giả sử bạn cần tính tổng thu nhập của nhân viên, bao gồm lương và tiền thưởng, nhưng tiền thưởng có thể có giá trị NULL cho một số nhân viên.
SELECT first_name, last_name,
salary + COALESCE(bonus, 0) AS total_income
FROM employees;Kết quả:
| first_name | last_name | total_income |
|---|---|---|
| John | Doe | 1505000 |
| Jane | Smith | 1700000 |
| Bob | Johnson | 1303000 |
| Alice | Brown | 2000000 |
Ví dụ 7: Xử lý nhiều giá trị NULL trong dữ liệu nhân viên
SELECT first_name, last_name,
COALESCE(bonus, salary, 0) AS final_value
FROM employees;Hàm sẽ trả về giá trị bonus nếu có, nếu không, nó sẽ kiểm tra và trả về salary. Nếu cả hai đều là NULL, giá trị trả về sẽ là 0.
7. So sánh các hàm IFNULL(), ISNULL(), COALESCE(), và NVL()
| Hàm | Mô tả | Hỗ trợ trong MySQL | Tính năng đặc biệt |
|---|---|---|---|
IFNULL() | Thay thế giá trị NULL bằng một giá trị khác | Có | Chỉ hoạt động với 2 đối số |
ISNULL() | Kiểm tra xem giá trị có phải là NULL hay không, trả về 1 nếu NULL, ngược lại 0 | Có | Trả về kết quả logic (1 hoặc 0) |
COALESCE() | Trả về giá trị không phải NULL đầu tiên trong danh sách các đối số | Có | Có thể kiểm tra nhiều đối số |
NVL() | Thay thế giá trị NULL bằng một giá trị khác (chỉ dùng trong Oracle) | Không | Tương tự IFNULL(), chỉ hỗ trợ trong Oracle |
Kết luận
Các hàm IFNULL(), ISNULL(), COALESCE(), và NVL() đều rất hữu ích để xử lý các giá trị NULL trong MySQL. Mỗi hàm có mục đích và phạm vi sử dụng riêng, tùy thuộc vào hệ quản trị cơ sở dữ liệu và nhu cầu cụ thể của bạn.
IFNULL()vàCOALESCE()đều có thể thay thế giá trịNULL, nhưngCOALESCE()mạnh hơn do có thể xử lý nhiều đối số.ISNULL()giúp kiểm tra sự tồn tại củaNULL.NVL()được sử dụng chủ yếu trong Oracle, nhưng bạn có thể dùngIFNULL()hoặcCOALESCE()trong MySQL để thay thế.
Hãy thử áp dụng các ví dụ này vào các bài tập và dự án thực tế trên CodeTutHub để hiểu sâu hơn về cách xử lý giá trị NULL trong MySQL!








