SQL · Kerakli ustun va qatorlarni olish: SELECT, WHERE, DISTINCT, LIKE, NULL
SELECT va WHERE
Beginner 9 masala
BoshlashNazariya
SQL so‘rovi
SQL so‘rovi qaysi ma’lumot kerakligini aytadi, qanday topishni emas.
SELECT name, score
FROM students
WHERE city = 'Toshkent'
ORDER BY score DESC
LIMIT 3;
Bajarilish tartibi
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT. Shuning uchun WHERE da
COUNT(*) ishlatib bo‘lmaydi — guruh shartini HAVING ga yozing.
JOIN
SELECT c.name, SUM(o.amount) AS total
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.id, c.name;
LEFT JOIN buyurtmasiz mijozlarni ham qoldiradi (ularda o.amount — NULL). NULL bilan solishtirish
IS NULL orqali, = NULL emas.
SELECT
SELECT jadvaldan kerakli ustunlarni oladi.
SELECT name, age FROM students; -- ikki ustun
SELECT * FROM students; -- hamma ustunlar
SELECT name, price * qty AS total -- hisoblangan ustun, AS — nom berish
FROM order_items;
Maslahatlar
- Masala so‘ragan ustunlarni o‘sha tartibda chiqaring —
*ko‘pincha xato javob beradi. - Ustun nomi masalada ko‘rsatilgan bo‘lsa,
ASbilan aynan shunday nom bering. - SQL kalit so‘zlari katta-kichik harfga sezgir emas, lekin o‘qish uchun katta harfda yozish odat.
WHERE
WHERE faqat shartga mos qatorlarni qoldiradi.
SELECT name FROM students WHERE city = 'Toshkent';
SELECT * FROM products WHERE price BETWEEN 1000 AND 5000;
SELECT * FROM students WHERE grade >= 4 AND city <> 'Samarqand';
SELECT * FROM orders WHERE status IN ('new', 'paid');
Diqqat
- Satrlar bitta qo‘shtirnoqda:
'Toshkent'. ANDORdan oldin bajariladi — aralash shartlarni qavsga oling:(a OR b) AND c.NULLbilan=ishlamaydi:IS NULL/IS NOT NULLishlating.
DISTINCT
DISTINCT takrorlangan qatorlarni olib tashlaydi.
SELECT DISTINCT city FROM students; -- har shahar bir marta
SELECT DISTINCT city, faculty FROM students; -- juftliklar bo‘yicha takrorsiz
SELECT COUNT(DISTINCT city) FROM students; -- nechta turli shahar
DISTINCT butun qatorga ta’sir qiladi, bitta ustunga emas: SELECT DISTINCT a, b — (a, b) juftliklari takrorsiz.
LIKE
LIKE satrni andoza bo‘yicha qidiradi: % — istalgan uzunlikdagi belgilar, _ — bitta belgi.
SELECT name FROM students WHERE name LIKE 'A%'; -- A bilan boshlanadi
SELECT name FROM students WHERE name LIKE '%ova'; -- -ova bilan tugaydi
SELECT name FROM students WHERE name LIKE '%li%'; -- ichida "li" bor
SELECT code FROM rooms WHERE code LIKE 'A_1'; -- A, istalgan bitta belgi, 1
SQLite’da LIKE lotin harflari uchun katta-kichik harfni farqlamaydi. Aniq moslik kerak bo‘lsa — =.
NULL
NULL — «qiymat yo‘q». U hech narsaga teng emas, hatto o‘ziga ham.
SELECT name FROM customers WHERE phone IS NULL;
SELECT name, COALESCE(phone, 'yo‘q') AS phone FROM customers; -- NULL o‘rniga qiymat
Diqqat
WHERE phone = NULLhech qachon ishlamaydi.COUNT(*)barcha qatorlarni,COUNT(phone)faqatNULLbo‘lmaganlarini sanaydi.AVG,SUMNULLlarni o‘tkazib yuboradi.LEFT JOINdan keyin moslik topilmagan ustunlarNULLbo‘ladi — «buyurtmasi yo‘q mijozlar» shundan topiladi.