PlusMagi's Blog By Pitt Phunsanit Ai,Database เจาะลึกค่า NULL ใน SQL: ทำไมถึงไม่ใช่ 0 และไม่ใช่ข้อความว่าง (“”) พร้อมวิธีจัดการด้วย IS NULL

เจาะลึกค่า NULL ใน SQL: ทำไมถึงไม่ใช่ 0 และไม่ใช่ข้อความว่าง (“”) พร้อมวิธีจัดการด้วย IS NULL

ในโลกของการจัดการฐานข้อมูล (Database Management) การเผชิญหน้ากับข้อมูลที่สมบูรณ์แบบนั้นแทบจะเป็นไปไม่ได้เสมอไป ข้อมูลบางส่วนอาจขาดหายไป ไม่ได้ถูกบันทึก หรือยังไม่ทราบค่า สถานการณ์เหล่านี้ก่อให้เกิดคำถามเชิงตรรกะที่สำคัญว่า: “ค่าที่หายไป” นั้นควรจะแทนด้วยศูนย์ (0) หรือข้อความว่างเปล่า (”)? การทำความเข้าใจแนวคิดของค่าว่าง (NULL) อย่างลึกซึ้งจึงเป็นรากฐานสำคัญที่ผู้เชี่ยวชาญด้านข้อมูลทุกคนต้องรู้ เพื่อให้สามารถเขียนคิวรี (Query) ที่แม่นยำและรักษาความสมบูรณ์ของข้อมูลได้

💡 NULL คืออะไร? สถานะทางตรรกะ ไม่ใช่ค่าข้อมูล

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

NULL เป็นตัวแทนของ “ค่าที่ไม่ทราบ” (Unknown Value) หรือ “ไม่สามารถใช้ได้” (Not Applicable) ซึ่งเป็นสถานะทางตรรกะ (Logical State) ไม่ใช่ข้อมูลจริง (Actual Data Value) หากคอลัมน์ถูกกำหนดเป็น NULL หมายความว่า ณ ขณะนี้ระบบไม่มีข้อมูลเพื่อตอบคำถามนั้น

⚠️ กับดักทางตรรกะ: ทำไม NULL จึงไม่เท่ากับ 0 หรือ ''

เมื่อเราพยายามเปรียบเทียบค่า NULL กับค่าใดๆ ไม่ว่าจะเป็นตัวเลข (0) หรือสตริง ('') ระบบฐานข้อมูลจะถือว่าการเปรียบเทียบนั้นไม่สมบูรณ์ (Unknown) เสมอ

ตัวอย่าง:

  • NULL = 0 จะให้ผลลัพธ์เป็น UNKNOWN
  • NULL = '' จะให้ผลลัพธ์เป็น UNKNOWN

การที่การเปรียบเทียบให้ผลลัพธ์ UNKNOWN ทำให้เราไม่สามารถใช้ตัวดำเนินการเปรียบเทียบมาตรฐาน (=) เพื่อตรวจสอบสถานะของค่าว่างได้

✅ วิธีจัดการค่า NULL ที่ถูกต้องด้วย PostgreSQL

หากเราต้องการตรวจสอบว่าค่าใดค่าหนึ่งมีสถานะเป็นค่าว่างหรือไม่ เราจึงต้องใช้ไวยากรณ์เฉพาะอย่าง IS NULL และ IS NOT NULL เสมอ การใช้ไวยากรณ์นี้เป็นหลักการพื้นฐานในการเขียนคิวรีที่เชื่อถือได้ใน PostgreSQL

ตัวอย่างการใช้งานใน PostgreSQL:

SQL

-- สมมติว่ามีตาราง 'user_profiles' และคอลัมน์ 'phone_number' เป็น NULL<br><br>-- ❌ ผิด: การเปรียบเทียบ NULL ด้วยเครื่องหมายเท่ากับ จะไม่ทำงาน<br>SELECT * FROM user_profiles WHERE phone_number = NULL; -- จะไม่คืนค่าใดๆ<br><br>-- ✅ ถูก: ต้องใช้ IS NULL เพื่อตรวจสอบสถานะค่าว่าง<br>SELECT * FROM user_profiles WHERE phone_number IS NULL;

นอกจากนี้ หากเราต้องการแทนที่ค่า NULL ด้วยค่าอื่นที่สามารถนำไปคำนวณต่อได้ (เช่น แทนด้วย 0) เราควรใช้ฟังก์ชัน COALESCE ซึ่งเป็นฟังก์ชันมาตรฐานของ PostgreSQL:

SQL

-- ใช้ COALESCE เพื่อแทนที่ NULL ด้วยค่า 0<br>SELECT COALESCE(salary, 0) AS effective_salary FROM employees;

✨ บทสรุปสำหรับสถาปนิกข้อมูล

การเข้าใจว่า NULL คือ สถานะ ไม่ใช่ ค่า เป็นความรู้ที่สำคัญอย่างยิ่งสำหรับนักพัฒนาและสถาปนิกข้อมูล การยึดมั่นในการใช้ IS NULL แทน = NULL และการใช้ COALESCE ในการจัดการค่าที่ขาดหายไป จะช่วยให้คุณสามารถเขียนคิวรีที่แข็งแกร่ง แม่นยำ และรักษาความสมบูรณ์ของข้อมูลในระบบ PostgreSQL ได้อย่างมืออาชีพ

Exit mobile version