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

NULL: ค่าความจริงลำดับที่สาม

ทำความเข้าใจความหมายของ NULL เหตุใด NULL จึงไม่เท่ากับสิ่งใดเลย (แม้แต่ตัวมันเอง) และตรรกะแบบสามค่ามีผลต่อส่วนคำสั่ง WHERE อย่างไร

NULL: ค่าความจริงลำดับที่สาม เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

NULL คืออะไร

NULL หมายถึงข้อมูลที่ไม่ทราบค่าหรือขาดหาย ไม่ใช่ศูนย์ ไม่ใช่สตริงว่าง และไม่ใช่ค่าเท็จ แต่คือการไม่มีค่าอย่างชัดเจน

NULL ไม่เท่ากับสิ่งใดเลย (แม้แต่ตัวมันเอง)

นี่คือกฎที่ทำให้ทุกคนสับสน

SELECT NULL = NULL;       -- NULL (not true!)
SELECT NULL = 0;          -- NULL
SELECT NULL = '';        -- NULL
SELECT NULL <> 1;         -- NULL

ใช้ IS NULL และ IS NOT NULL

เมื่อต้องการตรวจสอบ NULL คุณต้องใช้เพรดิเคตพิเศษ IS NULL และ IS NOT NULL:

SELECT email FROM users WHERE deleted_at IS NULL;       -- active users
SELECT email FROM users WHERE deleted_at IS NOT NULL;   -- deleted users

ตรรกะสามค่า

ตรรกะบูลีนของ SQL มีสามค่า ได้แก่ TRUE, FALSE และ UNKNOWN (NULL)

ABA AND BA OR B
TRUENULLNULLTRUE
FALSENULLFALSENULL
NULLNULLNULLNULL

WHERE จะตัดแถวที่เพรดิเคตเป็น NULL ออก

หาก WHERE x = 5 ให้ผลเป็น NULL สำหรับแถวหนึ่ง (เพราะ x เป็น NULL) แถวนั้นจะไม่ถูกส่งคืน มีเพียงแถวที่เพรดิเคตเป็น TRUE เท่านั้นที่ถูกเก็บไว้

-- Suppose age is NULL for some users:
SELECT * FROM users WHERE age >= 18;
-- Users with NULL age are NOT returned, even though we
-- don't actually know they're under 18.

กับดัก NULL ของ NOT IN

การสอบถามนี้จะส่งคืนศูนย์แถว หากชื่อใด ๆ ในการสอบถามย่อยเป็น NULL

SELECT * FROM users
WHERE name NOT IN (SELECT excluded_name FROM blocklist);
-- If blocklist has a NULL row, the whole NOT IN evaluates to NULL
-- → no rows returned

-- Safer:
SELECT * FROM users u
WHERE NOT EXISTS (
  SELECT 1 FROM blocklist b WHERE b.excluded_name = u.name
);

COALESCE: แทนที่ NULL ด้วยค่าเริ่มต้น

COALESCE จะส่งคืนอาร์กิวเมนต์แรกที่ไม่ใช่ NULL:

SELECT id, COALESCE(full_name, email, 'Anonymous') AS display_name
FROM users;

-- If full_name is NULL, use email; if that's NULL too, use 'Anonymous'.

NULLIF: ตรงกันข้าม

NULLIF(a, b) จะส่งคืน NULL เมื่อ a = b มิฉะนั้นจะส่งคืน a เหมาะสำหรับการปฏิบัติต่อค่าพิเศษ เช่น '' หรือ 0 ให้เป็น NULL

SELECT NULLIF(price, 0) FROM products;
-- Returns NULL when price is 0, useful for AVG() that should ignore zeros.

NULL ในฟังก์ชันรวม

ฟังก์ชันรวม (ยกเว้น COUNT(*)) จะข้ามอินพุตที่เป็น NULL:

-- Suppose:  prices = [10, 20, NULL, 30]
SELECT COUNT(*)     FROM products;  -- 4 (counts rows)
SELECT COUNT(price) FROM products;  -- 3 (counts non-NULL prices)
SELECT AVG(price)   FROM products;  -- 20  (60 / 3, not 60 / 4)
SELECT SUM(price)   FROM products;  -- 60

ลำดับการจัดเรียง NULL

ตามค่าเริ่มต้น PostgreSQL จะจัดเรียง NULL ไว้ท้ายสุดเมื่อเรียงจากน้อยไปมาก และไว้ต้นสุดเมื่อเรียงจากมากไปน้อย คุณสามารถเปลี่ยนลักษณะนี้ได้:

SELECT * FROM users ORDER BY last_login_at DESC NULLS LAST;

การจัดเก็บ NULL เทียบกับสตริงว่าง

ตัดสินใจสำหรับแต่ละคอลัมน์ว่า '' เป็นค่าที่ใช้ได้หรือไม่ หากไม่ใช่ ให้ใช้ NULL เพื่อหมายถึง "ไม่มีค่า" หากใช่ NULL จะมีความหมายอื่น เช่น "ยังไม่ได้สอบถาม"

ใช้อย่างสม่ำเสมอ อย่าผสมทั้งสองแบบไว้ในคอลัมน์เดียวกัน

ทบทวน

NULL เป็นค่าความจริงประเภทหนึ่งโดยเฉพาะ

  • ตรวจสอบด้วย IS NULL อย่าใช้ = NULL
  • ตัวกรอง WHERE จะเก็บไว้เฉพาะแถวที่เป็น TRUE
  • ฟังก์ชันรวมจะข้ามอินพุตที่เป็น NULL
  • COALESCE คือเครื่องมือที่ช่วยคุณได้

ตรวจสอบความเข้าใจอย่างรวดเร็ว

SELECT NULL = NULL; จะส่งคืนอะไร

คำถามที่พบบ่อย

บทเรียน “NULL: ค่าความจริงลำดับที่สาม” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “NULL: ค่าความจริงลำดับที่สาม” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “NULL: ค่าความจริงลำดับที่สาม”

ทำความเข้าใจความหมายของ NULL เหตุใด NULL จึงไม่เท่ากับสิ่งใดเลย (แม้แต่ตัวมันเอง) และตรรกะแบบสามค่ามีผลต่อส่วนคำสั่ง WHERE อย่างไร คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “NULL: ค่าความจริงลำดับที่สาม” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. RDBMS คืออะไร และเหตุใดตารางจึงสำคัญ
  2. คีย์หลักและความไม่ซ้ำกัน
  3. NULL: ค่าความจริงลำดับที่สาม
  4. ภาพรวมชนิดข้อมูล: INT VARCHAR DATE BOOLEAN
← กลับไปที่ SQL Academy