logo

9-dars · 3-hafta

SQL analitik operatorlari

SELECT · WHERE · ORDER BY · LIMIT · TOP-N tahlili

10-sinf BI · Ma'lumotlar muhandisligi va Machine Learning

Avvalgi darsdan savol-javob

ERD eslatma

  • 1:N — bir hudud, ko'p maktab
  • M:N — Junction table kerak
  • PK → FK orqali bog'lanish
  • SQLite da FK: PRAGMA foreign_keys = ON

maktab.db sxema

  • hududlar(id, nomi)
  • maktablar(id, nomi, turi, hudud_id)
  • yillik_kpi(id, hudud_id, yil, oquvchilar_soni, ...)

SQL buyruqlar guruhlari

DDL

Data Definition Language

CREATE · ALTER · DROP

Jadval tuzilmasini boshqarish

DML

Data Manipulation Language

INSERT · UPDATE · DELETE

Ma'lumotlarni o'zgartirish

DQL — Bugun!

Data Query Language

SELECT

Ma'lumotlarni o'qish va tahlil qilish

SQL mantiqiy ijro tartibi

Biz yozgan tartib ≠ kompyuter bajaradigan tartib

FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
LIMIT

WHERE SELECT dan OLDIN bajariladi — alias ni WHERE ichida ishlatib bo'lmaydi!

SELECT — asosiy sintaksis

-- Barcha ustunlar
SELECT * FROM yillik_kpi;

-- Aniq ustunlar
SELECT hudud_id, yil, oquvchilar_soni
FROM yillik_kpi;

-- Arifmetika va AS taxallus
SELECT
  hudud_id,
  yil,
  ROUND(oquvchilar_soni * 1.0
        / maktablar_soni, 1) AS maktab_yuklamasi
FROM yillik_kpi;

WHERE: solishtirish va mantiqiy operatorlar

Solishtirish

= != > < >= <=
WHERE yil = 2024
  AND oquvchilar_soni > 300000

Mantiqiy

AND  OR  NOT
WHERE yil = 2024
   OR yil = 2023
-- yoki qisqaroq:
WHERE yil IN (2023, 2024)

WHERE: BETWEEN, IN, LIKE

BETWEEN

WHERE yil
  BETWEEN 2022
  AND 2024

Ikkala chegara kiradi

IN

WHERE hudud_id
  IN (1, 3, 5)

OR zanjirini qisqartiradi

LIKE

WHERE nomi
  LIKE 'Toshkent%'

% = ixtiyoriy belgilar
_ = aynan 1 belgi

IS NULL — bo'sh qiymatlar

NOTO'G'RI

-- Bu DOIM FALSE qaytaradi!
WHERE turi = NULL

NULL == NULL — matematik jihatdan noto'g'ri. NULL = "noma'lum"

VS

TO'G'RI

-- Bo'sh qiymatlar
WHERE turi IS NULL

-- Bo'sh emas
WHERE turi IS NOT NULL

Noma'lumni noma'lum bilan taqqoslab bo'lmaydi — IS NULL ishlatamiz!

ORDER BY — saralash

-- Bir ustun bo'yicha kamayish tartibi
SELECT hudud_id, yil, oquvchilar_soni
FROM yillik_kpi
WHERE yil = 2024
ORDER BY oquvchilar_soni DESC;

-- Ko'p ustunli saralash
SELECT hudud_id, yil, oquvchilar_soni
FROM yillik_kpi
ORDER BY yil DESC,        -- avval yangi yillar
         oquvchilar_soni DESC;  -- teng yillarda ko'proq birinchi

DESC

Kattadan kichikka (kamayish)

ASC

