Tôi hiểu tại saonull + 1
hoặc (1 + null
) trả null
: null
có nghĩa là "giá trị không rõ", và nếu một giá trị là không rõ, người kế nhiệm của nó là chưa biết là tốt. Điều này cũng đúng đối với hầu hết các hoạt động khác liên quan đến vô [*]Tại sao SUM (...) trên một bản ghi trống rỗng trả về NULL thay vì 0?
Tuy nhiên, tôi không hiểu lý do tại sao sau xảy ra:.
SELECT SUM(someNotNullableIntegerField) FROM someTable WHERE 1=0
truy vấn này trả null
. Tại sao? Không có giá trị không xác định có liên quan ở đây! Mệnh đề WHERE trả về các bản ghi không và tổng của một tập hợp giá trị trống là 0
. [**] Lưu ý rằng tập hợp không phải là không rõ, là được biết là trống.
Tôi biết rằng tôi có thể giải quyết hành vi này bằng cách sử dụng ISNULL
hoặc COALESCE
, nhưng tôi đang cố gắng hiểu lý do tại sao hành vi này, có vẻ phản trực giác với tôi.
Bất kỳ thông tin chi tiết nào về lý do tại sao điều này có ý nghĩa?
[*] với một số trường hợp ngoại lệ đáng chú ý như null OR true
, nơi rõ ràng true
là kết quả ngay vì giá trị chưa biết đơn giản là không quan trọng.
[**] giống như sản phẩm của một tập hợp giá trị trống là 1
. Về mặt toán học, nếu tôi mở rộng $ (Z, +) $ thành $ (Z union {null}, +) $, lựa chọn hiển nhiên cho phần tử nhận dạng vẫn là 0
, không phải null
, kể từ x + 0 = x
nhưng x + null = null
.
Có lẽ bởi vì bạn đang sử dụng một tổng thể. – Kermit
Khi bạn thêm không có gì bạn không nhận được 0, bạn sẽ không nhận được gì. –
Bạn đã xem xét kế hoạch thực hiện chưa? – Kermit