Barcha kurslar Yo'nalishlar Reyting Kirish Ro'yxatdan o'tish

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

  1. talabalar jadvalidan faqat ism va shaharni chiqaring, ustun sarlavhalarini AS bilan o’zgartiring.
  2. Balli 80 dan yuqori va Toshkentdan bo’lgan talabalarni toping.
  3. Bali kiritilmagan (NULL) talabalar ro’yxatini chiqaring, so’ng ularning ballini COALESCE yordamida 0 sifatida ko’rsating.
  4. Talabalarni ball bo’yicha kamayish tartibida saralab, ikkinchi sahifani (har sahifada 2 tadan) chiqaring.
  5. 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.

SQL so’rovlari — konspekt

SQL so'rovlari: tanlash va filtrlash Maqola

SELECT bilan ma’lumot olish, WHERE orqali filtrlash, ORDER BY bilan tartiblash, NULL, LIMIT va OFFSET hamda GROUP BY bilan guruhlash — so’rovlar moduli konspekti.

Eslatma yozish uchun saytga kiring.

Resurslar hozircha qo'shilmagan

O'qituvchi dars uchun qo'shimcha materiallarni qo'shganida shu yerda paydo bo'ladi.

Savol berish uchun saytga kiring.

Hozircha savollar yo'q

Bu dars yuzasidan birinchi savolni siz bering.