Tarkibga o'tish

SQL va MySQL β€” Noldan boshlovchilar uchun amaliy kitob

Bu kitob hech qachon dasturlash qilmagan odam ham tushunadigan tilda yozilgan. Har bir bobda: sodda nazariya β†’ tayyor misollar β†’ 20 ta masala (o'zingiz yechasiz). Jami 28 bob, 560 masala.

🎨 Har bob SVG diagrammalar bilan boyitilgan β€” JOIN, GROUP BY, indeks, tranzaksiya, normalizatsiya kabi tushunchalar ko'z bilan ko'rib o'rganiladi.

Qoida: SQL o'qib o'rganilmaydi β€” YOZIB o'rganiladi. Har bir masalani kompyuterda o'zingiz tering. Xato chiqsa β€” bu yaxshi, xatodan o'rganasiz.


Qanday o'qish kerak

  1. Boblarni tartib bilan o'qing (01 β†’ 02 β†’ ...). Har biri oldingisiga tayanadi.
  2. 3-bobdagi 4 ta amaliyot bazasini (kutubxona, do'kon, klinika, taksi) albatta o'rnating β€” butun kitob masalalari shularga asoslangan.
  3. Har bob oxiridagi 20 ta masalani o'zingiz yeching β€” kod misollarini ko'chirib qo'yish bilan SQL o'rganilmaydi.
  4. Diagrammalar tushunchani tezroq singdiradi β€” ularga e'tibor bering.

Talab

Kerak Daraja
Kompyuter (Windows / macOS / Linux) Shart
MySQL 8.0 (2-bobda o'rnatamiz) Shart
Oldingi dasturlash tajribasi Shart emas

I qism β€” Tanishuv

# Bob Nima o'rganasiz
01 Ma'lumotlar bazasi nima? Ma'lumotlar bazasi nima va u daftar yoki Excel'dan nimasi bilan kuchli ekanini, jadval/qator/ustun/id tushunchalarini, SQL (til) bilan MySQL (dastur) farqini va klient-server modelini kutubxona misolida o'rganamiz. Bob oxirida kompyutersiz yechiladigan 20 ta qog'oz masalasi bor.
02 MySQL'ni o'rnatish va ishga tushirish MySQL'ning server-klient arxitekturasini tushunib, uni Windows (Laragon), macOS (brew) va Linux (apt) tizimlariga o'rnatamiz, terminal hamda DBeaver orqali ulanib, birinchi SQL buyruqlarimizni bajarishni o'rganamiz.
03 Amaliyot bazalarini tayyorlash (4 ta tizim) Butun kitob davomida ishlatiladigan 4 ta amaliyot bazasini (kutubxona, do'kon, klinika, taksi) yaratamiz, jadvallar orasidagi bog'lanishlarni ER-diagrammalarda ko'rib, skriptlarni bajarib tekshirishni o'rganamiz.

II qism β€” Asoslar

# Bob Nima o'rganasiz
04 CREATE β€” baza va jadval yaratish CREATE DATABASE, USE va CREATE TABLE bilan birinchi baza va jadvalimizni quramiz; PRIMARY KEY, AUTO_INCREMENT, NOT NULL, UNIQUE, DEFAULT qoidalarini hamda SHOW/DESCRIBE/DROP yordamchi buyruqlarini o'rganamiz.
05 Ma'lumot turlari Sonlar (INT, DECIMAL, FLOAT), matnlar (CHAR, VARCHAR, TEXT), sana-vaqt va maxsus turlar (ENUM, BOOLEAN, JSON) bilan tanishamiz; har bir ustunga to'g'ri tur tanlashni va pul nima uchun faqat DECIMAL'da saqlanishini o'rganamiz.
06 INSERT β€” ma'lumot kiritish Jadvalga yangi qator qo'shishni o'rganamiz: INSERT INTO anatomiyasi, ko'p qatorli kiritish, AUTO_INCREMENT va DEFAULT qanday ishlashi, NOW() va LAST_INSERT_ID() hamda INSERT xatolarini o'qib tushunish.
07 SELECT β€” ma'lumot o'qish SQL'ning eng ko'p ishlatiladigan buyrug'i β€” SELECT bilan jadvaldan kerakli ustunlarni tanlab o'qishni, alias (AS) berishni, SELECT ichida hisob-kitob qilishni va DISTINCT bilan takrorlarni olib tashlashni o'rganamiz.
08 WHERE β€” filtrlash Qatorlarni shart bo'yicha filtrlashni o'rganamiz: taqqoslash operatorlari, AND/OR/NOT mantiqiy bog'lovchilari va qavslar, BETWEEN va IN, LIKE naqshlari hamda NULL bilan to'g'ri ishlash (IS NULL).
09 ORDER BY, LIMIT, DISTINCT Natijani ORDER BY bilan saralashni, LIMIT/OFFSET bilan kesishni ("eng katta N ta" qolipi va sahifalash) hamda DISTINCT bilan takror qiymatlarni olib tashlashni o'rganamiz.
10 Built-in funksiyalar (matn, son, sana) MySQL'ning tayyor funksiyalarini o'rganamiz: matn (UPPER, CONCAT, SUBSTRING), son (ROUND, CEIL, FLOOR), sana (NOW, DATEDIFF, DATE_FORMAT, TIMESTAMPDIFF), shartli qiymat (IF, CASE) va NULL bilan ishlash (IFNULL, COALESCE) β€” hammasi hayotiy misollarda.

III qism β€” Kuchli qurollar

# Bob Nima o'rganasiz
11 Aggregate funksiyalar va GROUP BY COUNT, SUM, AVG, MIN, MAX bilan ko'p qatordan bitta xulosa chiqarishni, "har bir ... bo'yicha" savollariga GROUP BY bilan javob berishni va guruhlarni HAVING bilan filtrlashni o'rganamiz. COUNT(*) va COUNT(ustun) orasidagi NULL farqi hamda query bajarilish tartibini ham ko'rib chiqamiz.
12 JOIN β€” jadvallarni bog'lash Bo'lingan ma'lumotni qaytadan yig'ishni β€” JOIN'ni o'rganamiz: ON sharti, INNER va LEFT JOIN farqi, anti-join qolipi, LEFT JOIN + WHERE tuzog'i, 3-4 jadvalli zanjirlar va JOIN + GROUP BY bilan real hisobotlar.
13 UNION β€” natijalarni birlashtirish Bir nechta SELECT natijasini bitta ro'yxatga "tagma-tag" ulaydigan UNION va UNION ALL'ni, ustun yetishmaganda NULL bilan to'ldirishni, UNION'da ORDER BY/LIMIT qoidalarini va JOIN bilan farqini o'rganamiz.
14 Subquery β€” query ichida query Query ichiga yana bitta query joylashni o'rganamiz: skalyar, IN-ro'yxat va correlated (EXISTS) subquery turlari, mashhur NOT IN + NULL tuzog'idan qochish hamda FROM ichidagi hosila jadval bilan ikki bosqichli hisob-kitoblar.
15 CTE β€” WITH bilan ishlash WITH yordamida murakkab query'ni nomli, yuqoridan pastga o'qiladigan bosqichlarga bo'lishni, bir nechta CTE'ni zanjir qilishni va recursive CTE bilan jadvalsiz sonlar, kalendar hamda daraxt strukturalar hosil qilishni o'rganamiz.
16 Window funksiyalar GROUP BY'dan farqli, qatorlarni yo'qotmasdan guruh statistikasini hisoblashni o'rganamiz: OVER va PARTITION BY, ROW_NUMBER/RANK/DENSE_RANK bilan raqamlash, LAG/LEAD, yig'ilib boruvchi summa va LAST_VALUE'dagi frame tuzog'i.

IV qism β€” Ma'lumotni boshqarish

# Bob Nima o'rganasiz
17 UPDATE va DELETE β€” chuqur Ma'lumotni o'zgartirish (UPDATE) va o'chirish (DELETE)ni xavfsiz ishlash odati bilan o'rganamiz: "avval SELECT" protokoli, SQL_SAFE_UPDATES kamari, NULL tuzog'i, soft delete yondashuvi va DELETE/TRUNCATE/DROP farqlari.
18 ALTER, Constraint, Foreign Key Tayyor jadvalni ALTER TABLE bilan buzmasdan o'zgartirishni, bazaning o'zi qo'riqlaydigan qoidalar β€” NOT NULL, UNIQUE, DEFAULT, CHECK constraint'larini va jadvallararo bog'lanish kafolati FOREIGN KEY'ni o'rganamiz; ota qator o'chirilganda nima bo'lishini ON DELETE (RESTRICT, CASCADE, SET NULL) bilan boshqaramiz.
19 Tranzaksiyalar Tranzaksiya β€” "yo hammasi, yo hech narsa" tamoyilini o'rganamiz: START TRANSACTION, COMMIT va ROLLBACK, autocommit rejimi, parallel ishlashda FOR UPDATE qulfi, deadlock holati va ACID xossalari.
20 Normalizatsiya β€” to'g'ri schema Bitta katta jadvalning kasalliklarini (takrorlash, yangilash/o'chirish/kiritish anomaliyalari), normalizatsiyaning 3 sodda qoidasini (1NF, 2NF, 3NF), bog'lanish turlarini (1:1, 1:N, N:M) va qachon ataylab takrorlash (snapshot, denormalizatsiya) to'g'ri ekanini o'rganamiz.

V qism β€” Professional daraja

# Bob Nima o'rganasiz
21 Indekslar Indeksni kitob oxiridagi alfavit ko'rsatkich o'xshatishi bilan tushunamiz: 1 million qatorli jadvalda full scan va indeksli qidiruv farqini o'z qo'limiz bilan o'lchaymiz, B-tree daraxti, indeks ishlamaydigan tuzoqlar, kompozit indeks (chap prefiks qoidasi) va indeksning narxini o'rganamiz.
22 VIEW Takrorlanadigan SELECT'ni bazada nom berib saqlaydigan VIEW'ni chuqur o'rganamiz: CREATE va CREATE OR REPLACE VIEW, ustunlarni qayta nomlash, view'ning ichki mexanikasi (ma'lumot saqlamasligi va nega tezlik bermasligi), yangilanadigan va faqat-o'qish view'lar, WITH CHECK OPTION, ALGORITHM turlari, view'ni xavfsizlik qatlami sifatida ishlatish va MySQL'da materialized view'ni jadval + EVENT bilan simulyatsiya qilish.
23 Stored Procedure va Function Bazaning ichida yashaydigan kod β€” stored PROCEDURE va FUNCTION'ni o'rganamiz: DELIMITER, IN/OUT/INOUT parametrlar, DECLARE bilan lokal o'zgaruvchi, boshqaruv oqimi (IF/CASE/WHILE/REPEAT/LOOP), xatolarni DECLARE ... HANDLER bilan ushlash va SIGNAL/RESIGNAL bilan o'z xatongni "otish", CREATE FUNCTION (RETURNS, DETERMINISTIC) hamda "biznes-mantiq bazadami yoki ilovadami?" munozarasi.
24 Trigger va Event Bazaning ikkita "avtomat" mexanizmi: jadval ustiga qo'yilgan soqchi β€” TRIGGER (BEFORE/AFTER Γ— INSERT/UPDATE/DELETE 6 turi, OLD/NEW psevdo-jadvallari, FOLLOWS/PRECEDES tartibi, audit/tarix naqshi va cheklovlari) hamda bazaning budilnigi β€” EVENT (event_scheduler, CREATE EVENT, ON SCHEDULE, ON COMPLETION PRESERVE) bilan eski log tozalash va arxivlash kabi vazifalarni o'rganamiz.
25 Cursor va qatorma-qator ishlov Stored program ichida natija to'plamini qatorma-qator aylanadigan cursor (DECLARE/OPEN/FETCH/CLOSE va NOT FOUND handler) sintaksisini, RBAR antipatternini va deyarli har doim tezroq bo'lgan to'plam-asosli (set-based) muqobilni o'rganamiz. Stored procedure (23-bob) ustiga quriladi β€” cursor faqat procedure ichida yashaydi.
26 EXPLAIN va optimizatsiya Sekin query'ning sababini EXPLAIN bilan ochishni o'rganamiz: type/rows/key ustunlarini o'qish, const'dan ALL'gacha shkala, va to'liq optimizatsiya sikli β€” sekin query β†’ EXPLAIN β†’ indeks β†’ qayta o'lchash.
27 Xavfsizlik va administratsiya Har ilovaga alohida foydalanuvchi yaratish va GRANT bilan minimal ruxsat berishni, SQL injection hujumi qanday ishlashini va prepared statement bilan himoyalanishni, mysqldump bilan backup/restore qilishni o'rganamiz.
28 Yakuniy loyihalar O'rganganlarimizni jamlab 3 ta to'liq tizimni noldan quramiz: talablar β†’ schema β†’ CREATE β†’ ma'lumotlar β†’ hisobot query'lari. Oxirida kitobdan keyingi yo'l xaritasi: PostgreSQL, ORM va backend tomon.

Muallif

Oqil Imomnazarov β€” ioqil.uz Β· Telegram Β· YouTube

Kitob bepul tarqatiladi (CC BY-NC-SA 4.0). Savdo qilish taqiqlanadi.