# SQL ma'lumot tiplari

> SQL ustunlarining ma'lumot tiplari: butun son (INTEGER), kasr son (REAL), matn (TEXT) va sana. SQLite va boshqa bazalardagi tiplar hamda ular nega muhim.

Manba: https://learncode.uz/sql/malumot-tiplari/
Sana: 2026-06-13

Jadvaldagi har bir ustun ma'lum **turdagi** ma'lumot saqlaydi: `narx` — son,
`nom` — matn, `sana` — sana. Ustun yaratilganda uning **tipi** belgilanadi.
Bu darsda asosiy ma'lumot tiplarini va ular nega kerakligini ko'ramiz.

## Nega ustunga tip kerak

Tip — ustunga qanday ma'lumot tushishini belgilaydi. Bu ikki narsani beradi:

- **To'g'rilik** — `narx` ustuni son deb belgilangan bo'lsa, unga matn
  tushib qolmaydi.
- **To'g'ri amallar** — sonni qo'shish/taqqoslash mumkin, sana bo'yicha
  tartiblanadi, matn esa alifbo bo'yicha. Tip baza qaysi amalni qo'llashini
  biladi.

## Asosiy tiplar (SQLite)

Namuna bazamiz SQLite'da. Uning asosiy tiplari:

| Tip | Nima saqlaydi | Namuna baza ustuni |
|---|---|---|
| `INTEGER` | butun son | `id`, `narx`, `soni`, `yosh` |
| `REAL` | kasr son | *(masalan chegirmali narx: 7200.5)* |
| `TEXT` | matn | `nom`, `turi`, `ism`, `shahar`, `sana` |
| `BLOB` | fayl/tasvir (xom baytlar) | *(namunada yo'q)* |

Har tipdagi ustun qo'shimcha `NULL` ([qiymat yo'q](https://learncode.uz/sql/null-va-distinct))
holatida ham bo'lishi mumkin.

## CREATE TABLE da tip ko'rsatiladi

Jadval yaratilganda har ustun nomidan keyin tipi yoziladi. Namuna
bazadagi `mahsulotlar` jadvali shunday tuzilgan:

```sql
CREATE TABLE mahsulotlar (
  id    INTEGER PRIMARY KEY,
  nom   TEXT    NOT NULL,
  narx  INTEGER NOT NULL,
  soni  INTEGER NOT NULL,
  turi  TEXT
);
```

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

```sql
SELECT nom, typeof(nom) AS nom_turi, narx, typeof(narx) AS narx_turi
FROM mahsulotlar LIMIT 3;
```

`PRIMARY KEY` — bu ustun har qatorning noyob kaliti (id). `NOT NULL` —
ustun bo'sh bo'la olmaydi, qiymat majburiy.

> **Atama**
>
> **Sxema** (schema) — bazaning "chizmasi": qanday jadvallar bor, har birida
> qanday ustunlar va ularning tiplari. `CREATE TABLE` buyruqlari — bazaning
> sxemasi. Ma'lumot o'zgaradi, sxema esa nisbatan barqaror turadi.

## Sana bilan ishlash

SQLite'da alohida "sana" tipi **yo'q** — sana odatda `TEXT` sifatida,
`'YYYY-MM-DD'` ko'rinishida saqlanadi (masalan `'2026-07-24'`). Namuna
bazadagi `buyurtmalar.sana` ustuni shunday. Bu format bo'yicha tartiblash
va taqqoslash to'g'ri ishlaydi:

```sql
SELECT * FROM buyurtmalar WHERE sana >= '2026-07-05';
```

`'YYYY-MM-DD'` formati muhim: shu tartibda yozilgani uchun matn bo'yicha
tartiblash ham vaqt bo'yicha to'g'ri chiqadi.

## Boshqa bazalardagi tiplar

SQLite tiplarga yumshoq qaraydi, lekin **MySQL** va **PostgreSQL** qat'iy.
U yerda ko'proq aniq tiplar bor:

| Umumiy tip | Ma'nosi |
|---|---|
| `VARCHAR(n)` | uzunligi cheklangan matn (`n` belgigacha) |
| `INT` | butun son |
| `DECIMAL(m, n)` | aniq kasr son (pul uchun ideal) |
| `DATE`, `DATETIME` | sana va vaqt |
| `BOOLEAN` | rost/yolg'on |

Nomlar farq qilsa ham, g'oya bir xil: har ustun o'z tipiga ega. SQLite'da
o'rgangan tushuncha boshqa bazalarga ham o'tadi.

<Callout type="example" title="O'zingizni sinab ko'ring">
Namuna bazangizda o'z jadvalingizni yarating va tiplarni sinang:

```sql
CREATE TABLE test (
  id    INTEGER PRIMARY KEY,
  nom   TEXT,
  narx  REAL
);

INSERT INTO test (nom, narx) VALUES ('Sinov', 1500.75);
SELECT * FROM test;
```

`narx` `REAL` bo'lgani uchun kasr son (1500.75) saqlandi. Endi shu ustunga
matn kiritib ko'ring — SQLite qanday munosabatda bo'ladi?
</Callout>

## Amaliy mashq

Turlarni tekshiring:

1. `typeof()` bilan `nom` va `narx` ustunlari turini ko'ring;
2. `typeof(yosh)` ni `mijozlar` da bajaring — NULL qanday ko'rinadi?
3. `SELECT '5' + 3;` ni ishga tushiring — SQLite nima qildi?
4. `SELECT 'salom' + 3;` ni sinang;
5. `CAST(narx AS TEXT)` bilan turni o'zgartiring;
6. `typeof(sana)` ni `buyurtmalar` da bajaring — sana alohida tipmi yoki
   matnmi?

3 va 4-qadam SQLite'ning turlarga munosabati haqida nima aytadi?

## Qisqacha xulosa

- Har ustunning **tipi** bor: u qanday ma'lumot saqlanishini belgilaydi.
- SQLite asosiy tiplari: `INTEGER`, `REAL`, `TEXT`, `BLOB`.
- Tip `CREATE TABLE` da beriladi; `PRIMARY KEY` va `NOT NULL` — qo'shimcha
  cheklovlar.
- SQLite'da sana `TEXT` (`'YYYY-MM-DD'`) sifatida saqlanadi.
- MySQL/PostgreSQL'da `VARCHAR`, `INT`, `DECIMAL`, `DATE` kabi aniq tiplar
  bor — g'oya bir xil.

Keyingi darsda [operatorlar (`BETWEEN`, `IN`, `LIKE`)](https://learncode.uz/sql/operatorlar) —
`WHERE` shartlarini qulayroq va kuchliroq yozishni ko'ramiz.
