JavaRush /Kurslar /All lectures for UZ purposes /Ma'lumotlarni ko'rsatish boshqaruvi

Ma'lumotlarni ko'rsatish boshqaruvi

All lectures for UZ purposes
Daraja, Dars
Mavjud

4.1 LIMIT

Agar sen kutayotgan SQL-so'roving juda ko'p ma'lumot qaytarishini xohlamasang, ularni oldindan cheklash mumkin. Chunki jadvalda minglab yoki hatto millionlab qatorlar bo'lishi mumkinku.

SQL yordamida so'rov natijasidagi qatorlar sonini osonlik bilan cheklash mumkin, buni LIMIT kalit so'zi yordamida qilsa bo'ladi. Bu kalit so'z SQL-so'rovining eng oxirida ishlatiladi va quyidagi ko'rinishda bo'ladi:


LIMIT son
        

Keling, product jadvaliga so'rov yozamiz, bu bizning do'konimizdagi mahsulotlar ro'yxatini o'z ichiga oladi. Lekin biz juda muvaffaqiyatli do'konga egamiz va ko'p mahsulotlar sotamiz, faqat dastlabki 10 qatorni olishni xohlaymiz. Mana bu so'rov qanday ko'rinishda bo'ladi:


SELECT * FROM product 
LIMIT 10
        

Natijada olamiz:

id name brand price count
1 Stol IKEA 20.00 15
2 Stul IKEA 5.00 45
3 Divan IKEA 80.00 10
4 Kovrak IKEA 75.00 10
5 Shkaf Bosch 125.00 15
6 Polka Polka 25.00 114
7 Televizor LG 350.00 4
8 Lampa LG 15.00 100
9 Komod IKEA 99.00 10
10 Plita Bosch 199.00 10

Endi faqat dastlabki 5 qatorni so'raymiz. Mana bu so'rov qanday ko'rinishda bo'ladi:


SELECT * FROM product 
LIMIT 5
        

Natijada olamiz:

id name brand price count
1 Stol IKEA 20.00 15
2 Stul IKEA 5.00 45
3 Divan IKEA 80.00 10
4 Kovrak IKEA 75.00 10
5 Shkaf Bosch 125.00 15

4.2 OFFSET

O'tgan safar biz javob qatorlarini cheklashni o'rgandik. Endi product jadvalidan minglab qatorlar o'rniga dastlabki 10 qatorni olib, foydalanuvchiga ko'rsatishimiz mumkin. Bu ajoyib. Lekin qanday qilib ikkinchi 10 qatorni ko'rsatsak bo'ladi? Yoki uchinchi?

Agar biz LIMIT 20, yoki LIMIT 30 deb yozsak, server 20 va 30 qatorni qaytarmaydi?

Aynan shu holat uchun SQL-da maxsus OFFSET kalit so'zi mavjud, uning yordami bilan javobda serverdan N qatorni o'tkazib yuborishni so'rashimiz mumkin. Bu kalit so'zi SQL-so'rovi oxirida (LIMITdan keyin) ishlatiladi va quyidagi ko'rinishda bo'ladi:


OFFSET son
        

Keling, product jadvaliga so'rov yozamiz va 11-dan 15-gacha bo'lgan yozuvlarni olishga urinib ko'ramiz. Boshqacha aytganda, biz serverdan 5 qatorni qaytarishni so'raymiz, lekin javobning birinchi 10 qatorini o'tkazib yuborishni so'raymiz. Mana bu so'rov qanday ko'rinishda bo'ladi:


SELECT * FROM product 
LIMIT 5
OFFSET 10
        

Natijada olamiz:

id name brand price count
11 Kreslo Bosch 44.00 8
12 Vazon SmartFlower 99.00 9
13 Podstavka IKEA 100.00 10

Server jami 3 qatorni qaytardi, demak jadvalimizda jami 13 qator bo'lgan. Server birinchi 10 qatorni o'tkazib yuborib, keyingisini qaytardi.

4.3 SELECT DISTINCT

Yana bir foydali kalit so'z – bu DISTINCT. Bu, jadvallarda bir xil yozuvlar bor va biz duplikatlarni olib tashlamoqchi bo'lsak ishlatiladi.

Bizning jadvalda bir xil yozuvlar qanday paydo bo'lishi mumkin? Jadvalda duplikatlar bo'lmasligi mumkin, lekin so'rov natijasida – osonlik bilan. Keling, sotilayotgan barcha mahsulotlar brendlarini qaytaradigan so'rov yozamiz. Mana bu so'rov qanday ko'rinishda bo'ladi:


SELECT brand FROM product 
        

Natijada olamiz:

brand
IKEA
IKEA
IKEA
IKEA
Bosch
Bosch
LG
LG
IKEA
Bosch
Bosch
SmartFlower
IKEA

Oson ko'rinib turibdi, bu jadvalda qatorlar takroriy. Takrorlarning yo'qolishi uchun DISTINCT kalit so'zidan foydalanish kerak. Mana bu to'g'ri yozilgan so'rov qanday ko'rinishda bo'ladi:


SELECT DISTINCT brand 
FROM product 
        

Natijada olamiz:

brand
IKEA
Bosch
LG
SmartFlower

Ko'p yaxshiroq, shunday emasmi? ;)

4.4 ORDER BY

Va nihoyat biz sarlavhagacha yetib bordik. So'rov natijalarini tartiblash uchun ORDER BY kalit so'zidan foydalanish kerak. Texnik jihatdan – bu ikkita so'z, lekin muhim emas. Ikkita so'z, lekin bitta operator.

Buni WHERE kalit so'zidan keyin, lekin LIMIT va OFFSETdan oldin yozish kerak. Agar sen ORDER BYni LIMITdan keyin yozsang, SQL-server senga xato qaytaradi.

Umumiy ko'rinishda bu operator quyidagicha:


ORDER BY kolonam tartib

Kolonam – jadvalda yoki natijada tartiblanadigan kolona nomi. Tartib – tartib usuli.

Tartibning uchta ko'rinishi bo'lishi mumkin:

  • ASC (Ascending) – o'sish tartibida;
  • DESC (Descending) – kamayish tartibida;
  • Ko'rsatilmagan – ASC ishlatiladi

Keling, bu o'sish tartibida mahsulot ro'yxatini qaytaradigan so'rov yozamiz. Mana bu so'rov qanday ko'rinishda bo'ladi:


SELECT * FROM product 
ORDER BY price ASC
LIMIT 10
        

Natijada olamiz:

id name brand price count
2 Stul IKEA 5.00 45
8 Lampa LG 15.00 100
1 Stol IKEA 20.00 15
6 Polka Bosch 25.00 114
11 Kreslo Bosch 44.00 8
4 Kovrak IKEA 75.00 10
3 Divan IKEA 80.00 10
12 Vazon SmartFlower 99.00 9
9 Komod IKEA 99.00 10
13 Podstavka IKEA 100.00 10

Ayni natijani tartibni ko'rsatmasdan ham olamiz – ASC so'zini qoldiramiz.

4.5 ORDER BY bir nechta kolonka bo'yicha

ORDER BY operatori natijalarni bir nechta kolonka bo'yicha tartiblash imkoniyatini beradi. Bu, birinchi kolonka ichida juda ko'p takrorlanmalar bo'lganida juda foydali bo'ladi. Bu operatorning umumiy ko'rinishi quyidagicha:


ORDER BY kolonam1 tartib1, kolonam2 tartib2, kolonam3 tartib3

        

Boshqacha aytganda, agar birinchi kolonka bo'yicha tartibdan keyin bir nechta bir xil qiymatlar yonma-yon tursa, ularni ikkinchi kolonka bo'yicha tartiblaydi va hokazo.

Keling, mahsulotlarimizni brend bo'yicha tartiblaydigan so'rov yozamiz va bir xil brendlar uchun ularni kamayish tartibida tartiblaymiz. Mana bu so'rov qanday ko'rinishda bo'ladi:


SELECT * FROM product 
ORDER BY brand ASC, count
DESC
        

Natijada olamiz:

id name brand price count
6 Polka Bosch 25.00 114
5 Shkaf Bosch 125.00 15
10 Plita Bosch 199.00 10
11 Kreslo Bosch 44.00 8
2 Stul IKEA 5.00 45
1 Stol IKEA 20.00 15
9 Komod IKEA 99.00 10
13 Podstavka IKEA 100.00 10
4 Kovrak IKEA 75.00 10
3 Divan IKEA 80.00 10
8 Lampa LG 15.00 100
7 Televizor LG 350.00 4
12 Vazon SmartFlower 99.00 9

Jadvallarni diqqat bilan ko'ring – qatorlar brend nomiga ko'ra (alifbo bo'yicha) tartiblangan va bir xil brend nomiga ega qatorlar mahsulotlar miqdoriga qarab kamayuvchi tartibda joylashtirilgan (so'nggi kolona).

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION