MySQL IS NULL & IS NOT NULL พร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

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

  • 🧩 คำจำกัดความหลัก: NULL คือค่าที่ใช้แทนข้อมูลที่ไม่มีอยู่จริง มันไม่ใช่ชนิดข้อมูล และไม่ใช่เลขศูนย์
  • พฤติกรรมทางคณิตศาสตร์: นิพจน์ทางคณิตศาสตร์ใดๆ ที่เกี่ยวข้องกับ NULL จะคืนค่าเป็น NULL ดังนั้น 69 + NULL จะได้ผลลัพธ์เป็น NULL แทนที่จะเป็น 69
  • 📊 ผลกระทบโดยรวม: ฟังก์ชัน COUNT(column) และฟังก์ชันรวมอื่นๆ จะข้ามแถวที่เป็นค่าว่าง (NULL) ในขณะที่ COUNT(*) ยังคงนับทุกแถวในตาราง
  • ???? ข้อจำกัด NOT NULL: การประกาศคอลัมน์เป็น NOT NULL จะปฏิเสธการแทรกข้อมูลใดๆ ที่ไม่มีค่า ซึ่งเป็นการปกป้องฟิลด์ที่จำเป็น เช่น ตัวระบุ
  • 🔍 การกรองที่ถูกต้อง: IS NULL และ IS NOT NULL เป็นการทดสอบที่เชื่อถือได้เพียงอย่างเดียว เนื่องจากตัวดำเนินการความเท่าเทียมกันจะไม่ตรงกับค่า NULL
  • 🇧🇷 ตรรกะสามค่า: การเปรียบเทียบกับค่า NULL จะส่งคืนค่า UNKNOWN ดังนั้นคำสั่ง SELECT NULL = NULL จึงให้ผลลัพธ์เป็น NULL แทนที่จะเป็น TRUE

MySQL เป็นค่าว่างและไม่ใช่ค่าว่าง

ใน SQL NULL เป็นได้ทั้งค่าและคำหลัก เรามาดูค่า NULL กันก่อน

MySQL เป็นโมฆะและไม่เป็นโมฆะ

NULL ใน คืออะไร MySQL?

ในแง่ง่ายๆ, NULL คือค่าที่ใช้แทนข้อมูลที่ไม่มีอยู่จริงเมื่อทำการเพิ่มข้อมูลลงในตาราง อาจมีบางครั้งที่ค่าในบางฟิลด์ไม่พร้อมใช้งาน

เพื่อให้เป็นไปตามข้อกำหนดของระบบการจัดการฐานข้อมูลเชิงสัมพันธ์ที่แท้จริง MySQL ใช้ค่า NULL เป็นตัวแทนสำหรับค่าที่ยังไม่ได้ป้อน ภาพหน้าจอด้านล่างแสดงให้เห็นว่าค่า NULL มีลักษณะอย่างไรในตารางฐานข้อมูล

Null เป็นค่า

โปรดสังเกตว่าเซลล์ว่างจะถูกทำเครื่องหมายด้วย NULL ไม่ใช่ข้อความว่างและไม่ใช่เลขศูนย์ ก่อนที่จะไปต่อ โปรดทำความเข้าใจพื้นฐานของค่า NULL ก่อน

  • NULL ไม่ใช่ประเภทข้อมูล – นี่หมายความว่าไม่ได้รับการยอมรับว่าเป็น "int", "date" หรือประเภทข้อมูลอื่นใดที่กำหนดไว้
  • การคำนวณทางคณิตศาสตร์ ที่เกี่ยวข้องกับ NULL เสมอ กลับเป็นโมฆะตัวอย่างเช่น 69 + NULL = NULL
  • ส่วนมาก ฟังก์ชั่นรวม ละเว้นแถวที่มีค่า NULLข้อยกเว้นประการเดียวคือ COUNT(*) ซึ่งจะนับทุกแถวโดยไม่คำนึงถึงค่า NULL

ฟังก์ชันรวมจัดการกับค่าว่างอย่างไร

