SQL Master πŸ‡ΊπŸ‡Ώ
22 subscribers
1 photo
1 video
55 links
SQL'ni video ko'rib emas, yozib o'rganing. 200+ real masala β€” Uzum, Click, taksi mavzularida. Yozasiz, tizim tekshiradi.

πŸ‘‰ sqlmaster.uz

Admin: @fast_support_admin
Download Telegram
Ko'pchilik SQL'ni "bilaman" deb o'ylaydi. Lekin ish suhbatida oddiy JOIN yoki Window funksiya so'ralganda qotib qoladi.

Sababi oddiy β€” video ko'rish bilan SQL o'rganilmaydi. SQL faqat yozib, xato qilib, tuzatib o'rganiladi.

Bunda sizga sqlmaster.uz yordam beradi.

Bu β€” sof amaliyot platformasi. Dars yo'q, faqat masalalar:

πŸ”Ή 200+ masala (60+ saytga joylangan) β€” Uzum, Click, taksi kabi real biznes mavzularida
πŸ”Ή SQL yozasiz, tizim darrov tekshiradi
πŸ”Ή JOIN, Subquery, Window, CTE, Agregatsiya β€” mavzu bo'yicha mashq qiling
πŸ”Ό Oson'dan Qiyin'gacha bosqichma-bosqich

Data analitikaga kirmoqchi bo'lsangiz β€” bu yerdan boshlang.

πŸ–₯ sqlmaster.uz β€” bepul, hoziroq sinab ko'ring.

Rasmiy kanal: @sqlmasteruz
Please open Telegram to view this post
VIEW IN TELEGRAM
SQL Master πŸ‡ΊπŸ‡Ώ: Ish suhbatida "JOIN yozib bering" deyishsa β€” ko'pchilik shu yerda to'xtaydi. Nazariya yetarli emas; SQL'ni masala yechib, xato qilib, tuzatib o'rganasiz.

Shuning uchun sqlmaster.uz da 200+ masala yig'ilgan πŸ‘‡:
πŸ”Ή Real biznes vaziyatlari: Uzum, Click, taksi
πŸ”Ή Yozasiz β€” tizim darrov tekshiradi
πŸ”Ή Mavzular: JOIN, Subquery, Window, CTE, Agregatsiya
πŸ”Ή Bosqichma-bosqich: Oson β†’ O'rtacha β†’ Qiyin

Bugun 10 ta masala yeching β€” ertaga suhbatda qotmaysiz.
πŸ’Ύ sqlmaster.uz β€” bepul, hozir sinab ko'ring.

Rasmiy kanal: @sqlmasteruz
⚑1πŸ”₯1πŸ•Š1πŸ†1πŸ†’1
Endi masalani yechish bilan cheklanib qolmaysiz β€” Muhokama bo'limini qo'shdik πŸ’¬; chunki "Ikki odamning birga yurgani bir odamdan yaxshiroqdir" degan hikmatdayin, o'rganish ham birgalikda bo'lganda ma'no topadi.

Har bir masalada endi:
πŸ”Ή O'z yondashuvingizni boshqalar bilan bo'lishasiz;
πŸ”Ή Qotib qolgan joyingizda savol berasiz;
πŸ”Ή Boshqalarga yordam berib, o'zingiz ham mustahkamlaysiz; chunki "Berish olishdan yaxshiroqdir" degan so'z bo'ldi.

Bitta masalaning 5 xil yechimi bo'ladi β€” birov subquery bilan, birov window funksiya bilan. Ana shu farqni ko'rish orqali chinakam o'rganiladi; chunki "Ishoning, ko'ring, va o'zingiz qiling".

Masalani yeching β†’ Muhokama bo'limiga o'ting β†’ birinchi izohni siz qoldiring πŸ‘‡

🌐 sqlmaster.uz β€” bepul, hoziroq sinab ko'ring.

Rasmiy kanal: @sqlmasteruz
Please open Telegram to view this post
VIEW IN TELEGRAM
✍1😒1🀩1πŸ†’1
Please open Telegram to view this post
VIEW IN TELEGRAM
❀1
LEFT JOIN yozdingiz, lekin u INNER JOIN bo'lib qoldi πŸ€¦β€β™‚οΈ
Bu β€” SQL suhbatlarida eng ko'p "yiqitadigan" xato.
Vazifa: har bir mijozni va uning yanvardagi buyurtmalari sonini chiqaring. Buyurtma bermaganlar ham ro'yxatda 0 bilan turishi kerak.

