SQLab
O‘rganishMashqMasalalarArenaReyting
© 2026 SQLab · Toshkent
SQLab

SQL’ni o‘rnatmasdan, brauzerning o‘zida o‘rganing.

Platforma

  • O‘rganish
  • Mashq
  • Masalalar
  • Arena
  • Reyting

Kimlar uchun

  • Talabalar
  • Ustozlar
  • Universitetlar
© 2026 SQLab. Barcha huquqlar himoyalangan.O‘zbekistonda, talabalar uchun yaratilgan.
O‘rganishMashqMasalalarArenaReyting
0/26

Asoslar

  • Ma’lumotlar bazasi nima?
  • Birinchi SELECT
  • WHERE: kerakli qatorlarni tanlash
  • IN, BETWEEN, LIKE va NULL
  • Saralash, LIMIT va DISTINCT

Hisob-kitob

  • Ifodalar, funksiyalar va CASE
  • Sanalar bilan ishlash
  • COUNT, SUM, AVG, MIN, MAX
  • GROUP BY va HAVING

Jadvallarni ulash

  • Kalitlar va bog‘lanishlar
  • INNER JOIN
  • LEFT JOIN va juftsiz qatorlar
  • Bir nechta jadval va self join

Murakkab so‘rovlar

  • Ichki so‘rovlar
  • UNION, INTERSECT, EXCEPT
  • WITH: nomlangan so‘rovlar
  • Oyna funksiyalari

Jadval yaratish va o‘zgartirish

  • CREATE TABLE: turlar va cheklovlar
  • INSERT, UPDATE, DELETE
  • ALTER, DROP, TRUNCATE
  • Bazani to‘g‘ri loyihalash

Professional daraja

  • Indekslar va EXPLAIN
  • Tranzaksiyalar va ACID
  • VIEW: saqlangan so‘rovlar
  • Funksiyalar, protseduralar, triggerlar
  • Foydalanuvchilar, huquqlar, zaxira nusxa
O‘rganish/Murakkab so‘rovlar

Oyna funksiyalari

1711 daq

GROUP BY qatorlarni bittaga «yig‘ib» qo‘yadi. Oyna funksiyalari esa har bir qatorni o‘z joyida qoldirib, yoniga guruh bo‘yicha hisobni qo‘shadi: o‘rin, o‘sib boruvchi yig‘indi, oldingi qatordagi qiymat.

Qolip

funksiya() OVER (PARTITION BY guruh ORDER BY tartib)
  • PARTITION BY — qaysi guruhlar ichida hisoblash (yozilmasa — butun natija bitta guruh);
  • ORDER BY — guruh ichidagi tartib.

O‘rinlar: ROW_NUMBER, RANK, DENSE_RANK

university· O‘zgartirib ko‘ring
SELECT first_name, last_name, salary,
       ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_no,
       RANK()       OVER (ORDER BY salary DESC) AS rnk,
       DENSE_RANK() OVER (ORDER BY salary DESC) AS dense
FROM teachers
LIMIT 10;
  • ROW_NUMBER — 1, 2, 3… teng qiymatlarga ham har xil raqam;
  • RANK — tenglarga bir xil o‘rin, keyingisi sakraydi (1, 1, 3);
  • DENSE_RANK — tenglarga bir xil o‘rin, sakramaydi (1, 1, 2).

Har bir guruh ichida

Har bir fakultetda eng yuqori maoshli ustoz:

university· O‘zgartirib ko‘ring
WITH ranked AS (
  SELECT faculty_id, first_name, last_name, salary,
         RANK() OVER (PARTITION BY faculty_id ORDER BY salary DESC) AS rnk
  FROM teachers
)
SELECT faculty_id, first_name, last_name, salary FROM ranked WHERE rnk = 1;

Oyna funksiyasini WHERE ichida ishlatib bo‘lmaydi — shuning uchun avval CTE’da hisoblab, keyin filtrlaymiz.

Agregat + OVER: ulush va o‘sib boruvchi yig‘indi

shop· O‘zgartirib ko‘ring
SELECT c.name, COUNT(*) AS products,
       ROUND(100.0 * COUNT(*) / SUM(COUNT(*)) OVER (), 1) AS share
FROM products p JOIN categories c ON c.id = p.category_id
GROUP BY c.name
ORDER BY products DESC;

SUM(...) OVER () — butun natija bo‘yicha jami, har bir qator yonida.

Oylar bo‘yicha o‘sib boruvchi tushum:

taxi· O‘zgartirib ko‘ring
WITH m AS (
  SELECT EXTRACT(MONTH FROM requested_at) AS mon, SUM(fare) AS revenue
  FROM trips
  WHERE status = 'completed' AND requested_at >= '2026-01-01'
  GROUP BY EXTRACT(MONTH FROM requested_at)
)
SELECT mon, revenue, SUM(revenue) OVER (ORDER BY mon) AS running_total
FROM m ORDER BY mon;

LAG va LEAD — qo‘shni qator

LAG(x) — oldingi qatordagi qiymat, LEAD(x) — keyingisi. O‘tgan oyga nisbatan o‘zgarish:

taxi· O‘zgartirib ko‘ring
WITH m AS (
  SELECT EXTRACT(MONTH FROM requested_at) AS mon, COUNT(*) AS trips
  FROM trips WHERE requested_at >= '2026-01-01'
  GROUP BY EXTRACT(MONTH FROM requested_at)
)
SELECT mon, trips, trips - LAG(trips) OVER (ORDER BY mon) AS diff
FROM m ORDER BY mon;
1Mashq

Har bir xodimning first_name, last_name, salary ustunlarini va butun kompaniya bo‘yicha oylik o‘rnini (DENSE_RANK, eng yuqori — 1) chiqaring. O‘rin o‘sib borish tartibida.


2Mashq

Har bir talabaning id, first_name ustunlarini va o‘z guruhidagi o‘rnini chiqaring: kim avval o‘qishga kirgan (enrolled_at) — o‘sha birinchi, sana teng bo‘lsa — id kichigi birinchi (ROW_NUMBER, PARTITION BY group_id).


Esda qoldiring

  • Oyna funksiyasi qatorlarni yig‘maydi — har bir qator yoniga hisob qo‘shadi.
  • PARTITION BY — guruh, ORDER BY — tartib.
  • Natija bo‘yicha filtrlash uchun avval CTE yoki ichki so‘rov kerak.
Oldingi darsWITH: nomlangan so‘rovlarKeyingi darsCREATE TABLE: turlar va cheklovlar

Mundarija

  • Qolip
  • O‘rinlar: ROW_NUMBER, RANK, DENSE_RANK
  • Har bir guruh ichida
  • Agregat + OVER: ulush va o‘sib boruvchi yig‘indi
  • LAG va LEAD — qo‘shni qator
  • Esda qoldiring
O‘rganishMashqMasalalarArenaReyting

SQLab