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 –
ASCishlatiladi
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).
GO TO FULL VERSION