Ko'pchilik shunday yozadi πŸ‘‡
SELECT c.name, COUNT(o.id) AS orders
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.created_at >= '2026-01-01'
GROUP BY c.name;

Natija: yanvarda buyurtma bermagan mijozlar umuman yo'qoladi.

Sababi oddiy:
LEFT JOIN avval o'ng jadvaldan mos qator topmasa, o.* ustunlarini NULL qilib qo'yadi. Keyin WHERE o.created_at >= ... ishga tushadi va o'sha NULL qatorlarni o'chirib tashlaydi. Ya'ni siz yozgan LEFT JOIN amalda INNER JOIN.

To'g'ri variant β€” filtrni ON ichiga olish πŸ‘‡
SELECT c.name, COUNT(o.id) AS orders
FROM customers c
LEFT JOIN orders o
ON o.customer_id = c.id
AND o.created_at >= '2026-01-01'
GROUP BY c.name;

πŸ“Œ Yodda tuting:
ON β€” join qilishdan oldin o'ng jadvalni filtrlaydi
WHERE β€” join tugagandan keyin butun natijani filtrlaydi
Va yana bir tuzoq: bu yerda COUNT(*) emas, COUNT(o.id) yozilgan. COUNT(*) buyurtmasi yo'q mijozga ham 1 deb ko'rsatadi, chunki NULL bo'lsa ham qator mavjud.

Shunga o'xshash 200+ masala πŸ‘‰ sqlmaster.uz

Rasmiy kanal: @sqlmasteruz
Marhamat β€” fan-out (dublikat qatorlar) mavzusidagi post:

JOIN dan keyin summangiz 3 barobar oshib ketdimi? πŸ“ˆ
Hisobot yozdingiz, raqam boshliqqa ketdi, keyin ma'lum bo'ldi β€” savdo hajmi aslida uch barobar kam. Tanish holat.
Vazifa: har bir mijoz bo'yicha umumiy buyurtma summasi va sotib olingan mahsulotlar soni.

Ko'pchilik shunday yozadi πŸ‘‡
SELECT c.name,
SUM(o.amount) AS jami_summa,
SUM(i.quantity) AS mahsulotlar
FROM customers c
JOIN orders o ON o.customer_id = c.id
JOIN order_items i ON i.order_id = o.id
GROUP BY c.name;

Muammo: bitta buyurtmada 3 ta mahsulot bo'lsa, JOIN o'sha buyurtmani 3 marta takrorlaydi. Demak o.amount ham 3 marta qo'shiladi.
SUM(o.amount) = xato. SUM(i.quantity) = to'g'ri.
Ya'ni bitta so'rovda bir ustun to'g'ri, ikkinchisi noto'g'ri β€” shuning uchun ham bu xatoni payqash qiyin.

Sabab: JOIN 1:N munosabatda chap jadvalning qatorini ko'paytiradi (fan-out). Agar ikkita 1:N jadval qo'shsangiz β€” qatorlar ko'payib emas, ko'paytirilib ketadi (3 ta mahsulot Γ— 2 ta to'lov = 6 qator).
Yechim: har bir darajani alohida agregatsiya qilib, keyin join qiling πŸ‘‡
WITH ord AS (
SELECT customer_id, SUM(amount) AS jami_summa
FROM orders
GROUP BY customer_id
),
itm AS (
SELECT o.customer_id, SUM(i.quantity) AS mahsulotlar
FROM orders o
JOIN order_items i ON i.order_id = o.id
GROUP BY o.customer_id
)
SELECT c.name, ord.jami_summa, itm.mahsulotlar
FROM customers c
LEFT JOIN ord ON ord.customer_id = c.id
LEFT JOIN itm ON itm.customer_id = c.id;


πŸ” Tekshirish usuli: JOIN dan oldin va keyin COUNT(*) ni solishtiring. Qatorlar soni oshgan bo'lsa β€” join kaliti o'ng jadvalda unikal emas, demak summalaringizga ishonmang.
⚠️ SUM(DISTINCT o.amount) bilan "tuzatmang" β€” ikki mijozning summasi tasodifan teng bo'lsa, bittasi yo'qoladi.

Amaliyot πŸ‘‰ sqlmaster.uz

Rasmiy kanal: @sqlmasteruz
β˜• Ertalabki savol

users jadvalida 100 ta qator bor. Ulardan 30 tasida phone ustuni NULL.

Shu so'rov nima qaytaradi? πŸ‘‡
SELECT COUNT(*), COUNT(phone)
FROM users;


A) 100 va 100
B) 100 va 70
C) 70 va 70

