Hàm COALESCE trong SQL trả về giá trị không NULL đầu tiên

Nội dung được viết bởi Kim Thu

Trong SQL chúng ta thường bắt gặp các giá trị không xác định hay còn được gọi là giá trị NULL. Thỉnh thoảng khi truy vấn dữ liệu bạn cần xử lý các giá trị NULL để kết quả trả về gọn gàng hoặc thay thế bằng giá trị khác nếu cần. 

Để làm được điều đó, bạn sẽ cần đến hàm COALESCE trong SQL. Vậy cú pháp và cách sử dụng như nào? Cùng Gitiho tìm hiểu ngay trong bài viết này nhé!

Cú pháp hàm COALESCE trong SQL

Hiểu theo cách đơn giản, hàm COALESCE hỗ trợ trả về các giá trị không phải null đầu tiên trong danh sách. Trong trường hợp tất cả các bản ghi đều có giá trị null thì hàm sẽ trả về kết quả null.

Cú pháp thực hiện như sau:

SELECT COALESCE(value1, value2, value3, ...)

Trong đó: 

  • Hàm COALESCE kết hợp với câu lệnh SELECT trong SQL sẽ kiểm tra lần lượt từng giá trị từ trái sang phải. Nó sẽ trả về giá trị đầu tiên không phải NULL.
  • value1, value2, value3, ...: là các giá trị mà bạn muốn kiểm tra.
Cú pháp hàm COALESCE trong SQL

Các phiên bản SQL Server có thể sử dụng được hàm COALESCE: SQL Server 2005, SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 2014, SQL Server 2016, SQL Server 2017.

Ví dụ

Giả sử bạn đang cần truy vấn thông tin khách hàng từ bảng thông tin khách hàng. Tuy nhiên một số khách hàng lại không cung cấp số điện thoại, nhưng có email. 

Phone

Email

123-456789

NULL

NULL

jane.doe@gmail.com

NULL

NULL


 

 

 

 

 

Yêu cầu: Bạn cần lấy số điện thoại (nếu có), không thì trả về là email. Cả 2 không có thì trả về thông báo không tồn tại thông tin liên lạc.

Để thực hiện yêu cầu trên, bạn viết cú pháp sau:

SELECT COALESCE(Phone, Email, 'No contact info available') AS ContactInfo
FROM Customers;

Phân tích cú pháp trên để giúp bạn dễ hiểu hơn, chạy công thức thì bạn sẽ thấy:

  • Nếu khách hàng có số điện thoại, nó sẽ trả về số điện thoại.
  • Nếu số điện thoại là NULL nhưng có email, nó sẽ trả về email.
  • Nếu cả hai đều NULL, nó sẽ trả về 'No contact info available'.

Kết quả trả về:

ContactInfo

123-456789
jane.doe@gmail.com
No contact info available


 

 

 

 

Hàm COALESCE và ISNULL có gì khác nhau?

Theo lý thuyết thì cả COALESCE và ISNULL đều có chức năng trả về giá trị thay thế khi gặp giá trị NULL. Tuy nhiên, ứng dụng thực tế thì chúng có những điểm khác biệt như sau:

  • COALESCE cho phép bạn kiểm tra nhiều giá trị cùng lúc. Với cú pháp COALESCE(value1, value2, ..., valuen) nó sẽ trả về giá trị đầu tiên không phải NULL.

Còn ISNULL chỉ kiểm tra một giá trị duy nhất bằng cú pháp ISNULL(expression, value). Nếu giá trị đó là NULL, nó sẽ thay thế bằng giá trị mặc định bạn cung cấp. Trong đó, expression là giá trị cần kiểm tra và value là giá trị thay thế nếu expression là NULL.

  • Hàm COALESCE sẽ trả về kiểu dữ liệu của giá trị đầu tiên không phải NULL trong danh sách. Trong khi hàm ISNULL thì trả về kiểu dữ liệu của giá trị cần kiểm tra.
  • Trong trường hợp bảng dữ liệu lớn, hiệu suất của hàm COALESCE có thể chậm hơn ISNULL do hàm này chỉ kiểm tra một giá trị duy nhất.

Để hiểu thêm về các hàm và câu lệnh truy vấn quan trọng SQL, bạn có thể đăng ký học SQL cơ bản đến nâng cao với khóa học sau tại Gitiho:

Kết luận

Bài học trên đây Gitiho đã hướng dẫn bạn chi tiết về cú pháp và cách sử dụng hàm COALESCE trong SQL. Đừng quên thực hành ngay và áp dụng vào thực tế công việc để hiểu và nhớ lâu hơn về cách sử dụng hàm này nha. Chúc bạn thành công!

Xem thêm: 

Hàm CONCAT trong SQL để nối 2 hay nhiều chuỗi

Cách dùng hàm CHARINDEX trong SQL để xác định vị trí của chuỗi

Khóa học giúp bạn làm chủ ngôn ngữ truy vấn dữ liệu phổ biến SQL từ cơ bản đến nâng cao. Từ đó có thể tự tin xây dựng, truy vấn, và tối ưu hóa các cơ sở dữ liệu phức tạp, hỗ trợ phân tích, làm báo cáo và ra quyết định kinh doanh một cách hiệu quả.

Đăng ký học thử để trải nghiệm ngay hôm nay!

4/5 - (3 bình chọn)

4/5 - (3 bình chọn)

0 thảo luận

@ 2020 - Bản quyền của Công ty cổ phần công nghệ giáo dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở kế hoạch và đầu tư TP. Hà Nội
Giấy phép mạng xã hội số: 588, cấp bởi Bộ thông tin và truyền thông