5.1 Qiymat yo'qligi
SQL tilida, Java tilida bo'lgani kabi, qiymat yo'qligini ifodalash uchun maxsus kalit so'z bor - bu null. Yoki ko'pincha buni shunday yozishadi - NULL.
SQLda NULL dan foydalanish Java-dagi null dan foydalanishga juda o'xshaydi. Java-da null qiymatlarni o'z ichiga olgan ob'ektlar bo'lishi mumkin. SQL-da esa null qiymatlarni o'z ichiga olgan jadvallar bo'lishi mumkin.
Keling, bizning product jadvalimizga maxsus brendisiz bir nechta mahsulot qo'shamiz. Agar mahsulot brendi noma'lum bo'lsa, u holda qiymat sifatida NULL bo'ladi.
Bunday mahsulotlarni ko'rsatish uchun biz product jadvalni id bo'yicha reverse tartibda tartiblaymiz va 10 ta yozuvni olamiz. So'rov quyidagicha ko'rinadi:
SELECT * FROM product
ORDER BY id DESC
LIMIT 10
Natijada biz quyidagi so'rovni olamiz:
| id | name | brand | price | count |
|---|---|---|---|---|
| 15 | Klapan | NULL | 0.01 | 1000 |
| 14 | Vint | NULL | 0.10 | 1000 |
| 13 | Stend | IKEA | 100.00 | 10 |
| 12 | Vazon | SmartFlower | 99.00 | 9 |
| 11 | Stul | Bosch | 44.00 | 8 |
| 10 | Pechka | Bosch | 199.00 | 10 |
| 9 | Komod | IKEA | 99.00 | 10 |
| 8 | Chiroq | LG | 15.00 | 100 |
| 7 | Televizor | LG | 350.00 | 4 |
| 6 | Polka | Bosch | 25.00 | 114 |
Ha, men jadvalga klapan va vint qo'shdim. Ularning narxi va miqdori bor, lekin brendi yo'q.
5.2 NULL bilan solishtirish
Java-da nulldan foydalanganda seni ba'zida jinniga aylantirgan narsani eslaysanmi? null qiymatlarga ishora qilishi mumkin bo'lgan o'zgaruvchilarni equals() orqali solishtirish mumkin emasligi. Misol:
Product product1 = new Product();
Product product2 = null;
if (product2.equals(product1) { //bu yerda istisno yuzaga keladi
…
}
Ishonmaysan, lekin SQL tilida NULL qiymatlar bilan ishlaganda seni ham ayrim noxushliklar kutadi. Va bu noxushlikni quyidagicha ifodalaymiz: hech narsa NULLga teng emas.
Agar barcha brendi null ga teng bo'lgan mahsulotlarni filtrlashga harakat qilsang:
SELECT * FROM product
WHERE brand = NULL
Bo'sh jadvalni olasan:
| id | name | brand | price | count |
|---|
Agar so'rovda yozsangki, brand NULLga teng emas, yana xuddi shu natijani olasan:
SELECT * FROM product
WHERE brand != NULL
Yana bo'sh jadvalni olasan:
| id | name | brand | price | count |
|---|
Har qanday NULL bilan solishtirish / amallar NULLni qaytaradi:
| Ifoda | Natija |
|---|---|
| brand = NULL | NULL |
| brand != NULL | NULL |
| NULL = NULL | NULL |
| NULL != NULL | NULL |
Ha, hatto NULLni NULL bilan solishtirganda ham natijada NULL olasan.
5.3 IS NULL va IS NOT NULL
Qanday qilib biror maydon (yoki biror ustun) NULL qiymatga ega ekanligini tekshiramiz? SQL tilida bu uchun maxsus ifoda - IS NULL mavjud. Bu shunday ko'rinadi.
o'zgaruvchi IS NULL
Agar jadvalingiz ustuni NULL emasligini tekshirmoqchi bo'lsang, IS NOT NULL yozish kerak:
o'zgaruvchi IS NOT NULL
Keling, product jadvalidan barcha brendi NULL ga teng bo'lgan mahsulotlarni tanlab oladigan so'rov yozamiz. Bunday so'rov quyidagicha ko'rinadi:
SELECT * FROM product
WHERE brand IS NULL
Va quyidagi so'rov natijasini olamiz:
| id | name | brand | price | count |
|---|---|---|---|---|
| 14 | Vint | NULL | 0.10 | 1000 |
| 15 | Klapan | NULL | 0.01 | 1000 |
Endi qiymati 20 dollardan kam bo'lgan barcha mahsulotlarni ko'rsatamiz:
SELECT * FROM product
WHERE price < 20
Va quyidagi so'rov natijasini olamiz:
| id | name | brand | price | count |
|---|---|---|---|---|
| 2 | Stul | IKEA | 5.00 | 45 |
| 8 | Chiroq | LG | 15.00 | 100 |
| 14 | Vint | NULL | 0.10 | 1000 |
| 15 | Klapan | NULL | 0.01 | 1000 |
Endi narx 20 dollardan kam ekanligini va brend NULL emasligini belgilaymiz.
SELECT * FROM product
WHERE price < 20 AND brand IS NOT NULL
Natijada quyidagicha so'rov natijasi olamiz:
| id | name | brand | price | count |
|---|---|---|---|---|
| 2 | Stul | IKEA | 5.00 | 45 |
| 8 | Chiroq | LG | 15.00 | 100 |
Yaxshi, oxirgi ikkita qator yo'qoldi. Ana shunday ishlaydi. Bir oz g'alati, lekin, albatta, bunga ma'lum bir mantiq bor.
GO TO FULL VERSION