# SQL ORDER BY va LIMIT — tartiblash

> SQL ORDER BY bilan natijani tartiblash (ASC va DESC), bir nechta ustun bo'yicha saralash hamda LIMIT va OFFSET bilan qatorlar sonini cheklash.

Manba: https://learncode.uz/sql/order-by-limit/
Sana: 2026-06-11

[SELECT](https://learncode.uz/sql/select) ma'lumotni oldi, [WHERE](https://learncode.uz/sql/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):

```sql
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:

```sql
SELECT nom, narx FROM mahsulotlar ORDER BY narx DESC;
```

O'zingiz ishga tushirib ko'ring — so'rovni tahrirlashingiz ham mumkin:

```sql
SELECT nom, narx FROM mahsulotlar ORDER BY narx DESC;
```

Natija boshida eng qimmati turadi: Guruch (18000), Choy (15000), Banan
(14000) va hokazo.

> **Atama**
>
> **`ASC`** (ascending) — o'sish, **`DESC`** (descending) — kamayish tartibi.
> `ORDER BY` standart holda `ASC` ishlatadi, shuning uchun uni yozish shart
> emas. Faqat kamayish kerak bo'lganda `DESC` qo'shiladi.

## Matnni tartiblash

Son kabi matn ham tartiblanadi — **alifbo** bo'yicha:

```sql
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:

```sql
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:

```sql
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:

```sql
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).

> **Yodda tuting**
>
> So'rov qismlari **aniq tartibda** yoziladi:
> `SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...`. Bu ketma-ketlikni
> buzsangiz, baza xato beradi. `ORDER BY` doim `WHERE` dan keyin, `LIMIT` esa
> eng oxirida turadi.

<Callout type="example" title="O'zingizni sinab ko'ring">
Namuna bazangizda sinang:

```sql
SELECT nom, soni FROM mahsulotlar ORDER BY soni DESC LIMIT 1;
SELECT nom, narx FROM mahsulotlar WHERE turi = 'meva' ORDER BY narx;
```

Birinchisi ombori eng to'la mahsulotni (Suv, 200) beradi. Ikkinchisi
faqat mevalarni narx bo'yicha tartiblaydi. `WHERE` va `ORDER BY` birga
ishlayotganiga e'tibor bering.
</Callout>

## Amaliy mashq

Tartiblang va cheklang:

1. Mahsulotlarni narx bo'yicha o'sish tartibida chiqaring;
2. `DESC` qo'shib, kamayish tartibiga o'tkazing;
3. `LIMIT 3` bilan faqat eng qimmat uchtasini oling;
4. `OFFSET 3` qo'shib, keyingi uchtasini oling;
5. ikki ustun bo'yicha tartiblang: avval `turi`, keyin `narx`;
6. `ORDER BY soni DESC LIMIT 1` bilan omborda eng ko'p turgan mahsulotni
   toping — qaysi tovar chiqdi?

5-qadamda ustunlar tartibini almashtiring — natija o'zgardimi?

## Qisqacha xulosa

- `ORDER BY ustun` — natijani tartiblaydi; standart `ASC` (o'sish).
- `DESC` — kamayish tartibi; matn alifbo bo'yicha tartiblanadi.
- `ORDER BY a, b` — avval `a`, teng bo'lsa `b` bo'yicha.
- `LIMIT n` — dastlabki `n` qatorni oladi; `OFFSET m` — dastlabki `m` tani
  tashlaydi.
- Tartib: `SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...`.

Keyingi darsda [`INSERT`](https://learncode.uz/sql/insert) bilan bazaga **yangi ma'lumot
qo'shish**ni ko'ramiz — shu paytgacha faqat o'qidik, endi yozamiz.
