SELECT sintaksisi
SELECT column1, column2, column3, ...
FROM table_name
WHERE condition
ORDER BY column_name
LIMIT number;
1. Barcha ma'lumotlarni tanlash
-- Barcha ustunlar
SELECT * FROM users;
-- Belgili ustunlar
SELECT name, email FROM users;
-- Ustun nomini o'zgartirish (alias)
SELECT name AS ism, email AS pochta FROM users;
2. WHERE shartlari
-- Tenglik tekshirish
SELECT * FROM users WHERE age = 25;
-- Katta/kichik tekshirish
SELECT * FROM users WHERE age > 25;
SELECT * FROM users WHERE age < 30;
SELECT * FROM users WHERE age >= 25 AND age <= 35;
-- Matn qidirish
SELECT * FROM users WHERE name = 'Ali Valiyev';
SELECT * FROM users WHERE name LIKE 'Ali%'; -- Ali bilan boshlanadigan
SELECT * FROM users WHERE name LIKE '%Ali%'; -- Ali ni o'z ichiga olgan
3. Mantiqiy operatorlar
-- AND (va)
SELECT * FROM users WHERE age > 25 AND age < 35;
-- OR (yoki)
SELECT * FROM users WHERE name = 'Ali' OR name = 'Malika';
-- NOT (emas)
SELECT * FROM users WHERE NOT age = 25;
-- Murakkab shartlar
SELECT * FROM users
WHERE (age > 25 AND age < 35) OR (name LIKE 'A%');
4. NULL qiymatlar bilan ishlash
-- NULL qiymatlarni topish
SELECT * FROM users WHERE phone IS NULL;
-- NULL bo'lmagan qiymatlarni topish
SELECT * FROM users WHERE phone IS NOT NULL;
-- NULL qiymatni almashtirish
SELECT name, COALESCE(phone, 'Telefon yo''q') AS telefon FROM users;
5. DISTINCT - Takrorlanmas qiymatlar
-- Takrorlanmas qiymatlar
SELECT DISTINCT age FROM users;
-- Takrorlanmas juftliklar
SELECT DISTINCT name, age FROM users;
6. ORDER BY - Saralash
-- O'sish tartibida
SELECT * FROM users ORDER BY age;
-- Kamayish tartibida
SELECT * FROM users ORDER BY age DESC;
-- Bir nechta ustun bo'yicha saralash
SELECT * FROM users ORDER BY name ASC, age DESC;
-- NULL qiymatlar bilan ishlash
SELECT * FROM users ORDER BY phone NULLS LAST;
7. LIMIT - Cheklash
-- Birinchi 5 ta qator
SELECT * FROM users LIMIT 5;
-- 5 ta qatorni o'tkazib, keyingi 10 tasini olish
SELECT * FROM users LIMIT 10 OFFSET 5;
-- Eng yoshi katta 3 ta foydalanuvchi
SELECT * FROM users ORDER BY age DESC LIMIT 3;
8. Amaliy misollar
Kutubxona tizimi
-- Jadvallar
CREATE TABLE authors (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
birth_year INTEGER,
nationality TEXT
);
CREATE TABLE books (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
author_id INTEGER,
publication_year INTEGER,
pages INTEGER,
price REAL,
FOREIGN KEY (author_id) REFERENCES authors(id)
);
-- Ma'lumotlar
INSERT INTO authors (name, birth_year, nationality) VALUES
('Alisher Navoiy', 1441, 'O''zbek'),
('Abdulla Avloniy', 1878, 'O''zbek'),
('Chingiz Aytmatov', 1928, 'Qirg''iz');
INSERT INTO books (title, author_id, publication_year, pages, price) VALUES
('Xamsa', 1, 1495, 500, 25.50),
('Turkiy guliston', 1, 1499, 300, 20.00),
('O''zbek tili grammatikasi', 2, 1920, 200, 15.75),
('Jamilia', 3, 1958, 150, 12.00);
-- So'rovlar
-- Barcha mualliflar
SELECT * FROM authors;
-- O'zbek mualliflari
SELECT * FROM authors WHERE nationality = 'O''zbek';
-- 1900 yildan keyin tug'ilgan mualliflar
SELECT * FROM authors WHERE birth_year > 1900;
-- Kitoblar 200 sahifadan ko'p
SELECT * FROM books WHERE pages > 200;
-- Eng qimmat kitoblar (top 3)
SELECT * FROM books ORDER BY price DESC LIMIT 3;
-- Kitob nomi 'X' bilan boshlanadigan
SELECT * FROM books WHERE title LIKE 'X%';
-- 20 dan 30 gacha narxli kitoblar
SELECT * FROM books WHERE price BETWEEN 20 AND 30;
9. Murakkab so'rovlar
-- Eng yoshi kichik muallif
SELECT * FROM authors ORDER BY birth_year DESC LIMIT 1;
-- Eng ko'p sahifali kitob
SELECT * FROM books ORDER BY pages DESC LIMIT 1;
-- Belgili muallifning kitoblari
SELECT b.title, b.publication_year, b.price
FROM books b
JOIN authors a ON b.author_id = a.id
WHERE a.name = 'Alisher Navoiy';
-- Murakkab shartlar
SELECT * FROM books
WHERE (pages > 200 AND price < 25)
OR (publication_year > 1900 AND price > 20)
ORDER BY price DESC;
10. Funksiyalar bilan ishlash
-- COUNT - Son
SELECT COUNT(*) FROM books;
SELECT COUNT(*) FROM books WHERE price > 20;
-- MAX/MIN - Eng katta/kichik
SELECT MAX(price) FROM books;
SELECT MIN(pages) FROM books;
-- AVG - O'rtacha
SELECT AVG(price) FROM books;
SELECT AVG(pages) FROM books WHERE publication_year > 1900;
-- SUM - Yig'indi
SELECT SUM(price) FROM books;
-- Ustun nomini o'zgartirish
SELECT COUNT(*) AS kitoblar_soni FROM books;
SELECT MAX(price) AS eng_qimmat_kitob FROM books;
11. Xatolar va ularni hal qilish
-- Xato: Mavjud bo'lmagan ustun
SELECT wrong_column FROM books;
-- Xato: no such column: wrong_column
-- Xato: Mavjud bo'lmagan jadval
SELECT * FROM wrong_table;
-- Xato: no such table: wrong_table
-- Xato: Sintaks xatosi
SELECT * FROM books WHERE price = 'not_a_number';
-- Xato: no such column: not_a_number
12. Performance optimizatsiya
-- Faqat kerakli ustunlarni tanlash
SELECT name, email FROM users; -- Yaxshi
SELECT * FROM users; -- Yomon (barcha ustunlar)
-- LIMIT ishlatish
SELECT * FROM books LIMIT 10; -- Yaxshi
SELECT * FROM books; -- Yomon (barcha qatorlar)
-- Indekslardan foydalanish
CREATE INDEX idx_books_price ON books(price);
SELECT * FROM books WHERE price > 20; -- Tezroq ishlaydi
Eng yaxshi amaliyotlar
- ✅ Faqat kerakli ustunlarni tanlang: * o'rniga aniq ustun nomlari
- ✅ LIMIT ishlatish: Katta natijalar uchun
- ✅ Indekslardan foydalanish: Tez qidiruv uchun
- ✅ WHERE shartlarini optimizatsiya qiling: Eng cheklovchi shartni birinchi qo'ying
- ✅ Alias ishlatish: Natijalarni tushunarli qiling