Oldingi darslarda biz WHERE orqali qatorlarni shartga ko'ra ajratib oldik. Ko'pincha biror oraliqdagi qiymatlarni yoki bir nechta aniq qiymatlardan birortasini tanlash kerak bo'ladi. Buni WHERE va AND/OR bilan ham yozsa bo'ladi, lekin SQL bunday holatlar uchun ikkita qulay vosita beradi: BETWEEN va IN.
Quyidagi misollarda mahsulotlar jadvali bilan ishlaymiz:
| id | nomi | kategoriya | narx | ombor |
|---|---|---|---|---|
| 1 | Telefon | Elektronika | 5000000 | 10 |
| 2 | Noutbuk | Elektronika | 12000000 | 5 |
| 3 | Quloqchin | Elektronika | 300000 | 50 |
| 4 | Kitob | Kitoblar | 50000 | 100 |
| 5 | Daftar | Kanstovar | 8000 | 200 |
| 6 | Ruchka | Kanstovar | 3000 | 500 |
| 7 | Stol | Mebel | 800000 | 15 |
| 8 | Stul | Mebel | 250000 | 40 |
BETWEEN biror qiymat ikki chegara orasida (ikkalasini ham qo'shgan holda) yotadimi-yo'qmi, shuni tekshiradi. Shakli quyidagicha:
SELECT nomi, narx FROM mahsulotlar WHERE narx BETWEEN 250000 AND 5000000;Bu so'rov narxi 250000 dan 5000000 gacha bo'lgan mahsulotlarni qaytaradi. Eng muhim jihati — ikkala chegara ham natijaga kiradi. Ya'ni narxi aynan 250000 yoki aynan 5000000 bo'lgan mahsulotlar ham chiqadi.
BETWEEN a AND b aslida >= a AND <= b ning qisqa ko'rinishi, xolos. Quyidagi ikki so'rov bir xil natija beradi:
SELECT nomi FROM mahsulotlar WHERE narx BETWEEN 250000 AND 5000000;
SELECT nomi FROM mahsulotlar WHERE narx >= 250000 AND narx <= 5000000;Muhim:
BETWEENda kichik son birinchi, katta son ikkinchi yozilishi kerak:BETWEEN 250000 AND 5000000. Agar tartibni teskari yozsangiz (BETWEEN 5000000 AND 250000), hech qanday qator qaytmaydi.
IN biror qiymat berilgan ro'yxatdagi qiymatlardan biriga tengmi-yo'qmi, shuni tekshiradi. Masalan, faqat Elektronika va Mebel kategoriyasidagi mahsulotlarni olaylik:
SELECT nomi, kategoriya FROM mahsulotlar WHERE kategoriya IN ('Elektronika', 'Mebel');Bu so'rov natijasi:
Telefon|Elektronika
Noutbuk|Elektronika
Quloqchin|Elektronika
Stol|Mebel
Stul|MebelIN ham OR ning qisqa ko'rinishi. Yuqoridagi so'rov quyidagiga teng:
SELECT nomi, kategoriya FROM mahsulotlar
WHERE kategoriya = 'Elektronika' OR kategoriya = 'Mebel';Ro'yxat sonlardan ham iborat bo'lishi mumkin. Masalan, id si 1, 4 yoki 6 bo'lgan mahsulotlar:
SELECT id, nomi FROM mahsulotlar WHERE id IN (1, 4, 6);Eslatma: Matnli qiymatlarni ro'yxatda yozganda har birini bitta tirnoq ichiga olish kerak:
('Elektronika', 'Mebel'). Sonlar uchun tirnoq shart emas:(1, 4, 6).
BETWEEN va IN ni ORDER BY bilan birga ishlatib, natijani tartiblab chiqarish mumkin. Masalan, narxi 50000 dan 800000 gacha bo'lgan mahsulotlarni narx bo'yicha o'sish tartibida:
SELECT nomi, narx FROM mahsulotlar WHERE narx BETWEEN 50000 AND 800000 ORDER BY narx;Natija:
Kitob|50000
Stul|250000
Quloqchin|300000
Stol|800000Muhim: So'rov bir nechta qator qaytarsa, tartibni o'zingiz
ORDER BYbilan belgilang. Aks holda qatorlar tartibi kafolatlanmaydi.
mahsulotlar jadvalidan narxi 100000 va 1000000 oralig'idagi (ikkala chegara ham kiradi) mahsulotlarning nomi va narxini narx bo'yicha o'sish tartibida chiqaring. Buning uchun BETWEEN ... AND ... va ORDER BY dan foydalaning.