COALESCE SQL : Định nghĩa và ứng dụng

Chắc hẳn đã có một lần bạn nhìn một đoạn SQL dài của một bạn dev trong công ty viết và có sử dụng một function rất lạ là COALESCE ? Hôm nay mình sẽ giới thiệu định nghĩa và ứng dụng của hàm này trong đa số các loại SQL ( và thậm chí là một số ngôn ngữ lập trình ).

Định nghĩa COALESCE

COALESCE được dịch ra là “hợp lại”, chiếu theo sự tích ngày xưa của Việt Nam ta thì gọi là “khắc nhập, khắc nhập” đây là thần chú SQL mà một người sử dụng SQL lâu năm nào cũng biết. Cụ thể nó có chức năng như sau:

COALESCE(x1,x2,x3,x4……) : Lấy giá trị non-null đầu tiên trong list x1,x2,x3…. theo thứ tự từ trái qua

Ví dụ 1:

SELECT COALESCE(NULL, NULL, NULL, 'tuananalytic.com', NULL, 'daogiatuan.com');

—> Kết quả query này sẽ là : ‘tuananalytic.com’

Vậy nếu chúng ta đổi lại query này 1 chút

SELECT COALESCE(NULL, 'daogiatuan.com', NULL, 'tuananalytic.com', NULL);

—> Kết quả query này sẽ là : ‘daogiatuan.com’

Ứng dụng thực tế

Sau khi đã biết được các thức COALESCE hoạt động rồi, chúng ta nên xét đến ứng dụng thực tiễn của nó hơn chứ nhỉ.

COALESCE có thể được sử dụng trong thực tế khi các điều kiện sau hội đủ:

  • Chúng ta có nhiều bảng có cột null
  • Chỉ muốn lấy 1 giá trị , trong 1 dòng , để đại diện cho dòng đó
  • Có một thứ tự nhất định (nếu có nhiều hơn 1 giá trị non-null trên 1 dòng)

Mình sẽ xét ví dụ sau để có thể dễ hiểu hơn

Ví dụ 2:

COALESCE SQL : Định nghĩa và ứng dụng
Nhập tên không hoàn chỉnh

Như các bạn có thể thấy không phải lúc nào chúng ta cũng có dữ liệu hoàn chỉnh (nhiều ô bị để null), phía trên là dữ liệu nhập tên họ ( tên tiếng Anh ). Trong tiếng Anh chúng ta có thứ tự ưu tiên gọi tên sau:

FirstName > MiddleName > LastName

Như vậy để lấy 1 tên gọi đại diện cho một người ( Một giá trị đại diện cho 1 dòng ), chúng ta sẽ ưu tiên lấy FirstName trước nếu có, sau đó đến MiddleName, và cuối cùng là LastName.

—-> Sau khi xét các điều kiện trên chúng ta có thể thấy điều kiện cần để sử dụng COALESCE đã đủ, hãy áp dụng COALESCE để giải quyết vấn đề thôi.

Kết

Cảm ơn các bạn đã theo dõi blog của mình, hãy đón đọc các bài mới nhé, nếu thích bạn có thể click subscribe để có thể nhận được tin báo khi mình có các bài mới,

Support Tuan | Analytic

Trả lời