5.1 ขาดความสำคัญ

ภาษา SQL เช่นเดียวกับภาษา Java มีคีย์เวิร์ดพิเศษเพื่อแสดงถึงการไม่มีค่า - มันคือค่าว่าง หรืออย่างที่มักเขียน - NULL.

การใช้งานNULLใน SQL นั้นคล้ายกับการใช้ null ใน Java มาก ใน Java อาจมีวัตถุที่ฟิลด์มีค่า Null ใน SQL อาจมีตารางที่มีแถวที่มีค่า NULL

ให้ฉันเพิ่มผลิตภัณฑ์ที่ไม่มีแบรนด์สองสามรายการในตารางผลิตภัณฑ์ของเราโดยตั้งใจ หากไม่ทราบยี่ห้อสินค้า มูลค่าจะNULLเป็น

หากต้องการแสดงผลิตภัณฑ์ดังกล่าว ให้จัดเรียง ตาราง ผลิตภัณฑ์ ของเรา ตามidในลำดับที่กลับกัน และบันทึก 10 รายการ คำขอจะมีลักษณะดังนี้:

SELECT * FROM product
ORDER BY id DESC
LIMIT 10

เราได้รับผลการสืบค้นดังต่อไปนี้:

รหัส ชื่อ ยี่ห้อ ราคา นับ
15 หมุดย้ำ โมฆะ 0.01 1,000
14 สกรู โมฆะ 0.10 1,000
13 ยืน อิเกีย 100.00 น 10
12 กระถางดอกไม้ สมาร์ทฟลาวเวอร์ 99.00 น 9
สิบเอ็ด เก้าอี้นวม บ๊อช 44.00 น 8
10 จาน บ๊อช 199.00 น 10
9 โต๊ะเครื่องแป้ง อิเกีย 99.00 น 10
8 โคมไฟ แอลจี 15.00 น 100
7 โทรทัศน์ แอลจี 350.00 4
6 ชั้นวาง บ๊อช 25.00 น 114

ใช่ ฉันเพิ่มหมุดย้ำและสกรูเข้ากับโต๊ะแล้ว มีราคาและปริมาณ แต่ไม่มียี่ห้อ

5.2 การเปรียบเทียบกับ NULL

คุณจำได้ไหมว่าบางครั้งคุณเคยคลั่งไคล้ Java เมื่อใช้ null? ที่คุณไม่สามารถเปรียบเทียบตัวแปรที่สามารถอ้างถึงค่า Null ผ่านเท่ากับ () ตัวอย่าง:

Product product1 = new Product();
Product product2 = null;
if (product2.equals(product1) {  //an exception will be raised here}

คุณจะไม่เชื่อ แต่ในภาษา SQL คุณกำลังรอความแตกต่างเมื่อทำงานกับค่า NULL และดูเหมือนว่า:ไม่มีอะไรที่เป็นโมฆะ.

หากคุณพยายามกรองผลิตภัณฑ์ทั้งหมดที่มีตราสินค้าnull:

SELECT * FROM product
WHERE brand = NULL

คุณจะได้โต๊ะว่าง:

รหัส ชื่อ ยี่ห้อ ราคา นับ

แต่ถ้าคุณเขียนในแบบสอบถามว่ายี่ห้อไม่เท่ากับNULLคุณจะได้ผลลัพธ์เดียวกัน:

SELECT * FROM product
WHERE brand != NULL

คุณจะได้รับตารางว่างอีกครั้ง:

รหัส ชื่อ ยี่ห้อ ราคา นับ

การเปรียบเทียบ/การดำเนินการกับ NULL จะส่งกลับค่า NULL:

การแสดงออก ผลลัพธ์
ยี่ห้อ = NULL โมฆะ
ยี่ห้อ != NULL โมฆะ
โมฆะ = โมฆะ โมฆะ
โมฆะ != โมฆะ โมฆะ

ใช่,แม้ว่าคุณจะเปรียบเทียบ NULL กับ NULL คำตอบก็จะเป็น NULL.

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

แล้วเราจะตรวจสอบได้อย่างไรว่าบางฟิลด์ (หรือบางคอลัมน์) มีค่าเป็นNULL? และสำหรับสิ่งนี้ SQL มีนิพจน์พิเศษIS NULL- ดูเหมือนว่านี้

variable IS NULL

หากคุณต้องการตรวจสอบว่าคอลัมน์ในตารางของคุณไม่เท่ากับหรือไม่NULLคุณต้องเขียนIS NOT NULL:

variable IS NOT NULL

NULLลองเขียนแบบสอบถามที่จะเลือกผลิตภัณฑ์ทั้งหมดจากตาราง ผลิตภัณฑ์ที่มีแบรนด์เท่ากับ คำขอดังกล่าวจะมีลักษณะดังนี้:

SELECT * FROM product
WHERE brand IS NULL

และเราได้ผลลัพธ์ของแบบสอบถามดังต่อไปนี้:

รหัส ชื่อ ยี่ห้อ ราคา นับ
14 สกรู โมฆะ 0.10 1,000
15 หมุดย้ำ โมฆะ 0.01 1,000

ตอนนี้ขอแสดงสินค้าทั้งหมดที่มีราคาต่ำกว่า $20:

SELECT * FROM product
WHERE price  < 20

และเราได้ผลลัพธ์ของแบบสอบถามดังต่อไปนี้:

รหัส ชื่อ ยี่ห้อ ราคา นับ
2 เก้าอี้ อิเกีย 5.00 น 45
8 โคมไฟ แอลจี 15.00 น 100
14 สกรู โมฆะ 0.10 1,000
15 หมุดย้ำ โมฆะ 0.01 1,000

ตอนนี้เราระบุว่าราคาต้องต่ำกว่า $20 และไม่ใช่NULLแบรนด์

SELECT * FROM product
WHERE price  < 20 AND brand IS NOT NULL

เราได้รับผลการสืบค้นดังต่อไปนี้:

รหัส ชื่อ ยี่ห้อ ราคา นับ
2 เก้าอี้ อิเกีย 5.00 น 45
8 โคมไฟ แอลจี 15.00 น 100

หวัดดี สองบรรทัดสุดท้ายหายไปแล้ว นี่คือวิธีการทำงาน ผิดปกติเล็กน้อย แต่ก็ยังมีเหตุผลบางอย่างในเรื่องนี้