SQL — relational database bilan ishlash uchun ishlatiladigan so‘rov tili. SQL inglizcha Structured Query Language so‘zlarining qisqartmasi bo‘lib, ma’lumotlarni yaratish, o‘qish, yangilash va o‘chirish uchun qo‘llanadi.
SQL PostgreSQL, MySQL, SQLite, Microsoft SQL Server, Oracle Database va MariaDB kabi relational database tizimlarida ishlatiladi.
Vazifasi
SQL database ichidagi ma’lumotlar bilan tartibli ishlash imkonini beradi.
SQL orqali quyidagi amallar bajariladi:
- database yaratish;
- table yaratish;
- ma’lumot qo‘shish;
- ma’lumot o‘qish;
- ma’lumot yangilash;
- ma’lumot o‘chirish;
- filterlash;
- saralash;
- guruhlash;
- jadvallarni bog‘lash;
- index yaratish;
- foydalanuvchi ruxsatlarini boshqarish.
Masalan, internet do‘konda mahsulotlar ro‘yxatini olish, yangi buyurtma yaratish yoki foydalanuvchi ma’lumotini yangilash SQL orqali bajarilishi mumkin.
SQL qanday ishlaydi?
Dastur yoki foydalanuvchi database serverga SQL query yuboradi. Database server query’ni tahlil qiladi, kerakli jadval va yozuvlarni topadi, amalni bajaradi va natijani qaytaradi.
Oddiy jarayon:
- backend ilova SQL query yaratadi;
- query database serverga yuboriladi;
- database query’ni tekshiradi;
- kerakli jadval yoki indexlardan foydalanadi;
- natija tayyorlanadi;
- javob backend ilovaga qaytariladi.
Masalan, foydalanuvchi login qilganda backend users jadvalidan email bo‘yicha foydalanuvchini qidiradi.
Query
Query — database’ga yuboriladigan SQL so‘rov. Query ma’lumot olish, qo‘shish, yangilash yoki o‘chirish uchun ishlatiladi.
SQL query misollari:
SELECT * FROM users;
INSERT INTO users (name, email) VALUES ('Ali', '[email protected]');
UPDATE users SET name = 'Vali' WHERE id = 1;
DELETE FROM users WHERE id = 1;
Har bir query database’da ma’lum bir amalni bajaradi.
SELECT
SELECT — database’dan ma’lumot olish uchun ishlatiladigan SQL buyrug‘i.
Misol:
SELECT name, email FROM users;
Bu query users jadvalidagi name va email ustunlarini qaytaradi.
SELECT quyidagi holatlarda ishlatiladi:
- foydalanuvchilar ro‘yxatini olish;
- mahsulotlarni chiqarish;
- buyurtma ma’lumotini ko‘rish;
- statistika olish;
- filterlangan ma’lumotni qaytarish;
- hisobot tayyorlash.
SELECT * barcha ustunlarni olishni bildiradi, lekin amaliy tizimlarda ko‘pincha kerakli ustunlar aniq ko‘rsatiladi.
INSERT
INSERT — jadvalga yangi yozuv qo‘shish uchun ishlatiladi.
Misol:
INSERT INTO users (name, email) VALUES ('Ali', '[email protected]');
Bu query users jadvaliga yangi foydalanuvchi qo‘shadi.
INSERT quyidagi holatlarda ishlatiladi:
- yangi foydalanuvchi yaratish;
- yangi mahsulot qo‘shish;
- buyurtma saqlash;
- komment yozish;
- log yozish;
- yangi kategoriya yaratish.
UPDATE
UPDATE — mavjud yozuvni yangilash uchun ishlatiladi.
Misol:
UPDATE users SET name = 'Vali' WHERE id = 1;
Bu query id qiymati 1 bo‘lgan foydalanuvchining ismini yangilaydi.
UPDATE quyidagi holatlarda ishlatiladi:
- profil ma’lumotini o‘zgartirish;
- mahsulot narxini yangilash;
- buyurtma statusini o‘zgartirish;
- parolni yangilash;
- sozlama qiymatini almashtirish.
WHERE sharti ko‘rsatilmasa, jadvaldagi barcha yozuvlar yangilanib ketishi mumkin.
DELETE
DELETE — jadvaldan yozuv o‘chirish uchun ishlatiladi.
Misol:
DELETE FROM users WHERE id = 1;
Bu query id qiymati 1 bo‘lgan foydalanuvchini o‘chiradi.
DELETE quyidagi holatlarda ishlatiladi:
- foydalanuvchini o‘chirish;
- kommentni o‘chirish;
- mahsulotni olib tashlash;
- eski loglarni tozalash;
- keraksiz yozuvlarni o‘chirish.
DELETE ham odatda WHERE sharti bilan ishlatiladi.
WHERE
WHERE — query ichida shart berish uchun ishlatiladi. U qaysi yozuvlar bilan ishlash kerakligini belgilaydi.
Misol:
SELECT * FROM users WHERE city = 'Toshkent';
Bu query faqat shahri Toshkent bo‘lgan foydalanuvchilarni qaytaradi.
WHERE bilan ishlatiladigan operatorlar:
=— teng;!=yoki<>— teng emas;>— katta;<— kichik;>=— katta yoki teng;<=— kichik yoki teng;LIKE— matn bo‘yicha qidirish;IN— qiymatlar ro‘yxatidan biri;BETWEEN— oraliq qiymat;IS NULL— bo‘sh qiymatni tekshirish.
ORDER BY
ORDER BY — natijalarni ma’lum ustun bo‘yicha tartiblash uchun ishlatiladi.
Misol:
SELECT * FROM products ORDER BY price ASC;
Bu query mahsulotlarni narx bo‘yicha o‘sish tartibida qaytaradi.
Tartiblash turlari:
ASC— o‘sish tartibi;DESC— kamayish tartibi.
ORDER BY quyidagi holatlarda ishlatiladi:
- narx bo‘yicha saralash;
- sana bo‘yicha tartiblash;
- mashhurlik bo‘yicha chiqarish;
- reyting bo‘yicha ko‘rsatish;
- nom bo‘yicha alfabet tartibida chiqarish.
LIMIT va OFFSET
LIMIT qaytariladigan yozuvlar sonini cheklaydi. OFFSET esa nechta yozuvdan keyin boshlashni bildiradi.
Misol:
SELECT * FROM articles LIMIT 10 OFFSET 20;
Bu query 20 ta yozuvni tashlab, keyingi 10 ta maqolani qaytaradi.
LIMIT va OFFSET ko‘pincha pagination uchun ishlatiladi:
- birinchi sahifa;
- keyingi sahifa;
- admin panel ro‘yxatlari;
- mahsulotlar katalogi;
- maqolalar ro‘yxati;
- qidiruv natijalari.
JOIN
JOIN — bir nechta jadvaldagi ma’lumotlarni bog‘lab olish uchun ishlatiladi.
Masalan, orders jadvalida buyurtmalar, users jadvalida foydalanuvchilar saqlansa, JOIN orqali har bir buyurtma egasining ismini ham olish mumkin.
JOIN turlari:
- INNER JOIN — ikki jadvalda mos yozuvlar bo‘lsa qaytaradi;
- LEFT JOIN — chap jadvaldagi barcha yozuvlarni qaytaradi;
- RIGHT JOIN — o‘ng jadvaldagi barcha yozuvlarni qaytaradi;
- FULL JOIN — ikki tomondagi barcha mos va mos bo‘lmagan yozuvlarni qaytaradi.
Misol:
SELECT orders.id, users.name FROM orders JOIN users ON orders.user_id = users.id;
GROUP BY
GROUP BY — ma’lumotlarni ma’lum ustun bo‘yicha guruhlash uchun ishlatiladi.
Misol:
SELECT category_id, COUNT(*) FROM products GROUP BY category_id;
Bu query har bir kategoriya bo‘yicha mahsulotlar sonini qaytaradi.
GROUP BY quyidagi holatlarda ishlatiladi:
- kategoriyalar bo‘yicha hisoblash;
- foydalanuvchilar bo‘yicha statistika;
- kunlar bo‘yicha tashriflar;
- statuslar bo‘yicha buyurtmalar;
- mahsulot turlari bo‘yicha umumiy son.
GROUP BY ko‘pincha aggregate funksiyalar bilan birga ishlatiladi.
Aggregate funksiyalar
Aggregate funksiyalar bir nechta yozuvlar ustida hisob-kitob bajaradi.
Keng ishlatiladigan aggregate funksiyalar:
COUNT()— yozuvlar sonini hisoblaydi;SUM()— qiymatlar yig‘indisini hisoblaydi;AVG()— o‘rtacha qiymatni hisoblaydi;MIN()— eng kichik qiymatni topadi;MAX()— eng katta qiymatni topadi.
Misol:
SELECT COUNT(*) FROM users;
Bu query users jadvalidagi yozuvlar sonini qaytaradi.
HAVING
HAVING — GROUP BY orqali guruhlangan natijalarga shart qo‘yish uchun ishlatiladi.
Misol:
SELECT category_id, COUNT(*) FROM products GROUP BY category_id HAVING COUNT(*) > 5;
Bu query 5 tadan ko‘p mahsulotga ega kategoriyalarni qaytaradi.
WHERE va HAVING farqi:
WHEREguruhlashdan oldin yozuvlarni filterlaydi;HAVINGguruhlashdan keyingi natijalarni filterlaydi.
CREATE TABLE
CREATE TABLE — yangi jadval yaratish uchun ishlatiladi.
Misol:
CREATE TABLE users (id SERIAL PRIMARY KEY, name VARCHAR(100), email VARCHAR(255));
Bu query users nomli jadval yaratadi.
Jadval yaratishda quyidagilar belgilanadi:
- ustun nomlari;
- ma’lumot turlari;
- primary key;
- foreign key;
- default qiymatlar;
- not null cheklovi;
- unique cheklovi.
ALTER TABLE
ALTER TABLE — mavjud jadval tuzilmasini o‘zgartirish uchun ishlatiladi.
ALTER TABLE orqali quyidagilar bajariladi:
- yangi ustun qo‘shish;
- ustunni o‘chirish;
- ustun turini o‘zgartirish;
- constraint qo‘shish;
- index bilan bog‘liq o‘zgarishlar;
- jadval nomini o‘zgartirish.
Misol:
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
Bu query users jadvaliga phone ustunini qo‘shadi.
Index
SQL database’da index qidiruv va filterlashni tezlashtirish uchun ishlatiladi.
Index ishlatiladigan maydonlar:
id;email;username;slug;created_at;status;category_id;- foreign key ustunlari.
Misol:
CREATE INDEX idx_users_email ON users(email);
Bu query users jadvalidagi email ustuni uchun index yaratadi.
Constraint
Constraint — jadvaldagi ma’lumotlarga qo‘yiladigan cheklov. Constraint ma’lumotlar to‘g‘ri va izchil saqlanishiga yordam beradi.
Keng ishlatiladigan constraintlar:
- PRIMARY KEY — yozuvni yagona aniqlaydi;
- FOREIGN KEY — boshqa jadval bilan bog‘laydi;
- UNIQUE — qiymat takrorlanmasligini ta’minlaydi;
- NOT NULL — ustun bo‘sh bo‘lmasligini bildiradi;
- CHECK — qiymat ma’lum shartga mos bo‘lishini tekshiradi;
- DEFAULT — qiymat berilmasa standart qiymat qo‘yadi.
Transaction
SQL’da transaction bir nechta amalni bitta yaxlit jarayon sifatida bajaradi. Transaction ichidagi amallar to‘liq bajariladi yoki bekor qilinadi.
Transaction buyruqlari:
BEGIN— transaction boshlaydi;COMMIT— o‘zgarishlarni saqlaydi;ROLLBACK— o‘zgarishlarni bekor qiladi.
Masalan, to‘lov tizimida foydalanuvchi balansidan pul yechish va buyurtma yaratish bitta transaction ichida bajarilishi mumkin.
SQL Injection
SQL Injection — foydalanuvchi kiritgan ma’lumot orqali SQL query’ni buzish yoki o‘zgartirishga qaratilgan hujum turi.
SQL Injection quyidagi joylarda paydo bo‘lishi mumkin:
- login formasi;
- qidiruv maydoni;
- URL parametrlari;
- filter qiymatlari;
- API request body;
- noto‘g‘ri yig‘ilgan raw SQL querylar.
SQL Injection serverdagi ma’lumotlarni o‘qish, o‘zgartirish yoki o‘chirish xavfini keltirib chiqarishi mumkin.
SQL va ORM
Ko‘p backend frameworklarda SQL querylar ORM orqali yaratiladi. ORM dasturchiga model obyektlari orqali database bilan ishlash imkonini beradi.
ORM ishlatiladigan joylar:
- model yaratish;
- yozuv qo‘shish;
- filterlash;
- update qilish;
- delete qilish;
- relationlar bilan ishlash;
- migration yaratish.
Django ORM, SQLAlchemy, Prisma, TypeORM va Eloquent SQL database bilan ishlashda keng qo‘llanadi.
Bog‘liq tushunchalar
Database, PostgreSQL, MySQL, SQLite, Table, Query, Index, Transaction, ORM, Backend, SQL Injection, API