Maktab jurnali, poliklinika navbati, bank ilovasi, onlayn do’kon katalogi — bularning barchasi ortida ma’lumotlar bazasi turadi, undan ma’lumot olish uchun esa ko’pincha SQL tili ishlatiladi. Birinchi so’rovni yozish uchun dasturchi bo’lish shart emas. Bu qo’llanmada ma’lumotlar bazasi va jadval nima ekanini Excel bilan solishtirib tushuntiramiz, kompyuterda bepul mashq muhitini tayyorlaymiz, so’ng SELECT, FROM, WHERE, ORDER BY, LIMIT, COUNT, SUM, AVG, GROUP BY va oddiy JOIN’ni ikki kichik jadval misolida ko’rib chiqamiz. Oxirida keng tarqalgan xatolar, amaliy mashq va tekshiruv ro’yxati bor.
Ma’lumotlar bazasi va jadval nima
Ma’lumotlar bazasi — ma’lumotlarni tartibli saqlash va ulardan tez qidirish uchun mo’ljallangan tizim. Eng keng tarqalgan turi — relyatsion baza: unda ma’lumotlar jadvallarda saqlanadi, jadvallar esa o’zaro bog’lanadi.
Agar siz Excel yoki Google Sheets bilan ishlagan bo’lsangiz, ko’p tushunchalar tanish:
| Excel’da | Ma’lumotlar bazasida |
|---|---|
| Fayl (ishchi kitob) | Baza |
| Varaq | Jadval |
| Ustun sarlavhasi | Ustun (maydon) nomi |
| Qator | Yozuv |
| Filtr | WHERE sharti |
| Saralash | ORDER BY |
| Yig’ma jadval (Pivot table) | GROUP BY |
| VLOOKUP / XLOOKUP | JOIN |
Farqlar ham bor va ular muhim:
- Ustun turi qat’iy.
yoshustuniga son belgilangan bo’lsa, u yerga “20 yosh” deb yozib bo’lmaydi. - Hajm va foydalanuvchilar. Baza millionlab yozuvlar va bir vaqtda ishlaydigan ko’p xodim uchun mo’ljallangan.
- Formula katakda emas, so’rovda. Siz so’rov yozasiz, baza natijani yangi jadval ko’rinishida qaytaradi, asl ma’lumot esa o’zgarmaydi.
Bazadagi bitta jadval yoki jadvallar to’plami ko’pincha dataset deb ham ataladi — ayniqsa ma’lumot tahlil uchun tayyorlanganda.
SQL nima va nima uchun kerak
SQL (Structured Query Language — tuzilmali so’rovlar tili) — relyatsion bazalar bilan ishlash uchun standart til. SQL’da “qanday qidirish kerak”ni emas, “nima kerak”ni yozasiz. Masalan: “Toshkentdagi o’quvchilarning ismlarini ber”. Qidiruvni qanday tez bajarishni bazaning o’zi hal qiladi.
SQL bilan ishlaydigan ko’plab tizimlar bor: SQLite, MySQL, PostgreSQL, Microsoft SQL Server, Oracle va boshqalar. Ularning har birida o’ziga xos qo’shimchalar bor (bu “dialekt” deyiladi), lekin bu maqoladagi asosiy buyruqlar deyarli hamma joyda bir xil ishlaydi. Bitta farqni oldindan aytib qo’yamiz: natija qatorlarini cheklovchi LIMIT SQLite, MySQL va PostgreSQL’da ishlaydi, Microsoft SQL Server’da esa buning o’rniga TOP ishlatiladi.
SQL ma’lumotlar tahlili bilan shug’ullanuvchilar uchun kundalik asosiy vosita. Buxgalter, menejer yoki o’quv markazi xodimi ham u bilan “shu oy nechta yangi o’quvchi keldi” kabi savollarga dasturchini kutmasdan o’zi javob topadi.
Mashq uchun bepul muhit
SQL so’rov yozib o’rganiladi va buning uchun server shart emas.
- SQLite — butun baza bitta faylda saqlanadigan bepul tizim, deyarli sozlash talab qilmaydi.
- DB Browser for SQLite — SQLite bazalarini oynali interfeysda ochish va so’rov yozish uchun bepul, ochiq kodli dastur. Windows, macOS va Linux uchun rasmiy saytidan (sqlitebrowser.org) yuklab olinadi.
- Onlayn SQL muharrirlari (masalan, SQLite Online yoki DB Fiddle) — hech narsa o’rnatmasdan brauzerda mashq qilish uchun. Ularga shaxsiy yoki ish ma’lumotlarini yuklamang.
DB Browser’da baza yaratish
- Dasturni oching va New Database tugmasini bosing. Faylga nom bering, masalan,
oquv_markazi.db, va saqlang. - Jadval yaratish oynasi (Edit table definition) ochiladi — uni Cancel bilan yoping, jadvallarni so’rov orqali yaratamiz.
- Execute SQL yorlig’iga o’ting va quyidagi skriptni nusxalab qo’ying.
- Execute all tugmasini yoki F5 ni bosing.
- O’zgarishlarni faylga yozish uchun Write Changes (Ctrl + S) ni bosing. Bu tugma bosilmaguncha o’zgarishlar faylga yozilmaydi.
- Browse Data yorlig’ida jadvallar paydo bo’lganini tekshiring.
CREATE TABLE kurslar (
id INTEGER PRIMARY KEY,
nomi TEXT,
davomiylik_hafta INTEGER
);
CREATE TABLE oquvchilar (
id INTEGER PRIMARY KEY,
ism TEXT,
shahar TEXT,
yosh INTEGER,
kurs_id INTEGER,
ball INTEGER
);
INSERT INTO kurslar VALUES
(1, 'Kompyuter savodxonligi', 8),
(2, 'Ingliz tili', 12),
(3, 'Data analitika', 10),
(4, 'Mobilografiya', 6);
INSERT INTO oquvchilar VALUES
(1, 'Dilnoza', 'Toshkent', 19, 3, 88),
(2, 'Jasur', 'Samarqand', 24, 1, 75),
(3, 'Malika', 'Namangan', 17, 2, 92),
(4, 'Sardor', 'Toshkent', 31, 3, 64),
(5, 'Nodira', 'Buxoro', 22, 1, 81),
(6, 'Bekzod', 'Qo''qon', 27, 2, NULL),
(7, 'Gulnora', 'Samarqand', 35, 3, 79),
(8, 'Otabek', 'Toshkent', 20, 4, 70);
Bu shartli o’quv markazi: ismlar, yoshlar va ballar o’ylab topilgan. kurs_id — kurslar jadvalidagi id ga ishora. Bekzodning bali hali qo’yilmagan — NULL, ya’ni “qiymat yo’q”. Jadval va ustun nomlarida apostrof va probel ishlatmadik (oquvchilar, kurs_id) — bu ko’p muammoning oldini oladi.
Agar ma’lumotingiz Excel’da bo’lsa, uni CSV formatida saqlab, DB Browser’da File → Import → Table from CSV file orqali jadvalga aylantirish mumkin.
Birinchi so’rovlar: SELECT, FROM, WHERE
SELECT va FROM
Eng oddiy so’rov ikki qismdan iborat: SELECT — qaysi ustunlar kerak, FROM — qaysi jadvaldan.
SELECT ism, shahar FROM oquvchilar;
Natija — sakkiz o’quvchining ismi va shahri. Barcha ustunlar uchun yulduzcha ishlatiladi: SELECT * FROM oquvchilar;, lekin katta jadvallarda faqat keraklilarini yozing. Buyruqlarni katta harf bilan yozish shart emas, ammo o’qishga oson. Nuqtali vergul so’rovni keyingisidan ajratadi.
WHERE: shart bo’yicha tanlash
WHERE Excel’dagi filtr vazifasini bajaradi: faqat shartga mos qatorlarni qoldiradi.
SELECT ism, shahar FROM oquvchilar
WHERE shahar = 'Toshkent';
| ism | shahar |
|---|---|
| Dilnoza | Toshkent |
| Sardor | Toshkent |
| Otabek | Toshkent |
Matnli qiymat bittalik qo’shtirnoq ichida yoziladi, son esa qo’shtirnoqsiz: WHERE yosh > 25 — natijada Sardor (31), Bekzod (27) va Gulnora (35) qoladi. Taqqoslash belgilari: =, <> (teng emas), >, <, >=, <=.
Bir nechta shart: AND, OR, IN, LIKE
WHERE shahar = 'Samarqand' AND yosh < 30— ikkala shart ham bajarilishi kerak. Natija: Jasur.WHERE shahar = 'Buxoro' OR shahar = 'Namangan'— kamida bittasi. Natija: Malika va Nodira.WHERE shahar IN ('Buxoro', 'Namangan')— oldingi so’rovning qisqa yozilishi.WHERE yosh BETWEEN 18 AND 25— oraliq, chegaralar ham kiradi.WHERE ism LIKE 'S%'— “S” harfi bilan boshlanadigan ismlar.%— istalgan miqdordagi belgi. Natija: Sardor.
AND va OR aralash ishlatilsa, qavs qo’ying: WHERE (shahar = 'Buxoro' OR shahar = 'Namangan') AND yosh > 18. Qavssiz so’rov siz kutgandan boshqacha natija berishi mumkin.
Saralash va cheklash: ORDER BY, LIMIT
ORDER BY natijani tartiblaydi: ASC — o’sish bo’yicha (standart), DESC — kamayish bo’yicha. LIMIT esa natijadagi qatorlar sonini cheklaydi. Ikkalasi birga “eng yaxshi uchtalik” kabi savollarga javob beradi:
SELECT ism, ball FROM oquvchilar
ORDER BY ball DESC
LIMIT 3;
| ism | ball |
|---|---|
| Malika | 92 |
| Dilnoza | 88 |
| Nodira | 81 |
ORDER BY shahar, ism — avval shahar, so’ng ism bo’yicha. NULL qayerga tushishi tizimga bog’liq: SQLite’da u eng kichik qiymat, shuning uchun DESC da oxirida turadi.
Muhim qoida: ORDER BY yozilmasa, qatorlar tartibi kafolatlanmaydi. Tartib kerak bo’lsa, uni doim aniq yozing.
Hisoblash: COUNT, SUM, AVG va GROUP BY
Agregat funksiyalar
Agregat funksiyalar ko’p qatordan bitta natija chiqaradi — Excel’dagi SUM, AVERAGE va COUNT formulalariga o’xshaydi.
SELECT COUNT(*) AS jami,
COUNT(ball) AS ball_bor,
ROUND(AVG(ball), 1) AS ortacha_ball,
MAX(ball) AS eng_yuqori
FROM oquvchilar;
| jami | ball_bor | ortacha_ball | eng_yuqori |
|---|---|---|---|
| 8 | 7 | 78.4 | 92 |
COUNT(*) barcha qatorlarni sanaydi — 8 ta, COUNT(ball) esa faqat bali borlarini — 7 ta, chunki Bekzodniki NULL. AVG ham NULL’ni hisobga olmay, yetti kishi bo’yicha hisoblaydi. AS ustunga nom beradi, ROUND(..., 1) bir xonagacha yaxlitlaydi.
SUM yig’indini beradi: SELECT SUM(davomiylik_hafta) FROM kurslar; — barcha kurslar jami 36 hafta. MIN va MAX — eng kichik va eng katta qiymat.
GROUP BY: guruhlab hisoblash
GROUP BY qatorlarni bir xil qiymat bo’yicha guruhlaydi va har guruh uchun alohida hisoblaydi — Excel’dagi yig’ma jadvalga (Pivot table) o’xshaydi. Har bir shaharda nechta o’quvchi bor?
SELECT shahar, COUNT(*) AS soni
FROM oquvchilar
GROUP BY shahar
ORDER BY soni DESC, shahar;
| shahar | soni |
|---|---|
| Toshkent | 3 |
| Samarqand | 2 |
| Buxoro | 1 |
| Namangan | 1 |
| Qo’qon | 1 |
Qoida: SELECT da faqat guruhlangan ustun va agregat funksiyalar bo’ladi. Guruhlanmagan ism ni qo’shsangiz, ko’p tizimlar xato beradi, SQLite esa guruhdan ixtiyoriy bitta ismni chiqaradi — xato ko’rinmagani uchun bu yanada xavfli.
HAVING: guruhlarni filtrlash
WHERE qatorlarni guruhlashdan oldin, HAVING esa tayyor guruhlarni filtrlaydi. Kamida ikki o’quvchisi bor kurslar:
SELECT kurs_id, COUNT(*) AS soni
FROM oquvchilar
GROUP BY kurs_id
HAVING COUNT(*) >= 2;
Natijada 1, 2 va 3-kurslar qoladi, faqat Otabek o’qiydigan 4-kurs tushib qoladi.
Ikki jadvalni bog’lash: JOIN g’oyasi
oquvchilar jadvalida kurs nomi emas, faqat raqami (kurs_id) bor. Nom har qatorda takrorlansa, u o’zgarganda yuzlab joyda tuzatish kerak bo’lardi. Shuning uchun nom bir marta kurslar jadvalida saqlanadi, ikki jadvalni esa kerak paytda JOIN birlashtiradi — Excel’dagi VLOOKUP’ga o’xshab.
SELECT o.ism, k.nomi
FROM oquvchilar AS o
JOIN kurslar AS k ON o.kurs_id = k.id
WHERE k.nomi = 'Data analitika';
| ism | nomi |
|---|---|
| Dilnoza | Data analitika |
| Sardor | Data analitika |
| Gulnora | Data analitika |
o va k — jadvallarning qisqa nomlari. ON o.kurs_id = k.id — bog’lash sharti: o’quvchining kurs_id si kursning id siga teng qatorlar juftlanadi. o.ism va k.nomi ustun qaysi jadvaldan ekanini ko’rsatadi.
JOIN, GROUP BY va agregatlarni birlashtirsak, haqiqiy hisobot hosil bo’ladi:
SELECT k.nomi,
COUNT(*) AS oquvchilar_soni,
ROUND(AVG(o.ball), 1) AS ortacha_ball
FROM oquvchilar AS o
JOIN kurslar AS k ON o.kurs_id = k.id
GROUP BY k.nomi
ORDER BY oquvchilar_soni DESC, k.nomi;
| nomi | oquvchilar_soni | ortacha_ball |
|---|---|---|
| Data analitika | 3 | 77.0 |
| Ingliz tili | 2 | 92.0 |
| Kompyuter savodxonligi | 2 | 78.0 |
| Mobilografiya | 1 | 70.0 |
“Ingliz tili” qatoriga e’tibor bering: o’quvchi ikkita, o’rtacha ball esa faqat Malikaning bali, chunki Bekzodniki NULL. Haqiqiy hisobotda buni izohsiz qoldirib bo’lmaydi.
Oddiy JOIN (to’liq nomi INNER JOIN) faqat ikkala jadvalda mosi bor qatorlarni qaytaradi. Agar o’quvchisi yo’q kurslarni ham ko’rish kerak bo’lsa, LEFT JOIN ishlatiladi — bu keyingi bosqich mavzusi.
Keng tarqalgan xatolar
= NULLbilan tekshirish.WHERE ball = NULLhech qanday qator qaytarmaydi, chunkiNULL“noma’lum” degani va u hech narsaga, hatto o’ziga ham teng emas. To’g’ri yozuv:WHERE ball IS NULLyokiWHERE ball IS NOT NULL. Bizning jadvalda birinchisi Bekzodni qaytaradi.- Qo’shtirnoqlarni adashtirish. Matn bittalik qo’shtirnoqda yoziladi:
'Toshkent'. Qo’shaloq qo’shtirnoq ("...") standart bo’yicha jadval yoki ustun nomi uchun. - O’zbekcha apostrof.
'Qo'qon'yozilsa, SQL matnni “Qo” da tugadi deb hisoblaydi va xato beradi. Matn ichidagi apostrof ikki marta yoziladi:'Qo''qon'. Xuddi shu holat O’g’iloy, Sa’dulla kabi ismlarda ham uchraydi. - Katta-kichik harf. SQLite’da
WHERE shahar = 'toshkent'hech narsa topmaydi, chunki bazada “Toshkent” katta harf bilan yozilgan.LIKEesa ba’zi tizimlarda harf kattaligini farqlaydi, ba’zilarida farqlamaydi. - WHERE’siz DELETE yoki UPDATE.
DELETE FROM oquvchilar;jadvaldagi barcha qatorlarni o’chiradi,UPDATE oquvchilar SET ball = 0;esa hammaning balini nolga aylantiradi. Tizim “Ishonchingiz komilmi?” deb so’ramaydi. Xavfsiz tartib: avval aynan shu shart bilanSELECTyozib, qaysi qatorlar o’zgarishini ko’ring, so’ng uniDELETEga almashtiring. Muhim bazadan oldin zaxira nusxa oling. DB Browser’da Revert Changes yozilmagan o’zgarishlarni bekor qiladi, lekin ish serverida bunday tugma bo’lmasligi mumkin. - Buyruqlar tartibi. Yozish tartibi qat’iy:
SELECT,FROM,JOIN,WHERE,GROUP BY,HAVING,ORDER BY,LIMIT.WHEREniGROUP BYdan keyin yozsangiz, xato chiqadi. - Xato xabarini o’qimaslik. “no such column” yoki “syntax error” muammo joyini ko’rsatadi: ko’pincha nomdagi harf xatosi, ortiqcha vergul yoki yopilmagan qo’shtirnoq.
Amaliy mashq va tekshiruv ro’yxati
Yuqoridagi skript bilan yaratilgan bazada quyidagi so’rovlarni o’zingiz yozing. Avval natijani taxmin qiling, keyin so’rovni ishga tushirib solishtiring.
- Samarqandlik o’quvchilarning ismi va yoshi.
- Yoshi 18 dan 25 gacha bo’lgan o’quvchilar, yosh bo’yicha o’sish tartibida.
- Bali 80 dan yuqori bo’lgan o’quvchilar soni.
- Har bir kurs nomi va undagi eng yuqori ball (
JOIN,GROUP BY,MAX). - Bali qo’yilmagan o’quvchi va uning kursi nomi.
- Qiyinroq:
kurslarjadvaliga yangi kurs qo’shing (INSERT INTO), keyinLEFT JOINhaqida o’qib, o’quvchisi yo’q kurslarni ham ko’rsatadigan so’rov tuzing.
Tekshirish uchun javoblar: 1) Jasur 24, Gulnora 35; 2) Dilnoza 19, Otabek 20, Nodira 22, Jasur 24; 3) 3 ta; 4) Data analitika 88, Ingliz tili 92, Kompyuter savodxonligi 81, Mobilografiya 70; 5) Bekzod, Ingliz tili.
Keyin o’z ma’lumotingizga o’ting: masalan, oilaviy kutubxonadagi kitoblar yoki sport to’garagidagi mashg’ulot soatlari ro’yxatini CSV orqali SQLite’ga yuklab, savollaringizga so’rov yozing.
So’rovni ishga tushirishdan oldingi checklist
- Kerakli ustunlar aniq yozilgan,
SELECT *faqat tekshiruv uchun. - Matnlar bittalik qo’shtirnoqda, ichidagi apostrof ikki marta yozilgan.
NULLfaqatIS NULLyokiIS NOT NULLbilan tekshirilgan.ANDvaORaralash bo’lsa, qavslar qo’yilgan.- Tartib kerak bo’lsa,
ORDER BYyozilgan. GROUP BYishlatilsa,SELECTda faqat guruhlangan ustunlar va agregatlar bor.DELETEvaUPDATEdan oldin xuddi shu shart bilanSELECTishga tushirilgan va zaxira nusxa olingan.- Natija sog’lom fikrga mos: qatorlar soni va raqamlar kutilgan oraliqda.
Bir necha qatorli so’rov Excel’dagi uzoq qo’l mehnatining o’rnini bosishi mumkin. Har kuni 15–20 daqiqa mashq qilsangiz, asosiy buyruqlar tez orada odatga aylanadi.
Agar SQL, Excel va ma’lumotlar tahlilini o’qituvchi bilan tizimli o’rganmoqchi bo’lsangiz, assotsiatsiyamizning bepul data analitika dasturi va boshqa o’quv dasturlari bilan tanishing. Tayyor bo’lsangiz, ariza qoldiring — mutaxassislarimiz siz bilan bog’lanadi.