MySQL - COALESCE() Hàm

Xin chào, những người đam mê cơ sở dữ liệu! Hôm nay, chúng ta sẽ cùng tìm hiểu một hàm rất hữu ích trong MySQL có tên là COALESCE(). Đừng lo lắng nếu bạn chưa từng nghe đến nó trước đây - đến cuối bài hướng dẫn này, bạn sẽ sử dụng nó như một chuyên gia!

MySQL - Coalesce() Function

COALESCE() là gì?

Hàm COALESCE() giống như một siêu anh hùng trong thế giới MySQL. Siêu năng lực của nó là tìm giá trị không phải NULL đầu tiên trong một danh sách. Hãy tưởng tượng bạn đang tìm chìa khóa xe của mình và bạn có một danh sách các nơi có thể để chìa khóa. Hàm COALESCE() giống như kiểm tra từng nơi cho đến khi bạn tìm thấy chìa khóa. Khi tìm thấy, nó dừng lại và trả về giá trị đó.

Cú pháp

COALESCE(value1, value2, ..., valueN)

Hàm này chấp nhận bất kỳ số lượng đối số nào và trả về giá trị không phải NULL đầu tiên. Nếu tất cả các giá trị đều là NULL, nó sẽ trả về NULL.

Cách sử dụng cơ bản của COALESCE()

Hãy bắt đầu với một ví dụ đơn giản:

SELECT COALESCE(NULL, 1, 2, 'three');

Kết quả: 1

Trong trường hợp này, COALESCE() xem xét từng giá trị từ trái sang phải:

  1. Đầu tiên, nó thấy NULL và tiếp tục.
  2. Sau đó, nó tìm thấy 1, không phải NULL, vì vậy nó dừng lại và trả về 1.

Nó không bao giờ đạt đến 2 hoặc 'three' vì nó đã tìm thấy một giá trị không phải NULL trước đó.

Các tình huống thực tế

Tình huống 1: Giá trị mặc định

Hãy tưởng tượng bạn đang xây dựng một hệ thống hồ sơ người dùng. Một số người dùng có thể không cung cấp tất cả thông tin của họ. Đây là cách COALESCE() có thể giúp bạn:

SELECT
username,
COALESCE(full_name, username) AS display_name,
COALESCE(email, 'No email provided') AS contact
FROM users;

Truy vấn này thực hiện hai điều thông minh:

  1. Nếu full_name là NULL, nó sử dụng username làm tên hiển thị.
  2. Nếu email là NULL, nó hiển thị 'No email provided'.

Tình huống 2: Nhiều tùy chọn dự phòng

Giả sử bạn đang điều hành một cửa hàng trực tuyến và muốn hiển thị thông tin sản phẩm:

SELECT
product_name,
COALESCE(sale_price, regular_price, 'Price not available') AS displayed_price
FROM products;

Truy vấn này:

  1. Kiểm tra xem có sale_price không.
  2. Nếu không, nó tìm kiếm regular_price.
  3. Nếu cả hai đều là NULL, nó hiển thị 'Price not available'.

COALESCE() với các phép toán

COALESCE() không chỉ dành cho các giá trị đơn giản; bạn có thể sử dụng nó với các phép toán!

SELECT
employee_name,
COALESCE(salary * 1.1, base_rate * 40 * 52) AS yearly_income
FROM employees;

Truy vấn này:

  1. Thử tính toán mức lương tăng 10%.
  2. Nếu salary là NULL, nó tính toán thu nhập hàng năm dựa trên mức lương giờ (giả sử 40 giờ/tuần, 52 tuần/năm).

COALESCE() trong các mệnh đề WHERE

Bạn cũng có thể sử dụng COALESCE() trong các mệnh đề WHERE để lọc dữ liệu:

SELECT * FROM orders
WHERE COALESCE(shipping_date, order_date) < '2023-01-01';

Truy vấn này tìm tất cả các đơn hàng đã được giao hoặc đặt hàng (nếu chưa giao) trước năm 2023.

COALESCE() so với IFNULL()

MySQL cũng có một hàm IFNULL(), tương tự nhưng chỉ giới hạn ở hai đối số:

SELECT
IFNULL(column1, 'Default') AS result1,
COALESCE(column1, column2, column3, 'Default') AS result2
FROM my_table;

COALESCE() linh hoạt hơn vì nó có thể xử lý nhiều tùy chọn dự phòng.

Lỗi phổ biến và lời khuyên

  1. Thứ tự quan trọng: Luôn đặt các giá trị ưu tiên trước.
  2. Tính nhất quán của loại dữ liệu: Cố gắng giữ sự nhất quán về loại dữ liệu để có kết quả rõ ràng hơn.
  3. Hiệu suất: Mặc dù mạnh mẽ, việc sử dụng COALESCE() rộng rãi có thể ảnh hưởng đến hiệu suất truy vấn trên các bộ dữ liệu lớn.

Bài tập thực hành

Hãy củng cố kiến thức của bạn với một số bài tập:

  1. Tạo bảng students với các cột: id, name, math_score, science_score, history_score.
  2. Chèn một số dữ liệu, để một số điểm số là NULL.
  3. Viết một truy vấn để tìm điểm cao nhất của mỗi học sinh trong tất cả các môn học.
  4. Sử dụng COALESCE() để hiển thị 'Not attempted' cho bất kỳ điểm số NULL nào.

Kết luận

Hàm COALESCE() là một công cụ mạnh mẽ trong MySQL giúp bạn xử lý các giá trị NULL một cách mượt mà và tạo ra các truy vấn vững chắc hơn. Nhớ rằng, nó đều về việc tìm giá trị không phải NULL đầu tiên, giống như tìm chìa khóa của bạn ở nơi có khả năng cao nhất!

Trong hành trình tiếp tục của bạn với MySQL, bạn sẽ thấy COALESCE() trở thành một phần không thể thiếu trong bộ công cụ của bạn. Hãy tiếp tục thực hành, và sớm bạn sẽ trở thành một phù thủy cơ sở dữ liệu!

Chúc mừng bạn, và mong rằng các truy vấn của bạn luôn trả về kết quả mà bạn mong muốn!

Credits: Image by storyset