MySQL เป็นโมฆะและไม่เป็นโมฆะ บทช่วยสอนพร้อมตัวอย่าง
ใน SQL Null นั้นเป็นทั้งค่าและคีย์เวิร์ด มาดูค่า NULL ก่อน -
Null เป็นค่า
หากอธิบายอย่างง่าย NULL เป็นเพียงตัวแทนสำหรับข้อมูลที่ไม่มีอยู่ เมื่อดำเนินการแทรกข้อมูลลงในตาราง จะมีบางครั้งที่ค่าฟิลด์บางค่าไม่พร้อมใช้งาน
เพื่อให้เป็นไปตามข้อกำหนดของระบบการจัดการฐานข้อมูลเชิงสัมพันธ์ที่แท้จริง MySQL ใช้ NULL เป็นตัวยึดตำแหน่งสำหรับค่าที่ยังไม่ได้ส่ง ภาพหน้าจอด้านล่างแสดงให้เห็นว่าค่า NULL มีลักษณะอย่างไรในฐานข้อมูล
ตอนนี้เรามาดูข้อมูลพื้นฐานบางประการสำหรับ NULL ก่อนที่เราจะไปอภิปรายกันต่อไป
- NULL ไม่ใช่ประเภทข้อมูล – นี่หมายความว่าไม่ได้รับการยอมรับว่าเป็น "int", "date" หรือประเภทข้อมูลอื่นใดที่กำหนดไว้
- การคำนวณทางคณิตศาสตร์ ที่เกี่ยวข้องกับ NULL เสมอ กลับเป็นโมฆะ ตัวอย่างเช่น 69 + NULL = NULL
- ทั้งหมด ฟังก์ชั่นรวม มีผลเฉพาะแถวที่ไม่มีค่า NULL.
ตอนนี้เรามาสาธิตวิธีที่ฟังก์ชันนับปฏิบัติต่อค่าว่าง มาดูเนื้อหาปัจจุบันของตารางสมาชิกกันดีกว่า-
SELECT * FROM `members`;
เมื่อดำเนินการตามสคริปต์ข้างต้น เราจะได้ผลลัพธ์ดังต่อไปนี้
membership_ number | full_ names | gender | date_of_ birth | physical_ address | postal_ address | contact_ number | |
---|---|---|---|---|---|---|---|
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 | 12345 | rm@tstreet.com |
4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
5 | Leonard Hofstadter | Male | NULL | 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 ของตนกันดีกว่า
SELECT COUNT(contact_number) FROM `members`;
การดำเนินการแบบสอบถามข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้
COUNT(contact_number) |
---|
7 |
หมายเหตุ: ยังไม่รวมค่าที่เป็น NULL
ไม่ใช่อะไร?
ตัวดำเนินการตรรกะ NOT ใช้เพื่อทดสอบเงื่อนไขบูลีน และส่งคืนค่าจริงหากเงื่อนไขเป็นเท็จ ตัวดำเนินการ NOT ส่งคืนค่าเท็จหากเงื่อนไขที่ทดสอบเป็นจริง
เงื่อนไข | ไม่ Operaผลลัพธ์ของทอร์ |
---|---|
จริง | เท็จ |
เท็จ | จริง |
เหตุใดจึงใช้ NOT null
จะมีบางกรณีที่เราจะต้องดำเนินการคำนวณกับชุดผลลัพธ์ของแบบสอบถามและส่งคืนค่าต่างๆ การดำเนินการทางคณิตศาสตร์ใดๆ กับคอลัมน์ที่มีค่า NULL จะส่งกลับผลลัพธ์เป็นค่า null เพื่อหลีกเลี่ยงสถานการณ์ดังกล่าว เราสามารถใช้คำสั่ง NOT NULL เพื่อจำกัดผลลัพธ์ที่ข้อมูลของเราดำเนินการอยู่
ไม่ใช่ค่า 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 workbench ให้ข้อผิดพลาดดังต่อไปนี้
คำหลักที่เป็นโมฆะ
NULL ยังใช้เป็นคำสำคัญได้เมื่อทำการดำเนินการบูลีนกับค่าที่รวมค่า NULL คำสำคัญ “IS/NOT” จะใช้ร่วมกับคำ NULL เพื่อจุดประสงค์ดังกล่าว ไวยากรณ์พื้นฐานเมื่อใช้ค่า null เป็นคำสำคัญมีดังนี้
`comlumn_name' IS NULL `comlumn_name' NOT NULL
ที่นี่
- “เป็นโมฆะ เป็นคำสำคัญที่ทำการเปรียบเทียบแบบบูลีน จะคืนค่าเป็นจริงหากค่าที่ให้มาเป็น NULL และจะส่งคืนค่าเป็นเท็จหากค่าที่ให้มาไม่ใช่ NULL
- "ไม่เป็นโมฆะ"เป็นคำสำคัญที่ทำการเปรียบเทียบแบบบูลีน มันจะคืนค่าเป็นจริงหากค่าที่ให้มาไม่เป็น NULL และจะส่งคืนค่าเป็นเท็จหากค่าที่ให้มาเป็นโมฆะ
ตอนนี้เรามาดูตัวอย่างเชิงปฏิบัติที่ใช้คีย์เวิร์ด 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 | |
---|---|---|---|---|---|---|---|
1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
5 | Leonard Hofstadter | Male | NULL | 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 |
การเปรียบเทียบค่า Null
ตรรกะสามค่า – การดำเนินการบูลีนบนเงื่อนไขที่เกี่ยวข้องกับค่า NULL สามารถส่งคืน “ไม่ทราบ” “จริง” หรือ “เท็จ”
ตัวอย่างเช่น โดยใช้คีย์เวิร์ด “IS NULL” เมื่อทำการดำเนินการเปรียบเทียบ เกี่ยวข้องกับ NULL สามารถกลับมาได้ จริง or เท็จการใช้ตัวดำเนินการเปรียบเทียบอื่น ๆ จะส่งกลับ “ไม่ทราบ”(โมฆะ)
สมมติว่าคุณเปรียบเทียบหมายเลข 5 กับ XNUMX
SELECT 5 =5;
ผลลัพธ์ของแบบสอบถามคือ 1 ซึ่งหมายถึง TRUE
5 =5 |
---|
1 |
มาทำการดำเนินการแบบเดียวกันกับ NULL กัน
SELECT NULL = NULL;
NULL = NULL |
---|
NULL |
ลองดูอีกตัวอย่างหนึ่ง
SELECT 5 > 5;
5 > 5 |
---|
0 |
ผลลัพธ์ของแบบสอบถามคือ 0 ซึ่งหมายถึง FALSE
ลองดูตัวอย่างเดียวกันโดยใช้ NULL
SELECT NULL > NULL;
NULL > NULL |
---|
NULL |
ลองใช้คีย์เวิร์ด IS NULL
SELECT 5 IS NULL;
5 IS NULL |
---|
0 |
ผลลัพธ์ของแบบสอบถามคือ 0 ซึ่งเป็น FALSE
SELECT NULL IS NULL;
NULL IS NULL |
---|
1 |
ผลลัพธ์ของแบบสอบถามคือ 1 ซึ่งเป็น TRUE
สรุป
- NULL เป็นตัวยึดตำแหน่งสำหรับเขตข้อมูลตารางเสริม
- MySQL ถือว่าค่า NULL แตกต่างจากข้อมูลประเภทอื่น ค่า NULL เมื่อใช้ในเงื่อนไขจะประเมินเป็นค่าบูลีนเท็จ
- การดำเนินการเชิงตรรกะ NOT ใช้เพื่อทดสอบค่าบูลีน และประเมินผลเป็นจริงหากค่าบูลีนเป็นเท็จ และประเมินผลเป็นเท็จหากค่าบูลีนเป็นจริง
- ส่วนคำสั่ง NOT NULL ใช้เพื่อกำจัดค่า NULL ออกจากชุดผลลัพธ์
- การดำเนินการทางคณิตศาสตร์กับค่า NULL จะส่งกลับผลลัพธ์เป็น NULL เสมอ
- ไม่สามารถใช้ตัวดำเนินการเปรียบเทียบเช่น [, =, ฯลฯ] เพื่อเปรียบเทียบค่า NULL ได้