EXISTS operatori
EXISTS operatori quyi so'rov qiymatni qaytaradimi yoki yo'qligini tekshirish imkonini beradi. Odatda, bu operator ma'lum bir qator shartni qondirishini ko'rsatish uchun ishlatiladi. Ya'ni, aslida EXISTS operatori qatorlarni qaytarmaydi, faqat ma'lumotlar bazasida berilgan so'rovga mos keladigan kamida bitta qator mavjudligini bildiradi. Hech qanday qator qaytarilmaganligi sababli, bunday operator bilan quyi so'rovlar juda tezdir.
Operator ilovasi quyidagi rasmiy sintaksisga ega:
Masalan, mijozlar jadvalidan buyurtma bergan barcha mijozlarni topamiz:
Yana bir misol - Buyurtmalar jadvalida buyurtma bo'lmagan barcha mahsulotlarni Mahsulotlar jadvalidan topish:
Shuni ta'kidlash kerakki, shunga o'xshash natijaga erishish uchun IN operatoridan ham foydalanishingiz mumkin:
Lekin EXISTS qatorlarni keltirmagani uchun undan foydalanish IN operatoridan foydalanishdan ko‘ra optimalroq va samaraliroq bo‘ladi.
Yashirin jadval qo'shilishi
Turli jadvallardagi ma'lumotlarni umumlashtirish uchun biz standart SELECT buyrug'idan foydalanishimiz mumkin. Aytaylik, bizda quyidagi jadvallar mavjud bo'lib, ular o'zaro munosabatlar bilan bog'langan:
Bu yerda “Mahsulotlar” va “Mijozlar” jadvallari “Buyurtmalar” jadvaliga “birdan ko‘pga” munosabati bilan bog‘langan. Buyurtmalar jadvali ProductId va CustomerId xorijiy kalitlari ko'rinishida mos ravishda Mahsulotlar va mijozlar jadvallaridagi Id ustunlariga havolalarni o'z ichiga oladi. Shuningdek, u sotib olingan mahsulot miqdorini (ProductCount) va qanday narxda sotib olinganini (Narx) saqlaydi. Bundan tashqari, jadval xarid sanasini CreatedAt ustuni sifatida ham saqlaydi.
Ushbu jadvallar quyidagi ma'lumotlarni o'z ichiga oladi:
Keling, ikkita jadvalga qo'shilamiz Buyurtmalar va mijozlar:
Bunday tanlov bilan Buyurtmalar jadvalidagi har bir qator uchun u Mijozlar jadvalidagi har bir qatorga mos keladi. Ya'ni, siz o'zaro bog'liqlikni olasiz. Masalan, Buyurtmalarda uchta qator mavjud va Mijozlarda bir xil uchta qator mavjud, shuning uchun biz 3 * 3 = 9 qatorni olamiz:
Ya'ni, bu holda biz ikkita guruhning to'g'ridan-to'g'ri (kartezian) mahsulotini olamiz. Ammo bu biz ko'rmoqchi bo'lgan natija emas. Bundan tashqari, Buyurtmalarning har bir buyurtmasi barcha mumkin bo'lgan xaridorlar bilan emas, balki Mijozlardan ma'lum bir xaridor bilan bog'liq.
Muammoni hal qilish uchun siz WHERE bandidan foydalanishingiz va Buyurtmalardagi CustomerId maydoni Mijozlarning Id maydoniga mos kelishi sharti bilan qatorlarni filtrlashingiz kerak:
Keling, uchta jadvaldagi Buyurtmalar, Mijozlar va Mahsulotlar bo'yicha ma'lumotlarni birlashtiramiz. Ya'ni, biz barcha buyurtmalarni olamiz va mijoz va tegishli mahsulot haqida ma'lumot qo'shamiz:
Birlashtirish uchun uchta jadval mavjud bo'lganligi sababli, kamida ikkita shart qo'llaniladi. Buyurtmalar asosiy jadval bo'lib qoladi, undan barcha buyurtmalar olinadi va keyin mijoz ma'lumotlari unga Orders.CustomerId = Customers.Id sharti va mahsulot ma'lumotlari Orders.ProductId=Products.Id sharti orqali ulanadi.
Bu holda jadval nomlari kodni sezilarli darajada oshirganligi sababli, jadval taxalluslari yordamida uni qisqartirishimiz mumkin:
Agar taxallusdan foydalanganda ma'lum bir jadvaldagi barcha ustunlarni tanlamoqchi bo'lsangiz, yulduzchadan foydalanishingiz mumkin:
Do'stlaringiz bilan baham: |