Oldingi darslarda biz WHERE orqali qatorlarni aniq qiymat bo'yicha tanladik: narx = 300000 yoki nomi = 'Telefon'. Lekin ko'pincha bizga aniq qiymat emas, balki biror shablonga mos keladigan matn kerak bo'ladi. Masalan: "nomi K harfi bilan boshlanadigan mahsulotlar" yoki "ichida tel so'zi bor mahsulotlar".
Mana shunday shablon bo'yicha qidirish ishini LIKE kalit so'zi bajaradi.
Misollarni mahsulotlar jadvalida ko'rib chiqamiz:
| 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 |
LIKE WHERE shartida = o'rniga ishlatiladi. Undan keyin shablon keladi — bu oddiy matn bo'lib, ichida ikkita maxsus belgi bo'lishi mumkin:
% (foiz) — ixtiyoriy uzunlikdagi (hatto nol uzunlikdagi) belgilar o'rnini bosadi._ (pastki chiziq) — aniq bitta belgi o'rnini bosadi.Bu belgilar yordamida biz "matn shunday boshlanadi", "shunday tugaydi" yoki "ichida shu bor" kabi shartlar yozamiz.
Eng ko'p ishlatiladigani — %. Keling, uchta klassik holatni ko'rib chiqamiz.
1. Matn bilan boshlanadi. Nomi S harfi bilan boshlanadigan mahsulotlar. % ni harfdan keyin qo'yamiz — undan keyin nima kelishi muhim emas:
SELECT nomi FROM mahsulotlar WHERE nomi LIKE 'S%';Natija:
Stol
Stul2. Matn bilan tugaydi. Nomi k harfi bilan tugaydigan mahsulotlar. % ni harfdan oldin qo'yamiz:
SELECT nomi FROM mahsulotlar WHERE nomi LIKE '%k';Natija:
Noutbuk3. Ichida bor. Nomi ichida (qayerda bo'lishidan qat'i nazar) o harfi bor mahsulotlar. Harfning ikkala tomoniga ham % qo'yamiz:
SELECT nomi FROM mahsulotlar WHERE nomi LIKE '%o%';Natija (Kitob, Stol, Telefon larda o ichida, Noutbuk, Quloqchin larda esa boshqa joyda):
Telefon
Noutbuk
Quloqchin
Kitob
StolEslatma: Shablon ham xuddi oddiy matn kabi bitta tirnoq (
') ichida yoziladi:'S%'.%belgisini tirnoq ichiga qo'yamiz, tashqarisiga emas.
_ (pastki chiziq) aynan bitta belgini bildiradi — na ko'p, na kam. U "shu pozitsiyada bironta belgi turishi shart, lekin qaysi belgi ekani muhim emas" deganda asqotadi.
Masalan, nomi Stol yoki Stul ga o'xshash — St bilan boshlanib, keyin bitta ixtiyoriy belgi, so'ng l bilan tugaydigan mahsulotlar:
SELECT nomi FROM mahsulotlar WHERE nomi LIKE 'St_l';Natija:
Stol
StulBu yerda St_l shabloni to'liq to'rt belgili nomlarga mos keladi: Stol (o _ o'rnida) va Stul (u _ o'rnida).
Muhim:
%ixtiyoriy uzunlikdagi belgilarni (shu jumladan hech narsani) bildiradi,_esa aniq bittasini.'A%'—Abilan boshlanadigan har qanday matn;'A_'— faqatAdan keyin yana bitta belgisi bor (jami ikki belgili) matn.
LIKE ham boshqa shartlar kabi ORDER BY bilan birga ishlaydi: avval WHERE ... LIKE, keyin ORDER BY. Masalan, ichida o harfi bor mahsulotlarni alifbo tartibida chiqaramiz:
SELECT nomi FROM mahsulotlar WHERE nomi LIKE '%o%' ORDER BY nomi;Natija:
Kitob
Noutbuk
Quloqchin
Stol
TelefonMuhim: So'rov bir nechta qator qaytarsa, tartib aniq bo'lishi uchun doimo
ORDER BYqo'shing — aks holda ma'lumotlar bazasi qatorlarni istalgan tartibda qaytarishi mumkin.
Pastdagi kod oynasida mahsulotlar jadvali allaqachon yaratilgan va to'ldirilgan. Sizning vazifangiz — nomi ichida o harfi qatnashgan mahsulotlarning nomini, alifbo tartibida chiqaruvchi SELECT so'rovini yozish. Buning uchun LIKE va % belgisidan foydalaning.