Kichikdan kattaga (o'sish) — standart

LIMIT va OFFSET — TOP-N va sahifalash

TOP-N tahlili

-- TOP-5 hudud (2024-yil)
SELECT h.nomi, k.oquvchilar_soni
FROM yillik_kpi k
JOIN hududlar h ON h.id = k.hudud_id
WHERE k.yil = 2024
ORDER BY k.oquvchilar_soni DESC
LIMIT 5;

Sahifalash (Pagination)

-- 1-sahifa (1-3 yozuv)
LIMIT 3 OFFSET 0

-- 2-sahifa (4-6 yozuv)
LIMIT 3 OFFSET 3

-- N-sahifa formulasi:
LIMIT size OFFSET (page-1)*size

Amaliyot: Python + sqlite3

import sqlite3

conn = sqlite3.connect("data/maktab.db")
conn.execute("PRAGMA foreign_keys = ON")
cur = conn.cursor()

# TOP-10 hudud — 2024-yil bo'yicha
sql = """
SELECT h.nomi, k.oquvchilar_soni
FROM yillik_kpi k
JOIN hududlar h ON h.id = k.hudud_id
WHERE k.yil = 2024
ORDER BY k.oquvchilar_soni DESC
LIMIT 10;
"""

cur.execute(sql)
print(f"{'Hudud':<25} {'O\'quvchilar soni':>18}")
print("-" * 45)
for nomi, son in cur.fetchall():
    print(f"{nomi:<25} {son:>18,}")

conn.close()

Murakkab filtr misoli

-- 2022-2024 da, o'quvchisi 400 000 dan ortiq hududlar,
-- maktab yuklamasi bilan, eng ko'p yuklamali birinchi
SELECT
  h.nomi                                          AS hudud,
  k.yil,
  k.oquvchilar_soni,
  ROUND(k.oquvchilar_soni * 1.0
        / k.maktablar_soni, 1)                   AS maktab_yuklamasi
FROM yillik_kpi k
JOIN hududlar h ON h.id = k.hudud_id
WHERE k.yil BETWEEN 2022 AND 2024
  AND k.oquvchilar_soni > 400000
ORDER BY k.yil DESC, maktab_yuklamasi DESC
LIMIT 6;

ORDER BY da alias (maktab_yuklamasi) ishlatish mumkin, lekin WHERE da emas — mantiqiy ijro tartibini eslang!

Xatolarni toping va tuzating!

-- XATOLAR MAVJUD — Toping!
SELECT nomi, oquvchilar_soni
FROM yillik_kpi, hududlar
WHERE hudud_id = NULL
AND yil = 2024
ORDERBY oquvchilar_soni DESC
LIMIT 10;

Xato 1

= NULL → IS NULL yoki IS NOT NULL

Xato 2

FROM tbl1, tbl2 — JOIN aniq yozilmagan

Xato 3

ORDERBY → ORDER BY (bo'sh joy yetishmayapti)

3-hafta: O'rganilgan mavzular

7-dars RDBMS · PK · FK Constraints CHECK · NOT NULL UNIQUE · DEFAULT 8-dars ERD dizayn SQLite yaratish Junction table maktab.db 9-dars SELECT · WHERE BETWEEN · IN · LIKE ORDER BY · LIMIT TOP-N · Pagination Umumiy natija maktab.db — O'zbekiston ta'lim KPI tahlil platformasi Python sqlite3 orqali TOP-N va Pagination

Bilasizmi?

SQL tarixi

SQL 1974-yilda IBM muhandislari tomonidan yaratilgan. Dastlab SEQUEL (Structured English Query Language) deb atalgan. Bugun dunyoda eng ko'p ishlatiladigan ma'lumotlar bazasi tili!

O'zbekiston ta'limi

2024-yilgi statistikaga ko'ra O'zbekiston umumta'lim maktablarida 6,5 milliondan ortiq o'quvchi ta'lim olmoqda. SQL TOP-N orqali hududiy tahlil qilish mumkin.

Tezkor savol-javob

SQL da SELECT va WHERE qaysi tartibda bajariladi?

BETWEEN 10 AND 20 va >=10 AND <=20 bir xilmi?

LIKE 'A_or' qanday so'zlarga mos keladi?

= NULL o'rniga nima yozish kerak va nima uchun?

4-sahifada LIMIT 10 OFFSET ? qancha bo'ladi?

Ko'p ustunli ORDER BY da ustunlar qanday ajratiladi?

3-hafta yakuni va uyga vazifa

3-hafta natijasi

  • RDBMS, PK, FK, Constraints
  • ERD dizayn, SQLite yaratish
  • SELECT, WHERE, ORDER BY, LIMIT
  • TOP-N va Pagination

Uyga vazifa

  • 5 ta viloyat uchun 3 yillik KPI kiriting
  • Yuklama (>700) filtri qo'llang
  • TOP-3 ta hududni Python da chiqaring
  • LIMIT va ORDER BY izohlab bezing

Keyingi hafta: SQL agregat funksiyalari — COUNT, SUM, AVG, GROUP BY, HAVING