การจัดการค่า NULL ใน SQL Server


หน้าแรก SQL Server การจัดการค่า NULL ใน SQL Server
ค่า NULL (อ่านว่า นัล) คืออะไร

ในการเก็บข้อมูลบางครั้ง เรามักจะเจอค่า NULL ใน Table ดังรูป

image

มีหลายท่านที่ไม่ทราบจริงๆ ว่าค่า NULL นั้นคือค่าอะไรกันแน่ ผมขออธิบายตรงนี้เลยนะครับว่า ค่า NULL คือ “ค่าที่ไม่ทราบ” หมายความว่า ไม่ทราบว่าเป็นค่าอะไร รวมถึงไม่ทราบด้วยว่าเป็น Data Type อะไร ซึ่งจะแตกต่างจากค่า 0 หรือ Empty String หรือ Zero Length String

ซึ่ง 0 นั้นจะทราบว่าเป็นค่าตัวเลขแต่เก็บค่า 0

ส่วน Empty String หรือ Zero Length String นั้น เราก็จะทราบว่าเป็นข้อความครับ แต่ยังไม่ได้เก็บตัวอักษรอะไรเลยแม้แต่ตัวเดียว

ซึ่งจะผิดกับ NULL อย่างแน่นอน เพราะทันทีที่เห็น NULL เราจะไม่ทราบจริงๆ ว่าเป็น data type อะไรกันแน่ครับ

แล้วก็มาถึงคำถามที่ว่า ค่า NULL มีประโยชน์อะไร? น่าสนใจใช่ไหมหล่ะครับ

ประโยชน์ของค่า NULL

จากประสบการณ์ใช้งานของผม ประโยชน์ของค่า NULL น่าจะเป็นการแสดงให้เห็นว่า ที่ช่องนี้ ยังไม่เคยมีการป้อนข้อมูลมาก่อน ซึ่งหมายความว่า ตั้งแต่ Record นี้ได้ถูกป้อนลงไป ยังไม่เคยมีใครเข้ามาแก้ไขข้อมูลในช่องนี้มาก่อนเลยครับ

การจัดการการแสดงผลของค่า NULL

ในการ query data เพื่อที่จะออกรายงานนั้น user บางคนอาจจะไม่เข้าใจว่าค่า null นั้นหมายถึงอะไร เราสามารถจัดการแสดงผลเพื่อทำให้ user สามารถ อ่าน report ได้ง่ายขึ้น ดังตัวอย่างนี้ครับ

image

ในตัวอย่างนี้จะเป็นการจัดการแสดงผล โดยตรวจสอบว่าถ้ามี ค่า NULL เราจะนำค่า n/a มาแสดงแทน ดังผลลัพธ์

image

ปัญหาค่า NULL กับการหาค่าเฉลี่ย (Average)

เวลาที่เราต้องการที่จะหาค่าเฉลี่ย (Average) ถ้าใน Table เรามีค่า NULL อยู่ รับรองครับว่าจะมีปัญหาแน่นอน เนื่องจาก AVG() จะไม่ได้นำค่า null มาคิดด้วยครับ ซึ่งก็จะทำให้ผลลัพธ์ผิดไปด้วยแน่นอน ดังตัวอย่าง ซึ่งจะมีค่ามากกว่าความเป็นจริงครับ

image

เราสามารถที่จะแก้ไขได้โดยเพิ่มคำสั่ง isnull() เข้าไปแทนดังตัวอย่างครับ

image

ซึ่งจะได้ค่าที่ถูกต้องครับ


refer: http://yongyutde.wordpress.com/2011/06/17/%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%88%E0%B8%B1%E0%B8%94%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%84%E0%B9%88%E0%B8%B2-null-%E0%B9%83%E0%B8%99-sql-server/



ขึ้นไปด้านบน