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:

shell
IFNULL(expression, replacement_value);
  • expression: Giá trị cần kiểm tra.
  • replacement_value: Giá trị thay thế nếu expressionNULL.

c. Ví dụ:

Giả sử chúng ta có bảng employees với các cột như sau:

employee_idfirst_namelast_namedepartmentbonus
1JohnDoeSales5000
2JaneSmithMarketingNULL
3BobJohnsonSales3000
4AliceBrownHRNULL

Ví dụ 1: Sử dụng IFNULL() để thay thế giá trị NULL bằng 0

shell
SELECT first_name, last_name, IFNULL(bonus, 0) AS bonus
FROM employees;

Kết quả:

first_namelast_namebonus
JohnDoe5000
JaneSmith0
BobJohnson3000
AliceBrown0

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à NULL0 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:

shell
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

shell
SELECT first_name, last_name, ISNULL(bonus) AS is_bonus_null
FROM employees;

Kết quả:

first_namelast_nameis_bonus_null
JohnDoe0
JaneSmith1
BobJohnson0
AliceBrown1

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:

shell
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ải NULL đầu tiên trong danh sách.

c. Ví dụ:

Ví dụ 3: Sử dụng COALESCE() để lấy giá trị bonus, nếu bonusNULL, trả về 1000

shell
SELECT first_name, last_name, COALESCE(bonus, 1000) AS bonus
FROM employees;

Kết quả:

first_namelast_namebonus
JohnDoe5000
JaneSmith1000
BobJohnson3000
AliceBrown1000

Ví dụ 4: Sử dụng COALESCE() với nhiều biểu thức

shell
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 bonusNULL, 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:

shell
NVL(expression, replacement_value);
  • expression: Giá trị cần kiểm tra.
  • replacement_value: Giá trị thay thế nếu expressionNULL.

c. Ví dụ:

Ví dụ 5: Sử dụng NVL() để thay thế giá trị NULL trong Oracle

shell
SELECT first_name, last_name, NVL(bonus, 0) AS bonus
FROM employees;

Kết quả:

first_namelast_namebonus
JohnDoe5000
JaneSmith0
BobJohnson3000
AliceBrown0

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.

shell
SELECT first_name, last_name,
    salary + COALESCE(bonus, 0) AS total_income
FROM employees;

Kết quả:

first_namelast_nametotal_income
JohnDoe1505000
JaneSmith1700000
BobJohnson1303000
AliceBrown2000000

Ví dụ 7: Xử lý nhiều giá trị NULL trong dữ liệu nhân viên

shell
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àmMô tảHỗ trợ trong MySQLTính năng đặc biệt
IFNULL()Thay thế giá trị NULL bằng một giá trị khácChỉ 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 0Trả 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ó 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ôngTươ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()COALESCE() đều có thể thay thế giá trị NULL, nhưng COALESCE() 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ủa NULL.
  • NVL() được sử dụng chủ yếu trong Oracle, nhưng bạn có thể dùng IFNULL() hoặc COALESCE() 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!