IS NULL, IS NOT NULL และ COALESCE
ตรวจหา NULL ด้วย IS NULL แทนค่าด้วย COALESCE / NULLIF และออกแบบคำค้นที่รับมือข้อมูลขาดหายได้อย่างเหมาะสม
IS NULL, IS NOT NULL และ COALESCE เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
การตรวจสอบ NULL
ใช้ IS NULL และ IS NOT NULL — อย่าใช้ = NULL:
SELECT * FROM users WHERE deleted_at IS NULL;
SELECT * FROM users WHERE deleted_at IS NOT NULL;เหตุผลที่ = NULL ล้มเหลวโดยไม่มีข้อความแจ้งเตือน
การเปรียบเทียบสิ่งใดก็ตามกับ NULL จะได้ค่า NULL (ไม่ทราบค่า) แถวนั้นจะถูกตัดออก — แต่จะไม่มี error ทำให้ข้อผิดพลาดถูกนำไปใช้งานจริง:
SELECT * FROM users WHERE deleted_at = NULL;
-- → returns 0 rows, alwaysCOALESCE: ค่าแรกที่ไม่ใช่ NULL
COALESCE รับอาร์กิวเมนต์จำนวนเท่าใดก็ได้ และส่งคืนค่าแรกที่ไม่ใช่ NULL:
SELECT id,
COALESCE(nickname, full_name, email, 'Anonymous') AS display_name
FROM users;COALESCE ใน WHERE
ใช้ COALESCE เพื่อเปลี่ยน NULL ให้เป็นค่าเริ่มต้นที่เรียงลำดับหรือเปรียบเทียบได้:
-- Treat NULL last_login_at as the epoch:
SELECT * FROM users
ORDER BY COALESCE(last_login_at, '1970-01-01') DESC;NULLIF: ตรงข้ามกัน
NULLIF(a, b) จะคืนค่า NULL เมื่อ a = b มิฉะนั้นจะคืนค่า a:
-- Treat 0 as missing so AVG ignores it:
SELECT AVG(NULLIF(price, 0)) FROM products;
-- Convert empty string to NULL on insert:
INSERT INTO contacts (phone) VALUES (NULLIF(:phone, ''));CASE สำหรับค่าเริ่มต้นแบบมีเงื่อนไข
CASE เป็นทางเลือกทั่วไปเมื่อ COALESCE ยืดหยุ่นไม่เพียงพอ:
SELECT id,
CASE
WHEN status IS NULL OR status = '' THEN 'unknown'
WHEN status = 'A' THEN 'active'
ELSE status
END AS status_label
FROM users;NULL ใน CHECK และข้อจำกัด
ข้อจำกัด CHECK จะ ผ่าน เมื่อเงื่อนไขเป็น NULL หากต้องการห้าม NULL ต้องระบุให้ชัดเจน:
CREATE TABLE prices (
amount NUMERIC(10,2),
CHECK (amount > 0) -- amount = NULL passes!
);
-- Better:
CREATE TABLE prices2 (
amount NUMERIC(10,2) NOT NULL CHECK (amount > 0)
);NULL ใน JOIN ON
คู่แถวที่คีย์สำหรับ JOIN เป็น NULL จะไม่ตรงกันเลย — NULL = NULL ให้ผลเป็น NULL หากต้องการให้ NULL เท่ากับ NULL ให้ใช้ IS NOT DISTINCT FROM:
SELECT * FROM a JOIN b ON a.key IS NOT DISTINCT FROM b.key;NULL กับ UNIQUE
SQL มาตรฐานถือว่า NULL แต่ละค่าต่างกันภายใต้ข้อจำกัด UNIQUE — คุณจึงมีหลายแถวที่เป็น NULL ได้:
CREATE TABLE invites (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE
);
INSERT INTO invites (email) VALUES (NULL), (NULL); -- both succeed!สรุป NULL และฟังก์ชันรวม
ฟังก์ชันรวมทั้งหมด (ยกเว้น COUNT(*)) จะข้ามค่า NULL
SELECT COUNT(*) FROM users; -- all rows
SELECT COUNT(email) FROM users; -- rows where email IS NOT NULL
SELECT COUNT(DISTINCT id) FROM users;ประกาศ NOT NULL เสมอเมื่อทำได้
NOT NULL เป็นหลักประกันความถูกต้องที่ง่ายและแข็งแกร่งที่สุด ให้เพิ่มลงในทุกคอลัมน์ที่ไม่ควรว่าง
สรุป
การจัดการ NULL เป็นแหล่งสำคัญที่สุดของข้อผิดพลาด SQL ที่สังเกตได้ยาก
- ทดสอบด้วย
IS NULL - แทนค่าด้วย
COALESCE - เปลี่ยนค่าแทนพิเศษเป็น NULL ด้วย
NULLIF - กำหนดค่าเริ่มต้นเป็น
NOT NULL
ตรวจสอบความเข้าใจ
expression ใดจะคืนค่า email หากไม่ใช่ NULL และคืนค่าตามตัวอักษร 'no-email' มิฉะนั้น
คำถามที่พบบ่อย
บทเรียน “IS NULL, IS NOT NULL และ COALESCE” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “IS NULL, IS NOT NULL และ COALESCE” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “IS NULL, IS NOT NULL และ COALESCE”
ตรวจหา NULL ด้วย IS NULL แทนค่าด้วย COALESCE / NULLIF และออกแบบคำค้นที่รับมือข้อมูลขาดหายได้อย่างเหมาะสม คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “IS NULL, IS NOT NULL และ COALESCE” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- รูปแบบ LIKE และอักขระแทน
- IN และ NOT IN สำหรับชุดค่า
- BETWEEN สำหรับช่วงค่า
- IS NULL, IS NOT NULL และ COALESCE