SQL asoslari
SQL (Structured Query Language) โ relatsion bazalar bilan gaplashish tili. U bilan siz jadval yaratasiz, ma'lumot qo'shasiz, o'qiysiz, o'zgartirasiz va o'chirasiz. Ushbu darsda eng muhim SQL buyruqlarini o'rganamiz. Barcha misollar PostgreSQL/MySQL uslubida yozilgan (ular deyarli bir xil).
; qo'yiladi.CREATE TABLE โ jadval yaratish
Har qanday ish jadval yaratishdan boshlanadi. CREATE TABLE buyrug'i jadval nomi va ustunlar ro'yxatini oladi. Har bir ustun uchun nom va tur ko'rsatiladi:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE,
age INT,
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMP DEFAULT NOW()
);
Bu yerda nima yuz berdi? users nomli jadval yaratildi va unda 6 ta ustun belgilandi. Endi turlarni va cheklovlarni ko'rib chiqamiz.
Asosiy ma'lumot turlari
INT(yokiINTEGER) โ butun son (masalan, 25, -3, 1000);VARCHAR(n)โ o'zgaruvchan uzunlikdagi matn, ko'pi bilannta belgi (masalan,VARCHAR(100));TEXTโ uzunligi cheklanmagan matn (uzun izohlar, maqolalar uchun);BOOLEANโ mantiqiy qiymat:trueyokifalse;DECIMAL(p, s)yokiNUMERICโ aniq kasrli son (pul uchun ideal, masalanDECIMAL(10, 2)โ 2 kasr xonasi);DATEโ sana (2026-07-01);TIMESTAMPโ sana va vaqt birga;SERIALโ avtomatik o'suvchi butun son (PostgreSQL'da). Har yangi qatorda o'zi 1, 2, 3... bo'lib ortadi, odatdaiduchun ishlatiladi.
Cheklovlar (constraints)
PRIMARY KEYโ asosiy kalit: qatorni yagona aniqlaydigan ustun (takrorlanmaydi, bo'sh bo'lmaydi);NOT NULLโ bu ustun bo'sh (NULL) bo'lishi mumkin emas;UNIQUEโ qiymat takrorlanmasligi kerak (masalan, email);DEFAULT qiymatโ agar qiymat berilmasa, shu standart qiymat qo'yiladi.
NULL โ bu "qiymat yo'q", "noma'lum" degani. U 0 yoki bo'sh matndan farq qiladi. Masalan, foydalanuvchi yoshini ko'rsatmasa, age ustuni NULL bo'lishi mumkin.INSERT INTO โ ma'lumot qo'shish
Jadval tayyor bo'lgach, unga qator qo'shamiz. INSERT INTO buyrug'i jadval nomini, ustunlarni va qiymatlarni oladi:
INSERT INTO users (name, email, age)
VALUES ('Ali', 'ali@mail.com', 25);
E'tibor bering: matn qiymatlar bitta tirnoq ('Ali') ichida yoziladi, sonlar esa tirnoqsiz (25). Biz id, is_active va created_atni ko'rsatmadik โ ular avtomatik (SERIAL va DEFAULT) to'ldiriladi.
Bir necha qatorni bir vaqtda qo'shish uchun vergul bilan ajratiladi:
INSERT INTO users (name, email, age) VALUES
('Vali', 'vali@mail.com', 30),
('Guli', 'guli@mail.com', 22),
('Hasan', 'hasan@mail.com', 28);
SELECT โ ma'lumot o'qish
SELECT โ eng ko'p ishlatiladigan buyruq. U jadvaldan ma'lumot o'qiydi. Barcha ustunlarni olish uchun yulduzcha * ishlatiladi:
SELECT * FROM users;
Faqat kerakli ustunlarni olish uchun ularning nomlarini sanab o'tamiz (bu tezroq va toza):
SELECT name, email FROM users;
SELECT * emas, balki aniq kerakli ustunlarni sanab o'tish yaxshi odat. Bu tarmoqdan kamroq ma'lumot uzatadi va kod nima olayotgani aniq ko'rinadi.WHERE โ shart bo'yicha filtrlash
Ko'pincha bizga hamma qator emas, faqat ma'lum shartga mos qatorlar kerak. WHERE shu uchun ishlatiladi:
SELECT * FROM users WHERE age > 25;
Solishtirish operatorlari: = (teng), <> yoki != (teng emas), <, >, <=, >=. Matn bilan solishtirish:
SELECT * FROM users WHERE name = 'Ali';
AND va OR โ bir necha shart
Bir necha shartni birlashtirish uchun AND (va) hamda OR (yoki) ishlatiladi:
-- yoshi 25 dan katta VA faol bo'lganlar
SELECT * FROM users WHERE age > 25 AND is_active = true;
-- ismi Ali YOKI Vali bo'lganlar
SELECT * FROM users WHERE name = 'Ali' OR name = 'Vali';
LIKE โ matn ichida qidirish
LIKE operatori matn namunasi (pattern) bo'yicha qidiradi. Ikki maxsus belgi ishlatiladi: % โ istalgan (nol yoki ko'p) belgilar, _ โ aniq bitta belgi:
-- ismi 'A' harfi bilan boshlanadiganlar
SELECT * FROM users WHERE name LIKE 'A%';
-- emailida 'mail' so'zi qatnashadiganlar
SELECT * FROM users WHERE email LIKE '%mail%';
-- ismi aynan 4 harfli va 'A' bilan boshlananuvchi
SELECT * FROM users WHERE name LIKE 'A___';
Boshqa foydali shartlar
-- ma'lum ro'yxatdagi qiymatlar
SELECT * FROM users WHERE age IN (22, 25, 30);
-- oraliqda (chegaralar kiradi)
SELECT * FROM users WHERE age BETWEEN 20 AND 30;
-- qiymati yo'q (NULL) bo'lganlar
SELECT * FROM users WHERE age IS NULL;
= ishlatilmaydi! age = NULL hech qachon true bermaydi. To'g'ri usul โ IS NULL yoki IS NOT NULL.ORDER BY โ saralash
Natijani tartiblash uchun ORDER BY ishlatiladi. ASC โ o'sish bo'yicha (standart), DESC โ kamayish bo'yicha:
-- yosh bo'yicha o'sish tartibida
SELECT * FROM users ORDER BY age ASC;
-- yosh bo'yicha kamayish (kattadan kichikka)
SELECT * FROM users ORDER BY age DESC;
-- avval yosh bo'yicha, keyin ism bo'yicha
SELECT * FROM users ORDER BY age DESC, name ASC;
LIMIT โ natijani cheklash
LIMIT qaytariladigan qatorlar sonini cheklaydi. Bu "eng katta 5 ta" kabi so'rovlar uchun juda foydali:
-- eng yosh 3 ta foydalanuvchi
SELECT * FROM users ORDER BY age ASC LIMIT 3;
-- 5-qatordan boshlab 10 ta olish (sahifalash uchun)
SELECT * FROM users ORDER BY id LIMIT 10 OFFSET 5;
LIMIT va OFFSET birgalikda "sahifalash" (pagination) uchun ishlatiladi. Masalan, har sahifada 10 ta natija ko'rsatsangiz: 1-sahifa LIMIT 10 OFFSET 0, 2-sahifa LIMIT 10 OFFSET 10 va hokazo.UPDATE โ ma'lumotni o'zgartirish
UPDATE mavjud qatorlarni o'zgartiradi. SET qaysi ustunni qanday qiymatga o'zgartirishni, WHERE esa qaysi qatorlarni belgilaydi:
-- id = 1 bo'lgan foydalanuvchining yoshini o'zgartirish
UPDATE users SET age = 26 WHERE id = 1;
-- bir vaqtda bir necha ustun
UPDATE users SET age = 26, is_active = false WHERE id = 1;
UPDATEda WHEREni unutmang! Agar WHEREsiz yozsangiz โ UPDATE users SET age = 0; โ bu barcha qatorlarning yoshini o'zgartiradi. Bu ko'p yangi boshlovchilarning eng katta xatosi.DELETE โ ma'lumotni o'chirish
DELETE qatorlarni o'chiradi. Bu ham WHERE bilan ishlatiladi:
-- id = 3 bo'lgan foydalanuvchini o'chirish
DELETE FROM users WHERE id = 3;
-- 18 yoshdan kichiklarni o'chirish
DELETE FROM users WHERE age < 18;
DELETE FROM users; โ WHEREsiz yozilsa, jadvaldagi BARCHA qatorlarni o'chiradi! Har doim avval SELECT bilan qaysi qatorlar o'chishini tekshirib ko'ring, keyin xuddi shu WHERE bilan DELETE qiling.Xulosa
CREATE TABLEโ jadval yaratadi, har ustun uchun tur (INT, VARCHAR, BOOLEAN...) va cheklov (PRIMARY KEY, NOT NULL, UNIQUE, DEFAULT) beriladi;INSERT INTO ... VALUESโ yangi qator(lar) qo'shadi; matn bitta tirnoqda;SELECT ustunlar FROM jadvalโ ma'lumot o'qiydi;*barcha ustun;WHEREโ shart bo'yicha filtrlaydi;AND,OR,LIKE,IN,BETWEEN,IS NULL;ORDER BYโ saralaydi (ASC/DESC);LIMIT/OFFSETโ natijani cheklaydi;UPDATE ... SET ... WHEREโ o'zgartiradi;DELETE FROM ... WHEREโ o'chiradi;- WHERE'ni unutmaslik โ UPDATE va DELETE'da eng muhim ehtiyot chorasi.