กฎนี้จะเปลี่ยนคำตอบที่แบบสอบถามการรายงานส่งคืน ดังนั้นเรามาพิสูจน์กัน เริ่มต้นด้วยเนื้อหาปัจจุบันของตารางสมาชิก

SELECT * FROM `members`;

เมื่อดำเนินการสคริปต์ข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้

membership_ number full_ names gender date_of_ birth physical_ address postal_ address contact_ number email
1 Janet Jones Female 21-07-1980 First Street Plot No 4 Private Bag 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Female 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
3 Robert Phil Male 12-07-1989 3rd Street 34 NULL 12345rm@tstreet.com
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL
5 Leonard Hofstadter MaleNULL Woodcrest NULL 845738767 NULL
6 Sheldon Cooper Male NULL Woodcrest NULL 976736763 NULL
7 Rajesh Koothrappali Male NULL Woodcrest NULL 938867763 NULL
8 Leslie Winkle Male 14-02-1984 Woodcrest NULL 987636553 NULL
9 Howard Wolowitz Male 24-08-1981 SouthPark P.O. Box 4563 987786553 lwolowitz[at]email.me

คอลัมน์ contact_number ที่ไฮไลต์ไว้มีทั้งหมดเก้าแถว แต่มีสองแถวที่เป็นค่าว่าง (NULL) เรามานับจำนวนสมาชิกทั้งหมดที่อัปเดตหมายเลขติดต่อของตนกัน

SELECT COUNT(contact_number) FROM `members`;

การดำเนินการแบบสอบถามข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้

COUNT(contact_number)
7

หมายเหตุ คำตอบคือ 7 ไม่ใช่ 9 เพราะค่า NULL สองค่าไม่ได้ถูกนับรวม การใช้คำสั่ง COUNT(*) กับตารางเดียวกันจะให้ผลลัพธ์เป็น 9 เนื่องจาก COUNT(*) นับจำนวนแถว ไม่ใช่จำนวนค่า

ไม่ใช่ค่า NULL

วิธีที่ปลอดภัยกว่าคือการป้องกันไม่ให้ค่า NULL เข้าไปในคอลัมน์ที่จำเป็นทั้งหมด นั่นคือหน้าที่ของข้อจำกัด NOT NULL

สิ่งที่ไม่ใช่คืออะไร Operaทอร์?

ตัวดำเนินการตรรกะ NOT ใช้สำหรับทดสอบเงื่อนไขแบบบูลีน โดยจะคืนค่า true หากเงื่อนไขเป็นเท็จ และจะคืนค่า false หากเงื่อนไขที่กำลังทดสอบเป็นจริง

เงื่อนไข ไม่ Operaผลลัพธ์ของทอร์
จริง เท็จ
เท็จ จริง

ทำไมต้องใช้ NOT NULL?

ในบางกรณี เราอาจต้องทำการคำนวณกับชุดผลลัพธ์จากคำสั่งค้นหาและส่งคืนค่าเหล่านั้น การดำเนินการทางคณิตศาสตร์ใดๆ กับคอลัมน์ที่มีค่าเป็น NULL จะส่งคืนค่า NULL เช่นกัน เพื่อหลีกเลี่ยงสถานการณ์เช่นนี้ เราสามารถใช้คำสั่ง NOT NULL เพื่อจำกัดผลลัพธ์ที่เราจะนำไปประมวลผลได้

การสร้างตารางที่มีคอลัมน์ที่ห้ามเป็นค่าว่าง (NOT NULL)

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

ตัวอย่างด้านล่างนี้สร้างตารางใหม่ที่เก็บข้อมูลพนักงาน โดยต้องระบุหมายเลขพนักงานเสมอ

CREATE TABLE `employees`(
  employee_number int NOT NULL,
  full_names varchar(255) ,
  gender varchar(6)
);

ต่อไปนี้เราจะลองเพิ่มข้อมูลใหม่โดยไม่ระบุหมายเลขพนักงาน และดูว่าจะเกิดอะไรขึ้น

