Bu modul bazadan ma’lumot olishga bag’ishlangan: qaysi ustunlarni tanlash, qatorlarni qanday filtrlash, tartiblash, sahifalash va guruhlab hisoblash.
Barcha misollar quyidagi talabalar jadvaliga tayanadi:
| id | ism | guruh | ball | shahar |
|---|---|---|---|---|
| 1 | Aziz | 101 | 85 | Toshkent |
| 2 | Malika | 102 | 92 | Samarqand |
| 3 | Bobur | 101 | 74 | Toshkent |
| 4 | Nilufar | 103 | NULL | Buxoro |
SELECT — ma’lumotni tanlash
SELECT bazadan ma’lumot olishning asosiy buyrug’i: qaysi ustunlar kerakligini yozasiz, FROM esa qaysi jadvaldan olinishini ko’rsatadi.
SELECT ism, ball FROM talabalar;
Natija:
ism | ball
---------+------
Aziz | 85
Malika | 92
Bobur | 74
Nilufar | NULL
SELECT * barcha ustunlarni qaytaradi. Bu tez yozish uchun qulay, lekin haqiqiy loyihada kerakli ustunlarni nomma-nom sanash afzal: so’rov kamroq ma’lumot uzatadi va jadvalga yangi ustun qo’shilganda natija kutilmaganda o’zgarib ketmaydi.
Ustunga o’qishga qulay nom berish mumkin:
SELECT ism AS talaba, ball AS baho FROM talabalar;
Bu yerda AS faqat natijadagi sarlavhani o’zgartiradi, jadvaldagi ustun nomi o’z holicha qoladi.
Filtrlash tushunchasi
Filtrlash — natijadan faqat shartga mos qatorlarni ajratib olish. Baza avval jadvaldagi qatorlarni birma-bir ko’rib chiqadi, shartni tekshiradi va faqat shart rost bo’lganlarini qaytaradi. Filtr WHERE bo’limida yoziladi va u SELECTdan keyin turadi, lekin bajarilishda SELECTdan oldin ishlaydi — shuning uchun filtrlash natija hajmini keskin kamaytiradi va so’rovni tezlashtiradi.
WHERE — shart yozish
SELECT ism, ball FROM talabalar
WHERE ball > 80;
Natija:
ism | ball
--------+------
Aziz | 85
Malika | 92
Shartlarda ishlatiladigan operatorlar:
| Operator | Ma’nosi | Misol |
|---|---|---|
= |
Teng | guruh = '101' |
<> |
Teng emas | shahar <> 'Toshkent' |
> < >= <= |
Taqqoslash | ball >= 60 |
BETWEEN |
Oraliqda | ball BETWEEN 60 AND 90 |
IN |
Ro’yxatdagilardan biri | guruh IN ('101','102') |
LIKE |
Namunaga mos | ism LIKE 'A%' |
Bir nechta shart AND va OR bilan birlashtiriladi. Ular aralashganda qavs qo’ying: AND ORdan oldin bajariladi, shuning uchun qavssiz shart siz kutgan ma’noni bermasligi mumkin.
SELECT ism FROM talabalar
WHERE guruh = '101' AND ball > 80;
Yana bir keng tarqalgan xato — matnni tirnoqsiz yozish: WHERE shahar = Toshkent so’rovida baza Toshkentni ustun nomi deb o’qiydi va xato beradi.
Tartiblash
ORDER BY natijani ustun bo’yicha saralaydi: ASC — o’sish tartibida (standart holat), DESC — kamayish tartibida.
SELECT ism, ball FROM talabalar
ORDER BY ball DESC;
Natija:
ism | ball
---------+------
Malika | 92
Aziz | 85
Bobur | 74
Nilufar | NULL
Bir nechta ustun bo’yicha tartiblash ham mumkin — ORDER BY guruh, ball DESC avval guruhlarni, har bir guruh ichida esa ballarni saralaydi. ORDER BYsiz so’rov qatorlar tartibini kafolatlamaydi: bugun to’g’ri kelgan tartib ertaga o’zgarishi mumkin.
NULL bilan ishlash
NULL — nol ham, bo’sh matn ham emas. U "qiymat noma’lum" degani. Shu sababli NULL bilan taqqoslash hech qachon rost bo’lmaydi:
SELECT ism FROM talabalar WHERE ball = NULL;
Natija:
(0 rows)
To’g’ri usul — IS NULL va IS NOT NULL:
SELECT ism FROM talabalar WHERE ball IS NULL;
Natija:
ism
---------
Nilufar
NULL arifmetikaga ham yuqadi: ball + 10 noma’lum qiymat uchun yana NULL qaytaradi. Agar bo’sh qiymat o’rniga biror narsa qo’ymoqchi bo’lsangiz, COALESCE(ball, 0) funksiyasidan foydalaning — u birinchi bo’sh bo’lmagan qiymatni qaytaradi.
LIMIT va OFFSET
LIMIT natijadagi qatorlar sonini cheklaydi, OFFSET esa boshidan bir necha qatorni tashlab o’tadi. Ikkalasi birgalikda sahifalashning asosi bo’lib xizmat qiladi.
SELECT ism, ball FROM talabalar
ORDER BY ball DESC
LIMIT 2 OFFSET 2;
Natija:
ism | ball
---------+------
Bobur | 74
Nilufar | NULL
| So’rov | Nima qaytadi |
|---|---|
LIMIT 10 |
Birinchi 10 qator |
LIMIT 10 OFFSET 10 |
11-20-qatorlar (2-sahifa) |
LIMIT 10 OFFSET 20 |
21-30-qatorlar (3-sahifa) |
Muhim shart: LIMIT ORDER BY bilan birga ishlatilishi kerak. Tartibsiz so’rovda "birinchi 10 qator" tushunchasi mavjud emas va sahifadan sahifaga o’tganda ayni bir yozuv ikki marta chiqib qolishi mumkin.
Ma’lumotlarni guruhlash
GROUP BY qatorlarni umumiy belgisi bo’yicha guruhlarga bo’ladi va har bir guruh uchun bitta natija qatorini qaytaradi. Guruh ustida agregat funksiyalar hisoblanadi:
| Funksiya | Nima qiladi |
|---|---|
COUNT(*) |
Qatorlar sonini sanaydi |
SUM(ustun) |
Yig’indi |
AVG(ustun) |
O’rtacha qiymat |
MIN / MAX |
Eng kichik / eng katta |
SELECT guruh, COUNT(*) AS talabalar_soni, AVG(ball) AS ortacha
FROM talabalar
GROUP BY guruh;
Natija:
guruh | talabalar_soni | ortacha
-------+----------------+---------
101 | 2 | 79.5
102 | 1 | 92.0
103 | 1 | NULL
Agregat funksiyalar NULL qiymatlarni hisobga olmaydi: AVG(ball) faqat mavjud ballarni o’rtachalaydi, COUNT(ball) esa COUNT(*)dan kam bo’lishi mumkin.
Boshlovchilarning odatiy xatosi — SELECTga guruhlanmagan ustunni qo’shish. SELECT ism, guruh, COUNT(*) ... GROUP BY guruh so’rovi xato beradi, chunki bitta guruhda bir nechta ism bor va baza qaysinisini ko’rsatishni bilmaydi. Qoida oddiy: SELECTda faqat GROUP BYdagi ustunlar va agregat funksiyalar bo’lishi mumkin.
Amaliyot
talabalarjadvalidan faqat ism va shaharni chiqaring, ustun sarlavhalariniASbilan o’zgartiring.- Balli 80 dan yuqori va Toshkentdan bo’lgan talabalarni toping.
- Bali kiritilmagan (
NULL) talabalar ro’yxatini chiqaring, so’ng ularning balliniCOALESCEyordamida 0 sifatida ko’rsating. - Talabalarni ball bo’yicha kamayish tartibida saralab, ikkinchi sahifani (har sahifada 2 tadan) chiqaring.
- Har bir shahar bo’yicha talabalar sonini va o’rtacha ballni hisoblang, natijani talabalar soni bo’yicha kamayish tartibida saralang.
Modul testi shu mavzularni — SELECT, WHERE, NULL, LIMIT/OFFSET va GROUP BY — qamrab oladi.