- 1 1. Giới thiệu
- 2 2. Hàm IFNULL là gì?
- 3 3. Các ví dụ thực tế của hàm IFNULL
- 4 3.5 Đặt giá trị NULL cuối cùng trong ORDER BY
- 5 4. Sự khác nhau giữa IFNULL và COALESCE
- 6 5. Các hàm xử lý NULL trong các cơ sở dữ liệu khác ngoài MySQL
- 7 6. Câu hỏi thường gặp (FAQ)
- 7.1 Câu hỏi 1. Hàm IFNULL và hàm NVL có giống nhau không?
- 7.2 Câu hỏi 2. Sự khác biệt giữa IFNULL và COALESCE là gì?
- 7.3 Câu hỏi 3. IFNULL có thể được sử dụng với các kiểu dữ liệu khác ngoài số không?
- 7.4 Câu hỏi 4. Việc sử dụng IFNULL có làm giảm hiệu năng không?
- 7.5 Câu hỏi 5. Bạn có thể sử dụng CASE thay cho IFNULL không?
- 7.6 Câu hỏi 6. IFNULL có thể được sử dụng trong mệnh đề WHERE không?
- 7.7 Tóm tắt
- 8 7. Kết luận
1. Giới thiệu
Khi làm việc với cơ sở dữ liệu, việc xử lý giá trị NULL là một điểm quan trọng.
Đặc biệt, không hiếm gặp những người đã quen với hàm NVL của Oracle nhận ra rằng NVL không có sẵn khi chuyển sang MySQL.
Trong MySQL, bạn có thể xử lý giá trị NULL một cách đúng đắn bằng cách sử dụng hàm IFNULL thay cho NVL.
Bài viết này giải thích cách làm việc với giá trị NULL trong MySQL chi tiết, bao gồm cách sử dụng IFNULL và cách nó khác với các hàm xử lý NULL khác.
1.1 Giá trị NULL là gì?
Trong cơ sở dữ liệu, NULL có nghĩa là “không có giá trị nào được đặt”.
Vì điều này khác với “0” hoặc một “chuỗi rỗng”, việc không xử lý đúng có thể dẫn đến lỗi không mong muốn hoặc kết quả truy vấn sai lệch.
Ví dụ, giả sử bạn có dữ liệu như sau.
| ID | Name | Age |
|---|---|---|
| 1 | Yamada | 25 |
| 2 | Sato | NULL |
| 3 | Suzuki | 30 |
Trong dữ liệu trên, tuổi của ID “2” (Sato) là NULL.
Nếu bạn thực hiện các phép tính như hiện tại, bạn có thể gặp lỗi hoặc kết quả không như mong đợi.
1.2 MySQL xử lý giá trị NULL như thế nào
2. Hàm IFNULL là gì?
MySQL cung cấp hàm IFNULL như một hàm để thay thế giá trị NULL bằng một giá trị khác.
Nó thực hiện vai trò tương tự như hàm NVL của Oracle.
Bằng cách xử lý giá trị NULL một cách thích hợp, bạn có thể ngăn ngừa các vấn đề tính toán do dữ liệu thiếu và xây dựng các truy vấn SQL ổn định hơn.
Hãy cùng xem xét kỹ hơn cách sử dụng cơ bản của IFNULL.
2.1 Cú pháp cơ bản của IFNULL
Cú pháp cơ bản của hàm IFNULL như sau.
IFNULL(expression, fallback_value)
- expression : Cột hoặc giá trị cần kiểm tra NULL
- fallback_value : Giá trị sẽ trả về khi biểu thức là NULL (nếu không phải NULL, biểu thức sẽ được trả về nguyên trạng)
Ví dụ, xem xét câu lệnh SQL sau.
SELECT IFNULL(NULL, 'Fallback value');
Trong trường hợp này, vì được chỉ định NULL, kết quả sẽ là 'Fallback value'.
| Result |
|---|
| Fallback value |
Ngược lại, nếu bạn chỉ định một giá trị không phải NULL, giá trị đó sẽ được trả về nguyên trạng.
SELECT IFNULL('Hello', 'Fallback value');
| Result |
|---|
| Hello |
2.2 Các đặc điểm chính của IFNULL
Hàm IFNULL có các đặc điểm sau.
- Có thể chuyển đổi giá trị NULL thành một giá trị cụ thể
- Bạn có thể đặt một giá trị mặc định thay thế cho các cột có thể chứa NULL.
- Sử dụng cú pháp đơn giản
- Nó đơn giản hơn so với việc dùng biểu thức
CASE.
- Cần cân nhắc kiểu dữ liệu
- Khuyến nghị các đối số của
IFNULLphải cùng kiểu dữ liệu .
Ví dụ, câu SQL sau có thể gây lỗi.
SELECT IFNULL(100, 'Error');
Lý do: Kiểu số (100) và kiểu chuỗi (‘Error’) bị trộn lẫn.
Trong trường hợp này, giá trị dự phòng cũng nên là kiểu số.
SELECT IFNULL(100, 0);
2.3 Khi nào nên sử dụng IFNULL
Dưới đây là một số tình huống thực tế mà IFNULL hữu ích.
- Đặt giá trị mặc định cho NULL
- Ví dụ, nếu tiền thưởng của một nhân viên là NULL, đặt nó thành 0.
SELECT name, IFNULL(bonus, 0) AS bonus FROM employees;
- Tránh các phép tính liên quan đến NULL
- Nếu bạn tính toán với NULL nguyên trạng, kết quả cũng sẽ là NULL.
- Sử dụng
IFNULLđể tránh NULL cho phép thực hiện phép tính mong muốn.SELECT name, salary, IFNULL(bonus, 0) AS bonus, salary + IFNULL(bonus, 0) AS total_income FROM employees;
- Xử lý NULL một cách đúng đắn trong báo cáo và tổng hợp
- Nếu NULL xuất hiện trong quá trình phân tích, báo cáo có thể sai lệch.
- Bằng cách thay thế NULL bằng một giá trị cụ thể bằng
IFNULL, bạn có thể xử lý dữ liệu một cách nhất quán.
3. Các ví dụ thực tế của hàm IFNULL
Trong phần trước, chúng ta đã giải thích các kiến thức cơ bản về hàm IFNULL.
Trong phần này, chúng ta sẽ giới thiệu các ví dụ cụ thể về việc sử dụng nó với dữ liệu thực tế.
3.1 Thay thế giá trị NULL bằng giá trị mặc định
Nếu một bảng chứa các giá trị NULL, chúng có thể gây ra hành vi không mong muốn.
Để giải quyết vấn đề này, bạn có thể sử dụng IFNULL để thay thế NULL bằng một giá trị mặc định.
Ví dụ: Nếu tiền thưởng của nhân viên là NULL, đặt giá trị mặc định là 0
SELECT name, IFNULL(bonus, 0) AS bonus
FROM employees;
Dữ liệu trước khi thực thi
| name | bonus |
|---|---|
| Sato | 5000 |
| Suzuki | NULL |
| Takahashi | 8000 |
Sau khi áp dụng IFNULL
| name | bonus |
|---|---|
| Sato | 5000 |
| Suzuki | 0 |
| Takahashi | 8000 |
Thay thế NULL bằng 0 giúp việc tổng hợp và các xử lý liên quan trở nên mượt mà hơn.
3.2 Tránh các phép tính bao gồm NULL
Trong MySQL, kết quả của một phép tính bao gồm NULL sẽ trở thành NULL.
Do đó, bạn cần sử dụng IFNULL để tránh NULL.
Ví dụ: Tính tổng lương và tiền thưởng
SELECT name, salary, IFNULL(bonus, 0) AS bonus, salary + IFNULL(bonus, 0) AS total_income
FROM employees;
Dữ liệu trước khi thực thi
| name | salary | bonus |
|---|---|---|
| Sato | 300000 | 5000 |
| Suzuki | 280000 | NULL |
| Takahashi | 320000 | 8000 |
Sau khi áp dụng IFNULL
| name | salary | bonus | total_income |
|---|---|---|---|
| Sato | 300000 | 5000 | 305000 |
| Suzuki | 280000 | 0 | 280000 |
| Takahashi | 320000 | 8000 | 328000 |
Nếu tiền thưởng là NULL, tổng (salary + bonus) cũng sẽ trở thành NULL,
nhưng bằng cách áp dụng IFNULL, MySQL coi NULL là 0 và tính toán đúng.
3.3 Thay thế NULL bằng một chuỗi khác
Bạn có thể đặt một chuỗi mặc định không chỉ cho số, mà còn khi giá trị là NULL.
Ví dụ: Hiển thị “Chưa đăng ký” cho người dùng không có địa chỉ email
SELECT id, name, IFNULL(email, 'Not registered') AS email
FROM users;
Dữ liệu trước khi thực thi
| id | name | |
|---|---|---|
| 1 | Sato | satou@example.com |
| 2 | Suzuki | NULL |
| 3 | Takahashi | takahashi@example.com |
Sau khi áp dụng IFNULL
| id | name | |
|---|---|---|
| 1 | Sato | satou@example.com |
| 2 | Suzuki | Not registered |
| 3 | Takahashi | takahashi@example.com |
Nếu để lại là NULL, trường sẽ hiển thị trống, nhưng IFNULL làm cho nó rõ ràng với “Chưa đăng ký”.
3.4 Sử dụng IFNULL trong mệnh đề WHERE
Bạn có thể sử dụng IFNULL trong mệnh đề WHERE để lọc dựa trên các điều kiện bao gồm giá trị NULL.
Ví dụ: Lấy chỉ những người dùng có giá trị NULL
SELECT *
FROM users
WHERE IFNULL(email, '') = '';
SQL này coi email là '' (chuỗi rỗng) khi nó là NULL, và chỉ lấy những người dùng có email là NULL.
3.5 Đặt giá trị NULL cuối cùng trong ORDER BY
Thông thường, khi bạn sử dụng ORDER BY, các giá trị NULL có thể xuất hiện đầu tiên, nhưng bạn có thể dùng IFNULL để đưa chúng về cuối.
Ví dụ: Đặt các hàng có giá trị NULL ở cuối
SELECT name, salary
FROM employees
ORDER BY IFNULL(salary, 0) ASC;
4. Sự khác nhau giữa IFNULL và COALESCE
MySQL cung cấp nhiều hàm để xử lý giá trị NULL, và IFNULL và COALESCE thường được so sánh.
Cả hai đều thay thế giá trị NULL bằng các giá trị thay thế, nhưng cách sử dụng và hành vi của chúng khác nhau.
Trong phần này, chúng tôi giải thích sự khác nhau giữa IFNULL và COALESCE và cách chọn đúng.
4.1 Hàm COALESCE là gì?
Hàm COALESCE trả về giá trị không phải NULL đầu tiên trong số các đối số.
Nói cách khác, trong khi IFNULL chọn giá trị không phải NULL giữa hai giá trị,
COALESCE khác biệt bằng cách chọn giá trị không phải NULL đầu tiên trong số nhiều ứng cử viên.
Cú pháp
COALESCE(expr1, expr2, ... , exprN)
- Đánh giá từ trái sang phải và trả về giá trị không phải NULL đầu tiên
- Trả về NULL nếu tất cả các đối số đều là NULL
Ví dụ: Thay thế NULL bằng COALESCE
SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;
Trong trường hợp này, các giá trị được xác định như sau.
- Nếu
phonekhông phải NULL, trả vềphone. - Nếu
phonelà NULL vàemailkhông phải NULL, trả vềemail. - Nếu cả
phonevàemailđều là NULL, trả về'Chưa đăng ký'.
4.2 Sự khác nhau giữa IFNULL và COALESCE
| Comparison item | IFNULL | COALESCE |
|---|---|---|
| NULL handling | Returns the fallback value if one expression is NULL | Evaluates multiple expressions and returns the first non-NULL value |
| Number of arguments | Only 2 | 2 or more (multiple allowed) |
| Use case | Simple NULL replacement | NULL handling with priority order |
| Execution speed | Fast (compares only 2 values) | Slightly slower (evaluates multiple values in order) |
4.3 Các ví dụ thực tế của IFNULL và COALESCE
Ví dụ 1: Thay thế NULL đơn giản
Với IFNULL, bạn có thể chọn giá trị không phải NULL giữa hai giá trị.
SELECT name, IFNULL(phone, 'Not registered') AS contact_info
FROM customers;
Kết quả
| name | phone | contact_info |
|---|---|---|
| Sato | 080-1234-5678 | 080-1234-5678 |
| Suzuki | NULL | Not registered |
Ví dụ 2: Ưu tiên giá trị không phải NULL đầu tiên có sẵn
Với COALESCE, bạn có thể lấy giá trị không phải NULL đầu tiên.
SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;
Kết quả
| name | phone | contact_info | |
|---|---|---|---|
| Sato | 080-1234-5678 | satou@example.com | 080-1234-5678 |
| Suzuki | NULL | suzuki@example.com | suzuki@example.com |
| Takahashi | NULL | NULL | Not registered |
- Nếu
phonekhông phải NULL, trả vềphone - Nếu
phonelà NULL vàemailkhông phải NULL, trả vềemail - Nếu cả
phonevàemailđều là NULL, trả về'Not registered'
4.4 Cách chọn giữa IFNULL và COALESCE
✔ Khi bạn nên sử dụng IFNULL
✅ Khi bạn muốn thay thế NULL bằng một giá trị mặc định một cách đơn giản
✅ Khi hai đối số là đủ (ví dụ, chuyển NULL thành 0)
✔ Khi bạn nên sử dụng COALESCE
✅ Khi bạn muốn tìm giá trị không phải NULL đầu tiên (ví dụ, phone → email → “Not registered”)
✅ Khi bạn cần đánh giá ba hoặc nhiều hơn các giá trị
4.5 So sánh hiệu năng giữa IFNULL và COALESCE
Nói chung, IFNULL nhanh hơn COALESCE.
Điều này là do IFNULL chỉ đánh giá hai giá trị, trong khi COALESCE đánh giá nhiều giá trị theo thứ tự.
Kiểm tra hiệu năng
Khi áp dụng IFNULL và COALESCE cho 1 triệu dòng, bạn có thể thấy kết quả như sau.
| Function | Execution time (seconds) |
|---|---|
IFNULL | 0.02 |
COALESCE | 0.05 |
➡ Với khối lượng dữ liệu lớn, IFNULL có thể nhanh hơn một chút.
➡ Tuy nhiên, nếu bạn chỉ cần một giá trị dự phòng, hãy sử dụng IFNULL; nếu bạn muốn nhiều ứng cử viên, hãy sử dụng COALESCE.

