# SQL SELECT — ustunlarni tanlash

> SQL SELECT bilan jadvaldan ma'lumot olish: barcha ustunlarni olish (*), aniq ustunlarni tanlash, ustunlar tartibi va faqat kerakli ma'lumotni ajratish.

Manba: https://learncode.uz/sql/select/
Sana: 2026-06-11

[Muhitni sozlab, namuna bazani yukladingiz](https://learncode.uz/sql/sql-ornatish). Endi undan
ma'lumot olishni o'rganamiz. Buning asosiy buyrug'i — **`SELECT`**. Bu darsda
jadvaldan qaysi **ustunlar** kerakligini ko'rsatishni ko'ramiz.

Barcha misollar namuna bazadagi `mahsulotlar` jadvali ustida ishlaydi:

| 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 |

## SELECT * — barcha ustunlar

`*` (yulduzcha) belgisi "**barcha ustunlar**" degani. Butun jadvalni olish
uchun:

```sql
SELECT * FROM mahsulotlar;
```

Bu jadvalning barcha ustuni va barcha qatorini qaytaradi — yuqoridagi
sakkiz qatorning o'zi. `FROM` — qaysi jadvaldan olishni bildiradi.

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

```sql
SELECT * FROM mahsulotlar;
```

> **Atama**
>
> **Ustun** (column) — jadvalning tik bo'lagi, bitta xususiyat: `nom`, `narx`,
> `soni`. **Qator** (row) — bitta yozuv, ya'ni bitta mahsulot haqidagi to'liq
> ma'lumot. `SELECT` ustunlarni tanlaydi, keyingi darsdagi `WHERE` esa
> qatorlarni.

## Aniq ustunlarni tanlash

Ko'pincha barcha ustun kerak emas. `*` o'rniga ustun nomlarini vergul bilan
yozsangiz, faqat o'shalar qaytadi:

```sql
SELECT nom, narx FROM mahsulotlar;
```

Natija — faqat ikki ustun:

| nom | narx |
|---|---|
| Olma | 8000 |
| Non | 3000 |
| Sut | 12000 |
| Choy | 15000 |
| Banan | 14000 |
| Qatiq | 9000 |
| Suv | 4000 |
| Guruch | 18000 |

Qatorlar soni o'zgarmadi (hali hammasi) — faqat ustunlar qisqardi.

## Ustunlar tartibi

Ustunlarni qaysi tartibda yozsangiz, natijada ham shu tartibda chiqadi —
jadvaldagi asl tartib shart emas:

```sql
SELECT narx, nom FROM mahsulotlar;
```

Natija — endi avval narx, keyin nom:

| narx | nom |
|---|---|
| 8000 | Olma |
| 3000 | Non |
| ... | ... |

## Nega aniq ustun tanlanadi

`SELECT *` qulay, lekin amalda ko'pincha aniq ustunlar yoziladi. Sabablari:

- **Tezlik** — katta jadvalda keraksiz ustunlarni tashish so'rovni sekinlashtiradi.
- **Aniqlik** — natijada faqat kerakli ma'lumot bo'ladi, ko'z chalg'imaydi.
- **Barqarorlik** — jadvalga yangi ustun qo'shilsa, `*` uni ham tortadi;
  aniq ro'yxat esa o'zgarmaydi.

> **Yodda tuting**
>
> SQL kalit so'zlari (`SELECT`, `FROM`) katta-kichik harfga sezgir emas:
> `select` ham ishlaydi. Lekin an'ana bo'yicha ular **katta harfda** yoziladi
> — shunda kalit so'zlar jadval va ustun nomlaridan ajralib turadi va so'rov
> o'qishga qulay bo'ladi. Har so'rov oxirida **nuqtali vergul** (`;`) turadi.

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

```sql
SELECT nom, soni FROM mahsulotlar;
SELECT nom, turi FROM mahsulotlar;
```

Birinchisi har mahsulotning omboridagi sonini, ikkinchisi turini beradi.
Endi ustunlar tartibini almashtirib (`turi, nom`) natija qanday
o'zgarishini ko'ring — qiymatlar o'sha, faqat ustunlar joyi almashadi.
</Callout>

## Amaliy mashq

Ustunlarni tanlashni mashq qiling:

1. `mahsulotlar` dan faqat `nom` ustunini oling;
2. `nom` va `turi` ni birga oling;
3. ustunlar tartibini almashtiring: `turi, nom`;
4. `mijozlar` dan `ism` va `shahar` ni oling;
5. mavjud bo'lmagan ustun nomini yozing — qanday xato chiqadi?
6. `SELECT nom, narx, soni FROM mahsulotlar;` yozing va uni `SELECT *`
   natijasi bilan solishtiring — qaysi ustun tushib qoldi?

3-qadamda natija ustunlari tartibi o'zgardimi?

## Qisqacha xulosa

- `SELECT * FROM jadval` — jadvalning **barcha ustunini** oladi.
- `SELECT ustun1, ustun2 FROM jadval` — faqat **ko'rsatilgan ustunlarni**.
- Ustunlar natijada siz yozgan **tartibda** chiqadi.
- Aniq ustun tanlash tezroq, aniqroq va barqarorroq — `*` dan afzal.
- Kalit so'zlar katta harfda yoziladi; so'rov `;` bilan tugaydi.

Keyingi darsda [`WHERE`](https://learncode.uz/sql/where) bilan **qatorlarni** filtrlashni
ko'ramiz — ustunlarni emas, endi shartga mos qatorlarni ajratamiz.
