SQL'da NULL va DISTINCT
Bazada ba’zi katakchalar bo’sh bo’lishi mumkin — ma’lumot hali noma’lum
yoki kiritilmagan. SQL buni NULL deb ataydi va u bilan ishlash o’ziga
xos. Shu darsda NULL ni va takror qiymatlarni olib tashlaydigan
DISTINCT ni ko’ramiz. Endi mijozlar jadvalidan foydalanamiz:
| id | ism | shahar | yosh |
|---|---|---|---|
| 1 | Aziz | Toshkent | 28 |
| 2 | Dilnoza | Samarqand | 34 |
| 3 | Bobur | Toshkent | 22 |
| 4 | Malika | Buxoro | (bo’sh) |
Malikaning yoshi kiritilmagan — o’sha katak NULL.
NULL nima
NULL — “qiymat yo’q” degani. Bu 0 ham, bo’sh matn ('') ham emas —
u shunchaki “noma’lum”. Aziz yoshi 28, Malikaniki esa NULL: biz uni
bilmaymiz.
NULL ni tekshirish: IS NULL
NULL ni to’g’ridan-to’g’ri = bilan tekshirib bo’lmaydi — WHERE yosh = NULL ishlamaydi
(hech narsa qaytarmaydi). Buning o’rniga IS NULL ishlatiladi:
SELECT ism FROM mijozlar WHERE yosh IS NULL;
Natija — yoshi kiritilmaganlar:
| ism |
|---|
| Malika |
Aksincha, qiymati bor qatorlar uchun IS NOT NULL:
SELECT ism FROM mijozlar WHERE yosh IS NOT NULL;
Natija — Aziz, Dilnoza, Bobur (Malika tushib qoldi).
DISTINCT — takrorlarni olib tashlash
Ustunda bir xil qiymat bir necha marta uchrashi mumkin. Faqat noyob
qiymatlar kerak bo’lsa, SELECT dan keyin DISTINCT yoziladi. Mijozlar
qaysi shaharlardan ekanini bilaylik:
SELECT DISTINCT shahar FROM mijozlar;
Natija — har shahar bir marta (Toshkent ikki mijozda bor edi, bir marta chiqadi):
| shahar |
|---|
| Toshkent |
| Samarqand |
| Buxoro |
DISTINCT siz bu so’rov to’rt qator (Toshkent ikki marta) qaytarardi.
Bu “bazada qanday shaharlar bor?” degan savolga toza javob.
mahsulotlarda DISTINCT
Xuddi shunday, mahsulotlar jadvalida qanday turlar borligini bilish:
SELECT DISTINCT turi FROM mahsulotlar;
O’zingiz ishga tushirib ko’ring — so’rovni tahrirlashingiz ham mumkin:
Natija — har turdan bittadan: meva, non, sut mahsuloti, ichimlik, don. Sakkiz mahsulot ichida beshta har xil tur bor ekan.
Amaliy mashq
NULL va takrorlar bilan ishlang:
mijozlardan barchayoshqiymatlarini chiqaring — NULL ni toping;WHERE yosh IS NULLbilan faqat o’shani ajrating;WHERE yosh = NULLdeb yozib ko’ring — natija nima?DISTINCT turibilan takrorsiz toifalarni oling;COUNT(*)vaCOUNT(yosh)ni solishtiring.
3-qadam nega ishlamadi va 5-qadamdagi ikki son nega har xil?
Qisqacha xulosa
NULL— “qiymat yo’q/noma’lum”; 0 yoki bo’sh matn emas.NULLni=bilan tekshirib bo’lmaydi —IS NULLvaIS NOT NULLishlatiladi.NULLqatnashgan taqqoslash “noma’lum” bo’ladi:WHERE yosh > 30noma’lum yoshlarni olmaydi.SELECT DISTINCT ustun— takror qiymatlarni olib tashlab, faqat noyoblarini beradi.DISTINCT“bazada qanday qiymatlar bor?” degan savolga qulay.
Keyingi darsda ma’lumot tiplari — jadval ustunlari qanday turdagi ma’lumot (son, matn, sana) saqlashini ko’ramiz.