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:

SQL · namuna baza

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:

  1. mijozlar dan barcha yosh qiymatlarini chiqaring — NULL ni toping;
  2. WHERE yosh IS NULL bilan faqat o’shani ajrating;
  3. WHERE yosh = NULL deb yozib ko’ring — natija nima?
  4. DISTINCT turi bilan takrorsiz toifalarni oling;
  5. COUNT(*) va COUNT(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.
  • NULL ni = bilan tekshirib bo’lmaydi — IS NULL va IS NOT NULL ishlatiladi.
  • NULL qatnashgan taqqoslash “noma’lum” bo’ladi: WHERE yosh > 30 noma’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.

Bu dars foydali bo'ldimi?

marta ko'rildi