Javobingizni izohda yozing β€” bugun 20:00 da tahlil qilamiz πŸ‘‡

βž–βž–βž–βž–βž–βž–βž–βž–
πŸ’Ύ Amaliyot: sqlmaster.uz
πŸ“’ @sqlmasteruz
⚠️ NOT IN sizni jimgina aldaydi

Vazifa: hech qachon buyurtma bermagan mijozlarni toping.

Ko'pchilik shunday yozadi πŸ‘‡
SELECT name
FROM customers
WHERE id NOT IN (SELECT customer_id FROM orders);


Natija: bo'sh jadval. Bitta ham mijoz chiqmaydi, holbuki ular bor.

Sabab. orders.customer_id ustunida bitta NULL bo'lsa yetarli. id NOT IN (1, 2, NULL) ifodasi hech qachon TRUE bo'lmaydi β€” u UNKNOWN qaytaradi, chunki SQL Β«bu qiymat NULL ga teng emasmi?Β» degan savolga javob bera olmaydi. WHERE esa faqat TRUE qatorlarni o'tkazadi.

To'g'ri variant πŸ‘‡
SELECT c.name
FROM customers c
WHERE NOT EXISTS (
SELECT 1 FROM orders o
WHERE o.customer_id = c.id
);


Yoki LEFT JOIN ... IS NULL orqali:
SELECT c.name
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.id IS NULL;


πŸ“Œ Qoida: NOT IN faqat ustun NOT NULL ekaniga ishonchingiz komil bo'lsa. Aks holda doim NOT EXISTS.

Bu tuzoq ish suhbatlarida ataylab so'raladi.

🎯 Endi amaliyot: Qora ro'yxatda bo'lmagan mijozlar (NULL tuzog'i)
Aynan shu tuzoq ustiga qurilgan masala. NOT EXISTS bilan yozib ko'ring πŸ‘‡

βž–βž–βž–βž–βž–βž–βž–βž–
πŸ’Ύ Amaliyot: sqlmaster.uz
πŸ“’ @sqlmasteruz
βœ… Ertalabki savol javobi: B β€” 100 va 70

COUNT(*) qatorlarni sanaydi β€” 100 ta.
COUNT(phone) esa faqat NULL bo'lmagan qiymatlarni sanaydi β€” 70 ta.

Bu farq hisobotlarda jimgina xato keltirib chiqaradi.

πŸ“Š Yodda tuting:
COUNT(*) β€” qatorlar soni
COUNT(ustun) β€” NULL bo'lmagan qiymatlar soni
COUNT(1) β€” COUNT(*) bilan bir xil, tezligi ham bir xil
COUNT(DISTINCT ustun) β€” takrorlanmaydigan qiymatlar

⚠️ Xuddi shu mantiq AVG va SUM ga ham tegishli:
SELECT AVG(salary) FROM employees;

Maoshi kiritilmagan (NULL) xodimlar o'rtachaga umuman qo'shilmaydi. Ularni nol deb hisoblamoqchi bo'lsangiz:
SELECT AVG(COALESCE(salary, 0)) FROM employees;

Ikki so'rov ikki xil raqam qaytaradi β€” qaysi biri to'g'ri ekanini siz hal qilasiz, baza emas.

πŸ’¬ Shu xatoga duch kelganmisiz? Izohda yozing.

🎯 Endi amaliyot: O'rtacha: NULL larni hisobga olish
O'qib tushundingiz β€” endi o'zingiz yozib ko'ring πŸ‘‡

βž–βž–βž–βž–βž–βž–βž–βž–
πŸ’Ύ Amaliyot: sqlmaster.uz
πŸ“’ @sqlmasteruz
status ustunida NULL qatorlar bor. Β«SELECT * FROM tasks WHERE status <> 'active'Β» β€” o'sha NULL qatorlar natijaga chiqadimi?
Anonymous Quiz
0%
Ha, chiqadi
100%
Yo'q, chiqmaydi
0%
Bazaga bog'liq
πŸ”₯1