NULL Maxsus qiymati

All lectures for UZ purposes
Daraja, Dars
Mavjud

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.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION