SQL ORDER BY va LIMIT — tartiblash
SELECT ma’lumotni oldi, WHERE uni filtrladi.
Lekin natija baza saqlagan tartibda chiqadi. Ko’pincha uni tartiblash
kerak bo’ladi: “eng arzondan qimmatga” yoki “alifbo bo’yicha”. Bu darsda
ORDER BY bilan tartiblashni va LIMIT bilan natijani cheklashni ko’ramiz.
mahsulotlar jadvali:
| id | nom | narx | soni | turi |
|---|---|---|---|---|
| 1 | Olma | 8000 | 50 | meva |
| 2 | Non | 3000 | 120 | non |
| 3 | Sut | 12000 | 30 | sut mahsuloti |
| 4 | Choy | 15000 | 40 | ichimlik |
| 5 | Banan | 14000 | 25 | meva |
| 6 | Qatiq | 9000 | 0 | sut mahsuloti |
| 7 | Suv | 4000 | 200 | ichimlik |
| 8 | Guruch | 18000 | 60 | don |
ORDER BY — tartiblash
ORDER BY dan keyin qaysi ustun bo’yicha tartiblashni yozasiz. Standart
holda o’sish tartibida (kichikdan kattaga):
SELECT nom, narx FROM mahsulotlar ORDER BY narx;
Natija — arzondan qimmatga:
| nom | narx |
|---|---|
| Non | 3000 |
| Suv | 4000 |
| Olma | 8000 |
| Qatiq | 9000 |
| Sut | 12000 |
| Banan | 14000 |
| Choy | 15000 |
| Guruch | 18000 |
DESC — kamayish tartibi
Kattadan kichikka kerak bo’lsa, ustun nomidan keyin DESC qo’shiladi:
SELECT nom, narx FROM mahsulotlar ORDER BY narx DESC;
O’zingiz ishga tushirib ko’ring — so’rovni tahrirlashingiz ham mumkin:
Natija boshida eng qimmati turadi: Guruch (18000), Choy (15000), Banan (14000) va hokazo.
Matnni tartiblash
Son kabi matn ham tartiblanadi — alifbo bo’yicha:
SELECT nom FROM mahsulotlar ORDER BY nom;
Natija alifbo tartibida: Banan, Choy, Guruch, Non, Olma, Qatiq, Sut, Suv.
DESC qo’shsangiz — teskari, Suv dan Banan gacha.
Bir nechta ustun bo’yicha
Ustunlarni vergul bilan sanasangiz, avval birinchi ustun bo’yicha, teng bo’lganlar ichida ikkinchi bo’yicha tartiblanadi:
SELECT nom, turi, narx FROM mahsulotlar ORDER BY turi, narx;
Bu avval turini alifbo bo’yicha, har tur ichida narxni o’sish bo’yicha tartiblaydi:
| nom | turi | narx |
|---|---|---|
| Guruch | don | 18000 |
| Suv | ichimlik | 4000 |
| Choy | ichimlik | 15000 |
| Olma | meva | 8000 |
| Banan | meva | 14000 |
| Non | non | 3000 |
| Qatiq | sut mahsuloti | 9000 |
| Sut | sut mahsuloti | 12000 |
Ichimlik ichida Suv (4000) Choy (15000) dan oldin — chunki ikkinchi mezon narx o’sish tartibida.
LIMIT — qatorlar sonini cheklash
Ba’zan faqat dastlabki bir nechta qator kerak — “eng qimmat 3 mahsulot”
kabi. Buning uchun LIMIT ishlatiladi:
SELECT nom, narx FROM mahsulotlar ORDER BY narx DESC LIMIT 3;
Natija — eng qimmat uchtasi:
| nom | narx |
|---|---|
| Guruch | 18000 |
| Choy | 15000 |
| Banan | 14000 |
Bu yerda buyruqlar birga ishladi: avval ORDER BY narx DESC tartibladi,
keyin LIMIT 3 faqat birinchi uchtasini oldi.
OFFSET — boshidan tashlab yuborish
OFFSET dastlabki bir nechta qatorni o’tkazib yuboradi. “4-o’rindan
boshlab” kabi — sahifalashda (pagination) qulay:
SELECT nom, narx FROM mahsulotlar ORDER BY narx DESC LIMIT 3 OFFSET 2;
Bu kamayish tartibida birinchi 2 tani (Guruch, Choy) tashlab, keyingi 3 tani beradi: Banan (14000), Sut (12000), Qatiq (9000).
Amaliy mashq
Tartiblang va cheklang:
- Mahsulotlarni narx bo’yicha o’sish tartibida chiqaring;
DESCqo’shib, kamayish tartibiga o’tkazing;LIMIT 3bilan faqat eng qimmat uchtasini oling;OFFSET 3qo’shib, keyingi uchtasini oling;- ikki ustun bo’yicha tartiblang: avval
turi, keyinnarx.
5-qadamda ustunlar tartibini almashtiring — natija o’zgardimi?
Qisqacha xulosa
ORDER BY ustun— natijani tartiblaydi; standartASC(o’sish).DESC— kamayish tartibi; matn alifbo bo’yicha tartiblanadi.ORDER BY a, b— avvala, teng bo’lsabbo’yicha.LIMIT n— dastlabkinqatorni oladi;OFFSET m— dastlabkimtani tashlaydi.- Tartib:
SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ....
Keyingi darsda INSERT bilan bazaga yangi ma’lumot
qo’shishni ko’ramiz — shu paytgacha faqat o’qidik, endi yozamiz.