Bosh sahifa Wiki SQL

SQL

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:

Masalan, foydalanuvchi login qilganda backend users jadvalidan email bo‘yicha foydalanuvchini qidiradi.

Query

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

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

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

  • WHERE guruhlashdan oldin yozuvlarni filterlaydi;
  • HAVING guruhlashdan 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:

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