5. Các hàm xử lý NULL trong các cơ sở dữ liệu khác ngoài MySQL
MySQL cung cấp hàm IFNULL để xử lý các giá trị NULL, nhưng các hệ quản trị cơ sở dữ liệu (DBMS) khác lại sử dụng các hàm khác.
Trong các cơ sở dữ liệu lớn như Oracle, PostgreSQL và SQL Server, thường sử dụng các hàm khác với MySQL để xử lý NULL.
Phần này giải thích cách các giá trị NULL được xử lý trong các cơ sở dữ liệu ngoài MySQL.
5.1 Xử lý NULL trong Oracle: hàm NVL
Trong Oracle, hàm NVL được cung cấp như là tương đương với IFNULL của MySQL.
Hàm NVL trả về một giá trị khác khi giá trị được chỉ định là NULL.
Cú pháp
NVL(expression, fallback_value)
- expression : Cột hoặc giá trị cần kiểm tra NULL
- fallback_value : Giá trị sẽ trả về khi là NULL (nếu không phải NULL, biểu thức sẽ được trả về nguyên vẹn)
Ví dụ
SELECT name, NVL(salary, 0) AS salary
FROM employees;
Kết quả
| name | salary |
|---|---|
| Sato | 5000 |
| Suzuki | 0 |
| Takahashi | 8000 |
Hành vi của NVL gần như giống với IFNULL của MySQL, vì vậy trong Oracle bạn có thể đơn giản sử dụng NVL.
5.2 Xử lý NULL trong PostgreSQL và SQL Server: hàm COALESCE
Trong PostgreSQL và SQL Server, hàm COALESCE được sử dụng để thay thế các giá trị NULL bằng các giá trị thay thế.
Hàm này có thể trả về giá trị không phải NULL đầu tiên trong số nhiều ứng cử viên.
Cú pháp
COALESCE(expr1, expr2, ..., exprN)
- Đánh giá từ trái sang phải và trả về giá trị không phải NULL đầu tiên
- Trả về NULL nếu tất cả các đối số đều là NULL
Ví dụ
SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;
Kết quả
| name | phone | contact_info | |
|---|---|---|---|
| Sato | 080-1234-5678 | satou@example.com | 080-1234-5678 |
| Suzuki | NULL | suzuki@example.com | suzuki@example.com |
| Takahashi | NULL | NULL | Not registered |
Như đã chỉ ra ở trên, trong PostgreSQL và SQL Server, việc sử dụng COALESCE cho phép xử lý NULL linh hoạt hơn so với IFNULL của MySQL.
5.3 So sánh các hàm xử lý NULL giữa các cơ sở dữ liệu
| Database | NULL-handling function | Role |
|---|---|---|
| MySQL | IFNULL(expression, fallback_value) | Convert NULL to a fallback value |
| Oracle | NVL(expression, fallback_value) | Convert NULL to a fallback value (equivalent to IFNULL) |
| PostgreSQL / SQL Server | COALESCE(expr1, expr2, ...) | Return the first non-NULL value |
- Xử lý NULL đơn giản →
IFNULL(MySQL) hoặcNVL(Oracle) - Chọn giá trị tốt nhất từ nhiều ứng cử viên →
COALESCE(PostgreSQL, SQL Server)
5.4 Lưu ý khi di chuyển giữa các DBMS
Khi di chuyển hệ thống giữa các cơ sở dữ liệu khác nhau, bạn cần chú ý đến sự khác biệt trong các hàm xử lý NULL.
Đặc biệt, khi di chuyển từ Oracle sang MySQL, bạn phải viết lại NVL thành IFNULL.
Ví dụ viết lại khi di chuyển
- Oracle (NVL)
SELECT NVL(salary, 0) AS salary FROM employees;
- MySQL (IFNULL)
SELECT IFNULL(salary, 0) AS salary FROM employees;
- PostgreSQL / SQL Server (COALESCE)
SELECT COALESCE(salary, 0) AS salary FROM employees;
Also, because COALESCE can accept multiple arguments, it is more flexible than Oracle’s NVL or MySQL’s IFNULL.
During migration, it’s important to choose the correct function for the target database.
6. Câu hỏi thường gặp (FAQ)
Các câu hỏi về hàm IFNULL của MySQL và việc xử lý NULL là quan trọng đối với các nhà phát triển và quản trị viên cơ sở dữ liệu.
Phần này tóm tắt các câu hỏi thường gặp về IFNULL.
Câu hỏi 1. Hàm IFNULL và hàm NVL có giống nhau không?
➡ Chúng cung cấp gần như cùng một chức năng, nhưng tên hàm khác nhau tùy vào hệ quản trị cơ sở dữ liệu.
| Database | NULL-handling function |
|---|---|
| MySQL | IFNULL(expression, fallback_value) |
| Oracle | NVL(expression, fallback_value) |
| PostgreSQL / SQL Server | COALESCE(expr1, expr2, ...) |
Trong MySQL, sử dụng IFNULL; trong Oracle, sử dụng NVL để chuyển đổi giá trị NULL thành giá trị dự phòng.
Câu hỏi 2. Sự khác biệt giữa IFNULL và COALESCE là gì?
➡ IFNULL trả về giá trị không phải NULL trong hai đối số, trong khi
COALESCE trả về giá trị không phải NULL đầu tiên trong số nhiều đối số.
| Function | Feature |
|---|---|
IFNULL(a, b) | If a is NULL, return b (only two arguments) |
COALESCE(a, b, c, ...) | Evaluates left to right and returns the first non-NULL value |
Ví dụ
SELECT IFNULL(NULL, 'Fallback value'); -- Result: 'Fallback value'
SELECT COALESCE(NULL, NULL, 'First non-NULL value'); -- Result: 'First non-NULL value'
✔ Khi nào nên sử dụng IFNULL
✅ Trả về một giá trị mặc định cụ thể khi NULL (ví dụ, nếu NULL thì 0)
✅ Khi bạn chỉ so sánh hai giá trị
✔ Khi nào nên sử dụng COALESCE
✅ Lấy giá trị không phải NULL đầu tiên (ví dụ, điện thoại → email → giá trị mặc định)
✅ Khi bạn cần đánh giá ba hoặc nhiều hơn các giá trị
Câu hỏi 3. IFNULL có thể được sử dụng với các kiểu dữ liệu khác ngoài số không?
➡ Có. IFNULL có thể được sử dụng với chuỗi, ngày tháng, số và các kiểu khác.
Ví dụ 1: Sử dụng chuỗi
SELECT name, IFNULL(email, 'Not registered') AS email
FROM users;
Ví dụ 2: Sử dụng ngày tháng
SELECT name, IFNULL(last_login, '2000-01-01') AS last_login
FROM users;
Tuy nhiên, việc trộn các kiểu dữ liệu khác nhau (như số và chuỗi) có thể gây lỗi, vì vậy hãy cẩn thận.
SELECT IFNULL(100, 'Error'); -- May cause an error due to different data types
Câu hỏi 4. Việc sử dụng IFNULL có làm giảm hiệu năng không?
➡ Nói chung, tác động đến hiệu năng là tối thiểu, nhưng có thể đáng chú ý khi xử lý khối lượng dữ liệu lớn.
IFNULLthường nhanh vì nó chỉ kiểm tra hai giá trị- Tuy nhiên, việc sử dụng
IFNULLquá mức trên các bộ dữ liệu rất lớn (hàng triệu dòng) có thể ảnh hưởng đến tối ưu hoá chỉ mục trong một số trường hợp
🔹 Mẹo tối ưu hoá hiệu năng
- Thiết lập chỉ mục một cách phù hợp
- Các truy vấn như
IFNULL(column, 0) = 100có thể ngăn chỉ mục được sử dụng trong một số trường hợp - Một cách tiếp cận là lưu giá trị với một mặc định phù hợp thay vì NULL ngay từ đầu
IFNULLnhẹ hơnCOALESCE
- Vì
COALESCEđánh giá nhiều giá trị theo thứ tự,IFNULLcó thể nhanh hơn trong nhiều trường hợp
Câu hỏi 5. Bạn có thể sử dụng CASE thay cho IFNULL không?
➡ Có. Bạn có thể đạt được hành vi tương tự với CASE, nhưng nó sẽ dài hơn.
Với IFNULL
SELECT name, IFNULL(salary, 0) AS salary
FROM employees;
Với CASE
SELECT name,
CASE WHEN salary IS NULL THEN 0 ELSE salary END AS salary
FROM employees;
✔ IFNULL ngắn gọn và dễ sử dụng
✔ CASE hỗ trợ các điều kiện linh hoạt hơn (ví dụ, bạn có thể bao gồm các điều kiện không phải NULL nữa)
Câu hỏi 6. IFNULL có thể được sử dụng trong mệnh đề WHERE không?
➡ Có. IFNULL có thể được sử dụng trong mệnh đề WHERE.
Ví dụ: Thay thế NULL bằng một giá trị cụ thể khi tìm kiếm
SELECT * FROM users WHERE IFNULL(status, 'Not set') = 'Not set';
Điều này sẽ truy xuất các bản ghi mà status là NULL.
Tóm tắt
IFNULLvàNVLcó gần như cùng một chức năng, nhưng khác nhau tùy DBMSIFNULLđánh giá 2 giá trị;COALESCEđánh giá nhiều giá trị- Hoạt động với chuỗi, ngày tháng, số và các kiểu khác
- Đối với bộ dữ liệu lớn, hãy cân nhắc tối ưu hoá chỉ mục
- Bạn có thể sử dụng
CASEthay choIFNULL IFNULLcũng có thể được sử dụng trong các mệnh đềWHERE
7. Kết luận
Trong bài viết này, chúng tôi đã trình bày chi tiết hàm IFNULL của MySQL, bao gồm cách xử lý giá trị NULL, cách nó khác với các hàm khác, và các ví dụ thực tế.
Cuối cùng, hãy cùng tổng kết ngắn gọn những gì chúng ta đã đề cập.
7.1 Hàm IFNULL là gì?
IFNULLtrả về một giá trị dự phòng khi giá trị được chỉ định là NULL- Cú pháp :
IFNULL(expression, fallback_value)
- Bằng cách tránh NULL, bạn có thể ngăn ngừa lỗi tính toán và các vấn đề dữ liệu thiếu
7.2 Các ví dụ thực tế của IFNULL
- Thay thế NULL bằng một giá trị mặc định (0 hoặc một chuỗi cụ thể)
SELECT name, IFNULL(bonus, 0) AS bonus FROM employees;
- Xử lý đúng các phép tính có bao gồm NULL
SELECT name, salary + IFNULL(bonus, 0) AS total_income FROM employees;
- Chuyển đổi NULL thành một chuỗi thích hợp như “Chưa đăng ký”
SELECT id, IFNULL(email, 'Not registered') AS email FROM users;
- Sử dụng trong các mệnh đề
WHEREđể lọc các giá trị NULLSELECT * FROM users WHERE IFNULL(status, 'Not set') = 'Not set';
7.3 Sự khác nhau giữa IFNULL và COALESCE
IFNULLtrả về giá trị không phải NULL giữa hai đối sốCOALESCEtrả về giá trị không phải NULL đầu tiên trong số nhiều đối số- Cách lựa chọn
- Xử lý NULL đơn giản →
IFNULL - Chọn giá trị không phải NULL đầu tiên →
COALESCE
7.4 Xử lý NULL trong các hệ quản trị CSDL khác
| Database | NULL-handling function |
|---|---|
| MySQL | IFNULL(expression, fallback_value) |
| Oracle | NVL(expression, fallback_value) |
| PostgreSQL / SQL Server | COALESCE(expr1, expr2, ...) |
NVLcủa Oracle gần giống vớiIFNULLcủa MySQL- PostgreSQL và SQL Server thường sử dụng
COALESCE - Trong quá trình di chuyển, bạn phải thay thế các hàm một cách thích hợp
7.5 Hiệu năng và lưu ý khi sử dụng IFNULL
IFNULLnhẹ hơnCOALESCE- Với bộ dữ liệu lớn, hiệu năng có thể giảm nếu tối ưu hoá chỉ mục bị ảnh hưởng
- Cẩn thận giữ cho kiểu dữ liệu nhất quán (không trộn lẫn kiểu số và chuỗi)
7.6 Những điểm cần nhớ cuối cùng
- Trong MySQL, sử dụng
IFNULLđể xử lý NULL một cách đúng đắn - Bạn có thể xử lý dữ liệu mà không bị ảnh hưởng bởi NULL
- Hiểu sự khác nhau so với
COALESCEvàNVLvà sử dụng hàm phù hợp - Khi di chuyển giữa các cơ sở dữ liệu, chú ý đến sự khác nhau trong các hàm xử lý NULL


