# SQL CREATE TABLE — jadval yaratish

> SQL CREATE TABLE bilan yangi jadval yaratish: ustunlar, ma'lumot tiplari, PRIMARY KEY va NOT NULL. Jadval tuzilishini belgilash va unga ma'lumot qo'shish.

Manba: https://learncode.uz/sql/create-table/
Sana: 2026-06-17

Shu paytgacha tayyor jadvallar (`mahsulotlar`, `mijozlar`, `buyurtmalar`)
bilan ishladik — ularni namuna baza yaratib bergan. Endi **o'zimiz** jadval
yaratamiz. Buning uchun **`CREATE TABLE`** ishlatiladi: u jadvalning nomini,
ustunlarini va har ustunning tipini belgilaydi.

## CREATE TABLE tuzilishi

Yangi jadval yaratamiz — do'kon uchun `yetkazuvchilar` (mahsulot yetkazib
beruvchilar):

```sql
CREATE TABLE yetkazuvchilar (
  id     INTEGER PRIMARY KEY,
  nom    TEXT NOT NULL,
  shahar TEXT,
  telefon TEXT
);
```

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

```sql
CREATE TABLE yetkazuvchilar (
  id      INTEGER PRIMARY KEY,
  nom     TEXT NOT NULL,
  shahar  TEXT,
  telefon TEXT
);

INSERT INTO yetkazuvchilar (id, nom, shahar, telefon) VALUES
  (1, 'AgroFerma', 'Toshkent', '90-123-45-67');
SELECT * FROM yetkazuvchilar;
```

Har qator — bitta ustun: avval **nomi**, keyin **tipi**, so'ng qo'shimcha
shartlar. Bu yerda:

- `id INTEGER PRIMARY KEY` — [asosiy kalit](https://learncode.uz/sql/primary-foreign-key): noyob
  raqam, har qatorni ajratadi.
- `nom TEXT NOT NULL` — matn, bo'sh bo'lishi mumkin emas.
- `shahar TEXT`, `telefon TEXT` — matn, bo'sh bo'lsa ham bo'ladi.

## Ma'lumot tiplari

Har ustunga [tip](https://learncode.uz/sql/malumot-tiplari) beriladi — u ustunda qanday qiymat
turishini belgilaydi:

| Tip | Nimaga | Misol |
|---|---|---|
| `INTEGER` | Butun son | 42, 8000 |
| `TEXT` | Matn | 'Toshkent' |
| `REAL` | Kasr son | 3.14, 10375.0 |

To'g'ri tip tanlash muhim: narxni `INTEGER`, ismni `TEXT` qilib belgilaysiz.

## Jadvalga ma'lumot qo'shish

Jadval yaratilgach, u **bo'sh** turadi. Unga [`INSERT`](https://learncode.uz/sql/insert) bilan
qator qo'shamiz:

```sql
INSERT INTO yetkazuvchilar (id, nom, shahar, telefon) VALUES
  (1, 'AgroFerma', 'Toshkent', '90-123-45-67'),
  (2, 'SutSavdo', 'Samarqand', NULL);
```

Endi tekshiramiz:

```sql
SELECT * FROM yetkazuvchilar;
```

Natija:

| id | nom | shahar | telefon |
|---|---|---|---|
| 1 | AgroFerma | Toshkent | 90-123-45-67 |
| 2 | SutSavdo | Samarqand | NULL |

`SutSavdo` ning telefoni `NULL` — chunki uni kiritmadik va ustun `NOT NULL`
emas.

> **Atama**
>
> **Jadval sxemasi** (schema) — jadvalning tuzilishi: qanday ustunlar bor,
> har biri qanday tipda va qanday shartlar (masalan `NOT NULL`). `CREATE TABLE`
> aynan shu sxemani belgilaydi.

<Callout type="warning" title="Boshlovchilar tez-tez yanglishadigan joy">
Bir xil nomli jadval ikki marta yaratib bo'lmaydi — `CREATE TABLE` xato
beradi. Agar jadval bo'lmasagina yaratmoqchi bo'lsangiz:

```sql
CREATE TABLE IF NOT EXISTS yetkazuvchilar ( ... );
```

`IF NOT EXISTS` — "agar mavjud bo'lmasa" — xatoning oldini oladi.
</Callout>

## Amaliy mashq

O'z jadvalingizni yarating:

1. `yetkazuvchilar` jadvalini yarating: `id`, `nom`, `shahar`;
2. `id` ni `PRIMARY KEY` qiling;
3. `nom` ga `NOT NULL` qo'shing;
4. ikkita qator `INSERT` qiling va `SELECT` bilan ko'ring;
5. bir xil jadvalni ikkinchi marta yaratishga urinib ko'ring;
6. `IF NOT EXISTS` qo'shib, o'sha `CREATE TABLE` ni qayta bajaring —
   endi xato chiqmasligini ko'ring.

5-qadamdagi xatodan qochish uchun qanday ibora ishlatiladi?

## Qisqacha xulosa

- `CREATE TABLE nom (...)` — yangi jadval yaratadi.
- Har ustun: **nomi + tipi + shartlar** (`id INTEGER PRIMARY KEY`).
- Asosiy tiplar: `INTEGER` (son), `TEXT` (matn), `REAL` (kasr).
- Yaratilgan jadval bo'sh bo'ladi — `INSERT` bilan to'ldiriladi.
- `IF NOT EXISTS` takroriy yaratishdagi xatodan saqlaydi.

Keyingi darsda [`ALTER TABLE`](https://learncode.uz/sql/alter-table) — mavjud jadvalga ustun
qo'shish yoki uni o'zgartirishni ko'ramiz.
