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