</>
⌕
Junior #null#three-valued-logic#coalesce

NULL trong SQL gây những cạm bẫy nào?

⚡ Trả lời nhanh

NULL nghĩa là không xác định: mọi so sánh với NULL (kể cả NULL = NULL) cho UNKNOWN, nên phải dùng IS NULL. NOT IN với danh sách chứa NULL không trả dòng nào; hàm tổng hợp bỏ qua NULL (trừ COUNT(*)).

SELECT * FROM users WHERE phone = NULL;     -- luôn rỗng
SELECT * FROM users WHERE phone IS NULL;    -- đúng

-- NOT IN gặp NULL => không có dòng nào
SELECT * FROM a WHERE id NOT IN (SELECT a_id FROM b);  -- nếu b.a_id có NULL
-- An toàn hơn:
SELECT * FROM a WHERE NOT EXISTS (SELECT 1 FROM b WHERE b.a_id = a.id);

SELECT COALESCE(nickname, name) FROM users; -- giá trị mặc định
  • COUNT(col) bỏ qua NULL, COUNT(*) đếm mọi dòng.
  • AVG bỏ qua NULL nên có thể lệch so với kỳ vọng.
  • Với ORDER BY, vị trí NULL khác nhau theo DBMS.
🃏 Ôn bằng flashcard