0Pricing
SQL Academy · บทเรียน

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, always

COALESCE: ค่าแรกที่ไม่ใช่ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. รูปแบบ LIKE และอักขระแทน
  2. IN และ NOT IN สำหรับชุดค่า
  3. BETWEEN สำหรับช่วงค่า
  4. IS NULL, IS NOT NULL และ COALESCE
← กลับไปที่ SQL Academy