Oldingi darslarda WHERE yordamida bitta shart bo'yicha qatorlarni filtrladik. Lekin ko'pincha bir nechta shartni birga tekshirish kerak bo'ladi. Buning uchun mantiqiy operatorlar — AND, OR va NOT ishlatiladi.
Misollarda quyidagi mahsulotlar jadvalidan foydalanamiz:
| 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 |
AND operatori ikkita shartni birlashtiradi. Qator natijaga tushishi uchun har ikkala shart ham rost bo'lishi kerak.
Masalan, kategoriyasi Elektronika bo'lgan va narxi 1000000 dan past mahsulotlar nomini topaylik:
SELECT nomi FROM mahsulotlar
WHERE kategoriya = 'Elektronika' AND narx < 1000000;Faqat Quloqchin ikkala shartga ham mos keladi (Elektronika va narxi 1000000 dan past):
QuloqchinTelefon va Noutbuk ham Elektronika, lekin narxi 1000000 dan baland — shuning uchun ular natijaga tushmadi.
OR operatorida qator natijaga tushishi uchun shartlardan kamida bittasi rost bo'lishi yetarli.
Masalan, kategoriyasi Kanstovar yoki Kitoblar bo'lgan mahsulotlar nomini topaylik:
SELECT nomi FROM mahsulotlar
WHERE kategoriya = 'Kanstovar' OR kategoriya = 'Kitoblar'
ORDER BY nomi;Daftar
Kitob
RuchkaEslatma: Bir nechta qator qaytishi mumkin bo'lganda, natijaning tartibi aniq bo'lishi uchun doimo
ORDER BYqo'shing.
NOT operatori shartni teskari qiladi: rost bo'lganini noto'g'ri, noto'g'ri bo'lganini rost qiladi.
Masalan, kategoriyasi Elektronika bo'lmagan mahsulotlarni topaylik:
SELECT nomi FROM mahsulotlar
WHERE NOT kategoriya = 'Elektronika'
ORDER BY nomi;Daftar
Kitob
Ruchka
Stol
StulAND va OR bir so'rovda birga ishlatilsa, SQL avval AND ni, keyin OR ni hisoblaydi (xuddi matematikada ko'paytirish qo'shishdan oldin bo'lgani kabi). Bu ba'zan kutilmagan natija beradi.
Buni boshqarish uchun qavslardan foydalanamiz — qavs ichidagi shart birinchi hisoblanadi.
Masalan, kategoriyasi Elektronika yoki Mebel bo'lgan, va shu bilan birga narxi 1000000 dan past mahsulotlarni topaylik. Bu yerda OR ni qavs ichiga olamiz:
SELECT nomi FROM mahsulotlar
WHERE (kategoriya = 'Elektronika' OR kategoriya = 'Mebel') AND narx < 1000000
ORDER BY nomi;Quloqchin
Stol
StulQavslar tufayli avval "kategoriya Elektronika yoki Mebel" sharti hisoblanadi, keyin natija narxi 1000000 dan past bo'lganlar bilan cheklanadi.
Muhim: Agar qavslarni olib tashlasangiz, ma'no o'zgaradi: so'rov "Elektronika kategoriyasidagi har qanday mahsulot yoki narxi 1000000 dan past Mebel" degan ma'noni beradi — bu butunlay boshqa natija. Shubha bo'lsa, qavs qo'ying.
Pastdagi kod oynasida mahsulotlar jadvali allaqachon yaratilgan va to'ldirilgan. Sizning vazifangiz — kategoriyasi Elektronika yoki Mebel bo'lgan, lekin narxi 1000000 dan past mahsulotlar nomini alifbo tartibida chiqaruvchi SELECT so'rovini yozish. Qavslardan to'g'ri foydalanishni unutmang.