Ba'zan jadvalda biror qator uchun qiymat umuman mavjud bo'lmaydi. Masalan, mahsulot kiritilganda uning kategoriyasi hali belgilanmagan bo'lishi mumkin. Bunday "qiymat yo'q" holatini SQL da NULL so'zi bildiradi.
NULL — bu nol (0) ham emas, bo'sh matn ('') ham emas. U qiymat yo'qligini, ya'ni "noma'lum" yoki "ko'rsatilmagan" degan ma'noni anglatadi.
Bu darsda quyidagi mahsulotlar jadvalidan foydalanamiz. E'tibor bering, ba'zi mahsulotlarning kategoriyasi yo'q (ya'ni NULL):
| id | nomi | kategoriya | narx |
|---|---|---|---|
| 1 | Telefon | Elektronika | 5000000 |
| 2 | Kitob | Kitoblar | 50000 |
| 3 | Sumka | (NULL) | 150000 |
| 4 | Qalam | (NULL) | 3000 |
Bu yerda 3- va 4-qatorlarning kategoriya ustunida hech qanday qiymat yo'q — ular NULL.
Qiymati NULL bo'lgan qatorlarni topish uchun IS NULL dan foydalanamiz. U WHERE shartida yoziladi.
Kategoriyasi ko'rsatilmagan (NULL) mahsulotlarni topamiz:
SELECT nomi FROM mahsulotlar WHERE kategoriya IS NULL;Natija:
Sumka
QalamIS NULL faqat o'sha qiymati yo'q bo'lgan qatorlarni qaytaradi.
Aksincha, qiymati mavjud bo'lgan qatorlarni topish uchun IS NOT NULL dan foydalanamiz.
Kategoriyasi ko'rsatilgan mahsulotlarni topamiz:
SELECT nomi, kategoriya FROM mahsulotlar WHERE kategoriya IS NOT NULL;Natija:
Telefon|Elektronika
Kitob|KitoblarBu yerda kategoriyasi NULL bo'lgan Sumka va Qalam natijaga tushmadi, chunki ularning kategoriyasi yo'q.
= NULL ishlamaydi?Bu — eng muhim qoidalardan biri. Oldingi darslarda biz tenglikni = bilan tekshirgan edik. Lekin NULL bilan bu usul ishlamaydi:
SELECT nomi FROM mahsulotlar WHERE kategoriya = NULL;Natija:
undefinedSo'rov hech narsa qaytarmadi — hech qanday xato bo'lmadi, lekin natija bo'sh.
Buning sababi shundaki, NULL "noma'lum qiymat" degani. Bir noma'lum qiymat ikkinchi noma'lum qiymatga teng yoki teng emasligini ayta olmaymiz — javob har doim "noma'lum" bo'ladi. Shuning uchun = NULL shart hech qachon "to'g'ri" bo'lmaydi va qator natijaga tushmaydi.
Muhim:
NULLni tekshirish uchun doimoIS NULLyokiIS NOT NULLishlating.= NULLva<> NULLhech qachon ishlamaydi.
IS NULL ni boshqa kalit so'zlar bilan birga ishlatish mumkin. Masalan, kategoriyasi yo'q mahsulotlarni nomi bo'yicha alifbo tartibida chiqaramiz:
SELECT nomi FROM mahsulotlar WHERE kategoriya IS NULL ORDER BY nomi;Natija:
Qalam
SumkaBu yerda avval WHERE kategoriyasi NULL bo'lgan qatorlarni tanladi, so'ng ORDER BY ularni nomi bo'yicha tartibladi.
Eslatma: Bir nechta qator qaytsa, tartib aniq bo'lishi uchun doimo
ORDER BYqo'shing.
Pastdagi kod oynasida mahsulotlar jadvali allaqachon yaratilgan va to'ldirilgan. Ba'zi mahsulotlarning kategoriyasi NULL. Sizning vazifangiz — kategoriyasi ko'rsatilmagan (NULL) mahsulotlarning nomini alifbo tartibida chiqaruvchi SELECT so'rovini yozish.