Oldingi darslarda SELECT so'rovi qatorlarni qaytarganini ko'rdik. Lekin ma'lumotlar bazasi qatorlarni istalgan tartibda qaytarishi mumkin — bugun bir xil, ertaga boshqacha. Agar natija aniq bir tartibda bo'lishini istasak (masalan, eng arzon mahsulotdan eng qimmatigacha), buni o'zimiz aytishimiz kerak.
Mana shu tartiblash ishini ORDER BY kalit so'zi bajaradi.
Misollarni mahsulotlar jadvalida ko'rib chiqamiz:
| id | nomi | kategoriya | narx | ombor |
|---|---|---|---|---|
| 1 | Telefon | Elektronika | 5000000 | 10 |
| 2 | Noutbuk | Elektronika | 12000000 | 5 |
| 3 | Quloqchin | Elektronika | 300000 | 50 |
| 4 | Kitob | Kitoblar | 50000 | 100 |
| 5 | Daftar | Kanstovar | 8000 | 200 |
| 6 | Ruchka | Kanstovar | 3000 | 500 |
| 7 | Stol | Mebel | 800000 | 15 |
| 8 | Stul | Mebel | 250000 | 40 |
ORDER BY so'rovning oxirida, FROM (va agar bo'lsa, WHERE) dan keyin yoziladi. Undan keyin qaysi ustun bo'yicha tartiblashni aytamiz.
Mahsulotlarni narx bo'yicha tartiblab chiqaramiz:
SELECT nomi, narx FROM mahsulotlar ORDER BY narx;Natija narx kichikdan kattaga qarab tartiblanadi:
Ruchka|3000
Daftar|8000
Kitob|50000
Stul|250000
Quloqchin|300000
Stol|800000
Telefon|5000000
Noutbuk|12000000Bunda biz narx ustunini chiqarib, aynan o'sha ustun bo'yicha tartibladik. Lekin tartiblash uchun ustun natijada ko'rinishi shart emas — masalan, ombor bo'yicha tartiblab, faqat nomi ni chiqarish mumkin.
Eslatma: Matn ustunlari (masalan,
nomiyokikategoriya) bo'yicha tartiblansa, alifbo tartibida (A dan Z gacha) chiqadi.
ORDER BY ikki yo'nalishda tartiblay oladi:
| Kalit so'z | Ma'nosi | Yo'nalish |
|---|---|---|
ASC | ascending (o'sish) | kichikdan kattaga |
DESC | descending (kamayish) | kattadan kichikka |
Yuqoridagi misolda biz hech narsa yozmadik — chunki sukut bo'yicha (default) tartiblash ASC, ya'ni o'sish tartibida bo'ladi. Quyidagi ikki so'rov bir xil natija beradi:
SELECT nomi, narx FROM mahsulotlar ORDER BY narx;
SELECT nomi, narx FROM mahsulotlar ORDER BY narx ASC;Eng qimmat mahsulotni birinchi qilib ko'rsatish uchun kamayish tartibi — DESC kerak:
SELECT nomi, narx FROM mahsulotlar ORDER BY narx DESC;Natija narx kattadan kichikka qarab chiqadi:
Noutbuk|12000000
Telefon|5000000
Stol|800000
Quloqchin|300000
Stul|250000
Kitob|50000
Daftar|8000
Ruchka|3000Muhim:
DESCni yozishni unutsangiz, tartib avtomatikASC(o'sish) bo'lib qoladi. Kamayish kerak bo'lsa, doimoDESCni aniq yozing.
Ba'zan bitta ustun yetarli emas. Masalan, mahsulotlarni avval kategoriya bo'yicha guruhlab, har bir kategoriya ichida esa narx bo'yicha tartiblamoqchimiz.
Buning uchun ORDER BY dan keyin ustunlarni vergul bilan sanab chiqamiz:
SELECT nomi, kategoriya, narx FROM mahsulotlar ORDER BY kategoriya ASC, narx ASC;Bu yerda tartib muhim: avval kategoriya bo'yicha tartiblanadi. Kategoriyasi bir xil bo'lgan qatorlar esa o'zaro narx bo'yicha tartiblanadi.
Natija:
Quloqchin|Elektronika|300000
Telefon|Elektronika|5000000
Noutbuk|Elektronika|12000000
Ruchka|Kanstovar|3000
Daftar|Kanstovar|8000
Kitob|Kitoblar|50000
Stul|Mebel|250000
Stol|Mebel|800000Demak, birinchi ustun asosiy tartibni belgilaydi, keyingi ustun esa faqat tenglikni hal qiladi (ya'ni birinchi ustuni bir xil bo'lganlarni ajratadi).
Har bir ustun uchun yo'nalishni alohida belgilash mumkin. Masalan, kategoriya bo'yicha o'sish (ASC), narx bo'yicha esa kamayish (DESC):
SELECT nomi, kategoriya, narx FROM mahsulotlar ORDER BY kategoriya ASC, narx DESC;Muhim: Bir nechta ustun yozsangiz, har biriga o'z
ASC/DESCsi tegishli bo'ladi.narx DESCfaqatnarxga ta'sir qiladi, undan oldingikategoriyaga emas.
Pastdagi kod oynasida mahsulotlar jadvali allaqachon yaratilgan va to'ldirilgan. Sizning vazifangiz — mahsulotlarni avval kategoriya bo'yicha o'sish (alifbo), so'ng narx bo'yicha kamayish tartibida tartiblab, ularning nomi, kategoriya va narxini chiqaruvchi SELECT so'rovini yozish.