INSERT INTO `employees` (full_names,gender) VALUES ('Steve Jobs', 'Male');

ดำเนินการสคริปต์ข้างต้นใน MySQL ม้านั่งทำงานของช่างเครื่อง แสดงข้อผิดพลาดดังต่อไปนี้ เนื่องจากไม่ได้กรอกคอลัมน์ที่จำเป็น

ไม่ใช่ค่า NULL

คำหลัก IS NULL และ IS NOT NULL

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

column_name IS NULL
column_name IS NOT NULL

ที่นี่

  • “เป็นโมฆะ” เป็นคำสำคัญที่ทำการเปรียบเทียบแบบบูลีน จะคืนค่าเป็นจริงหากค่าที่ให้มาเป็น NULL และจะส่งคืนค่าเป็นเท็จหากค่าที่ให้มาไม่ใช่ NULL
  • “ไม่ใช่ค่าว่าง” เป็นคีย์เวิร์ดที่ทำการเปรียบเทียบในทางตรงกันข้าม โดยจะคืนค่า true หากค่าที่ป้อนไม่ใช่ NULL และคืนค่า false หากค่าที่ป้อนเป็น NULL

เรามาดูตัวอย่างการใช้งานจริงที่ใช้คำสั่ง IS NOT NULL เพื่อลบแถวทั้งหมดที่มีค่า NULL ในคอลัมน์กัน

จากตารางสมาชิกด้านบน สมมติว่าเราต้องการรายละเอียดของสมาชิกที่มีหมายเลขติดต่อไม่เป็นค่าว่าง เราสามารถเรียกใช้คำสั่งค้นหาได้ดังนี้

SELECT * FROM `members` WHERE contact_number IS NOT NULL;

การเรียกใช้คำสั่งค้นหาข้างต้นจะแสดงผลลัพธ์เพียงเจ็ดรายการที่มีหมายเลขติดต่อ ซึ่งตรงกับผลลัพธ์การนับจากส่วนก่อนหน้า

ทีนี้สมมติว่าเราต้องการสิ่งที่ตรงกันข้าม นั่นคือ ข้อมูลสมาชิกที่ไม่มีหมายเลขติดต่อ เราสามารถใช้คำสั่งค้นหาต่อไปนี้ได้

SELECT * FROM `members` WHERE contact_number IS NULL;

การเรียกใช้คำสั่งค้นหาข้างต้นจะแสดงผลลัพธ์เป็นข้อมูลสมาชิกสองรายที่มีหมายเลขติดต่อเป็นค่าว่าง (NULL)

membership_ number full_names gender date_of_birth physical_address postal_address contact_ number email
2 Janet Smith Jones Female 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL

คำเตือน: เงื่อนไขเช่น WHERE contact_number = NULL จะส่งคืนชุดผลลัพธ์ว่างเปล่า แม้ว่าจะมีค่า NULL อยู่ก็ตาม ตัวดำเนินการเท่ากับไม่สามารถตรงกับค่า NULL ได้ ดังนั้น IS NULL จึงเป็นการทดสอบที่ถูกต้องเพียงอย่างเดียว

การเปรียบเทียบค่า NULL กับตรรกะสามค่า

ตรรกะสามค่า – การดำเนินการทางตรรกะแบบบูลีนกับเงื่อนไขที่เกี่ยวข้องกับค่า NULL อาจส่งค่ากลับมาเป็น “ไม่ทราบ”, “จริง” หรือ “เท็จ”.

โดยใช้คีย์เวิร์ด “IS NULL” เมื่อทำการดำเนินการเปรียบเทียบ เกี่ยวข้องกับ NULL รับคืน จริง or เท็จการใช้ตัวดำเนินการเปรียบเทียบอื่นๆ จะส่งคืนค่า “ไม่ทราบ” (NULL)ตารางด้านล่างนี้เปรียบเทียบแต่ละสำนวนแบบเคียงข้างกัน

