Từ chuyện “Ăn gì cũng được” của chị em phụ nữ lại nghĩ về NULL trong SQL – https://final-blade.com

Từ chuyện “ Ăn gì cũng được ” của chị em phụ nữ lại nghĩ về NULL trong SQL

“Ăn gì cũng được” và NULL trong SQL, khi nói về 2 thứ có vẻ chẳng liên quan nhưng lại giống nhau đến lạ. Không tin ư? Dưới góc nhìn của chàng trai DA độc thân của chúng ta thì có đấy. Cùng đọc phía dưới nhé. 

Khi tôi cố khớp lệnh với 7 * 7 49 những món ăn trong sổ tay phòng chống độc thân với trạng thái “ Ăn gì cũng được ” của crush, toàn bộ đều trả về FALSE. Trạng thái này làm chúng NULL, một khái niệm gây không ít phiền phức cho những bạn DA khi mới thao tác với SQL.

NULL là gì ?

NULL là một giá trị đặc biệt có trong tất cả các loại dữ liệu, từ kiểu số, ngày, chuỗi, bit… Nó đại diện cho giá trị “không biết” hoặc “không tồn tại”. Khác với Excel, NULL trong SQL sẽ coi không trùng với số 0 của kiểu số và cũng không trùng với chuỗi trống (‘’) của kiểu chuỗi. Ví dụ bạn có bảng dữ liệu chứa các đối tượng tiềm năng trong công ty; có cột năm sinh. Nếu một bản ghi chứa NULL thì nghĩa là ta không biết đối tượng đó sinh năm nào chứ không phải đối tượng đó sinh năm 0. 

null trong sql

NULL nghĩa là không biết, nên mọi thao tác với NULL đều dẫn đến NULL. Đây là điều những bạn cần ghi nhớ để tránh phiền phức khi có những đo lường và thống kê giải quyết và xử lý NULL trong SQL và kiến thiết xây dựng những test case tương quan .

Vấn đề của NULL trong SQL

Nếu bạn cộng một số hoặc chuỗi với NULL, kết quả sẽ là NULL: 

Ví dụ :

NULL trong SQL 1

Một trường hợp thường gây rắc rối là khi những bạn cộng chuỗi từ những cột, ví dụ :

 NULL trong SQL 2

Sử dụng CONCAT

concat với null

Sử dụng CONCAT_WS

concat và null

Tình huống khác là là khi bạn tạo một câu SQL động và thực thi nó, nhưng không hay biết là chuỗi SQL động đó là NULL vì một thành phần khi tạo lập nó là NULL :

Null SQL

Ở ví dụ trên, vì biến @ c là NULL nên @ SQL cũng là NULL, vì vậy không có tác dụng nào trả về, và ta ngẩn người ra vì không nhận được hiệu quả cũng không nhận được báo lỗi. EXEC ( NULL ) luôn thành công xuất sắc vì nó không phải làm gì cả .

Khi so sánh với NULL, ta cũng nhận được kết quả NULL thay vì giá trị boolean “Đúng” hoặc “Sai”.  

Vì thế khi truy vấn bảng mà trong mệnh đề WHERE có dùng cột chứa NULL, những bản ghi NULL luôn là ngoại lệ. Để lấy được những bản ghi này bạn cần dùng “ IS NULL ”. Còn để lấy được những bản ghi không NULL, bạn dùng “ IS NOT NULL ”. Ví dụ :

so sánh với null

Để quy đổi NULL về một giá trị chỉ định, bạn dùng hàm ISNULL ( ). Ví dụ dưới đây nếu như năm sinh không xác lập được sẽ coi là sinh năm 2000 .

isnull

Một ví dụ khác với trường hợp MiddleName

Một trường hợp khác cũng cần chú ý quan tâm khi sử dụng NOT IN với dataset có NULL.

Từ ý tưởng ISNULL, nếu coi trạng thái “Ăn gì cũng được” là một giá trị NULL, chúng ta có thể xử lý bằng cách đổi câu hỏi như sau:  

“ Nếu em chưa chọn được quán nào thì chúng mình ở nhà ăn Mì Tôm nhé. ”

Câu hỏi này không đảm bảo luôn luôn thành công. Nhưng ít nhiều cũng sẽ thúc đẩy người phản hồi cần đưa ra 1 phương án thay thế nếu không trạng thái “Ăn gì cũng được” sẽ được điền luôn bằng “Mì Tôm”. (Kết quả áp dụng phát kiến này như thế nào? Bạn đọc đến cuối sẽ rõ.

Một vài lưu ý khác khi làm việc với NULL

 

1. Khi dùng các hàm tính toán aggregate (như COUNT, SUM…), SQL loại bỏ các bản ghi NULL ra trước khi thực hiện do đó tránh được rắc rối khi dính với NULL 

2. COALESE vs ISNULL 

Một hàm khác thường dùng để giải quyết và xử lý NULL là COALESE. Trong hầu hết những trường hợp, COALESE và ISNULL hoàn toàn có thể sử dụng thay thế sửa chữa được cho nhau, tuy nhiên, những bạn nên nắm rõ sự những biệt 2 hàm này để hoàn toàn có thể sử dụng một cách tương thích .COALESCE ( param1, param2, param3 … ) : COALESE nhận vào nhiều giá trị và trả lại giá trị tiên phong không NULL trong những giá trị được truyền vào .

ISNULL COALESE
Phạm vi Có trên SQL Server, Sybase hoặc một vài phiên bản SQL khác Hàm chuẩn của SQL theo ISO, có trên hầu hết những phiên bản SQL .
Số giá trị nhận vào 2 giá trị Nhiều giá trị
Kiểu tài liệu hiệu quả Theo giá trị tiên phong Theo kiểu tài liệu cao nhất trongdatatype precedence.( mức độ cụ thể cao nhất trong những cột tài liệu truyền vào ) .

Để nhận rõ hơn sự độc lạ, hãy theo dõi ví dụ sau :

coelse và null trong sql

Cá nhân mình thường ưu tiên dùng ISNULL do hàm này thuận tiện giám sát được kiểu tài liệu trả ra, từ đó thuận tiện trấn áp được câu lệnh .Mình vận dụng như kế hoạch ở trên để giải quyết và xử lý NULL với lựa chọn của gấu, bị phạt ăn Mì Tôm 1 tuần. Bạn nào biết tuyệt kỹ làm lành với gấu san sẻ mình nhé. Hứa sẽ chịu khó viết bài san sẻ .

P/s: Code mẫu viết trên SQL Server kiến thức chung đúng cho các bản SQL khác.