การแสดงออก ผล ความหมาย
เลือก 5 = 5; 1 TRUE
เลือกค่า NULL = NULL; NULL UNKNOWN
เลือก 5 > 5; 0 FALSE
เลือกค่าว่าง > ค่าว่าง; NULL UNKNOWN
SELECT 5 IS NULL; 0 FALSE
SELECT NULL IS NULL; 1 TRUE

เปรียบเทียบเลขห้ากับตัวมันเอง จากนั้นทำซ้ำขั้นตอนเดียวกันกับค่าว่าง (NULL)

SELECT 5 =5;
SELECT NULL = NULL;
5 =5 NULL = NULL
1 NULL

ผลลัพธ์แรกคือ 1 (จริง) ผลลัพธ์ที่สองคือค่าว่าง เนื่องจาก MySQL ไม่สามารถระบุได้ว่าค่าที่ไม่ทราบค่าหนึ่งเท่ากับค่าที่ไม่ทราบค่าอีกค่าหนึ่ง ตอนนี้ให้ใช้คีย์เวิร์ด IS NULL กับค่าเหล่านั้น

SELECT 5 IS NULL;
SELECT NULL IS NULL;
5 IS NULL NULL IS NULL
0 1

คราวนี้คำตอบชัดเจนแล้ว คือ 0 (เท็จ) และ 1 (จริง) เฉพาะคำสั่ง IS NULL และ IS NOT NULL เท่านั้นที่จะให้คำตอบที่แน่นอนเมื่อมีค่า NULL เกี่ยวข้อง

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

ศูนย์เป็นตัวเลข และสตริงว่างเป็นข้อความ ดังนั้นทั้งสองจึงตรงกับการทดสอบความเท่าเทียมกัน NULL หมายถึงไม่มีการระบุค่าใดๆ เลย ซึ่งเป็นเหตุผลว่าทำไมจึงตอบสนองเฉพาะต่อ IS NULL และ IS NOT NULL เท่านั้น

IFNULL(column, 'N/A') จะส่งคืนค่าทดแทนเมื่อใดก็ตามที่คอลัมน์เป็น NULL COALESCE(a, b, c) จะส่งคืนค่าอาร์กิวเมนต์ตัวแรกที่ไม่ใช่ NULL ทั้งสองฟังก์ชันนี้มีประโยชน์ในการใช้งานภายใน MySQL ฟังก์ชั่น และรายงาน

ลำดับ MySQL ฟังก์ชันนี้จะใช้ค่า NOT NULL กับทุกคอลัมน์ที่เป็นคีย์หลักโดยอัตโนมัติ เนื่องจากคีย์ที่ใช้ระบุแถวนั้นไม่สามารถเป็นค่าว่างได้ แต่ดัชนี UNIQUE นั้นแตกต่างออกไปและอนุญาตให้มีค่า NULL ได้หลายค่า

โดยทั่วไปแล้วใช่ครับ ผู้ช่วย AI ภายในเครื่องมือต่างๆ เช่น MySQL ม้านั่งทำงานของช่างเครื่อง เปลี่ยน “สมาชิกที่ไม่มีหมายเลขโทรศัพท์” ให้เป็นเงื่อนไข WHERE column IS NULL Revตรวจสอบตัวกรอง เพราะการทดสอบความเท่ากับค่า NULL จะไม่แสดงผลลัพธ์ใดๆ โดยไม่มีการแจ้งเตือน

ใช่ บ่อยครั้ง เครื่องมือตรวจสอบ AI จะตรวจจับข้อผิดพลาด เช่น การเปรียบเทียบค่า = NULL เป็นต้น SELECT นั่นคือการหาค่าเฉลี่ยของคอลัมน์ที่มีค่าเป็น NULL และไม่ใช่ในรายการที่มีค่า NULL การตัดสินใจขั้นสุดท้ายขึ้นอยู่กับผู้ที่รู้จักข้อมูลนั้น

สรุปโพสต์นี้ด้วย: