WHERE NOT SNum =
( SELECT SNum FROM Customers
WHERE CNum = main.CNum );
Asosiy so‘rov asoslangan jadvalga asoslanuvchi mutanosib so‘rovdan foydalanishingiz mumkin.
Misol: sotib olishlar buyurtmachilari uchun o‘rta qiymatdan yuqori bo‘lgan xama
yuuyurtmalarni topish.
SELECT * FROM Orders a
WHERE AMT >
( SELECT AVG (AMT) FROM Orders b
WHERE b.CNum = a.CNum );
HAVING operatoridan ostki so‘rovlarda foydalanilganidek mutanosib ostki so‘rovlarda xam
foydalanigsh mumkin.
HAVING ifodasida mutanosib ostki so‘rovdan foydalanganda HAVING o‘zida ishlatilishi
mumkin bo‘lgan pozitsiyalarga tashqi ilovalarni cheklab qo‘yishingiz kerak.
CHunki HAVING
ifodasida faqat agregat SELECT ifodasida ko‘rsatilgan funksiyalardan yoki GROUP BY
ifodasida ko‘rsatilgan maydonlardan foydalanish mumkin. Ulardan
siz tashqi ilova sifatida
foydalanishingiz mumkin. Buning sababi shuki HAVING tashqi so‘rovdagi satrlar uchun emas
guruxlar uchun baxolanadi. SHuning uchun ostki so‘rov bir marta satr
uchun emas gurux uchun
bajariladi.
Misol: Buyurtmalar jadvalidagi sotibolishlar summalarini sanalar bo‘yicha guruxla summasini
xisoblash kerak bo‘lsin. SHu bilan birga summa maksimal summadan kamida 2000.00 ga ko‘p
bo‘lmagan sanalarni chiqarib tashlash kerak bo‘lsin:
SELECT ODate, SUM (AMT) FROM Orders a
GROUP BY ODate
HAVING SUM (AMT) >
( SELECT 2000.00 + MAX (AMT) FROM Orders b
WHERE a.ODate = b.ODate );
Ostki so‘rov asosiy so‘rovning ko‘rilayotgan agregat guruxi sanasiga teng sanaga ega xmma
satrlar uchun MAX qiymat xisoblaydi. Bu WHERE ifodasidan foydalanib bajarilishi lozim.
Ostki so‘rovning o‘zi GROUP BY yoki HAVING operatorlarini ishlatmasligi kerak.
Do'stlaringiz bilan baham: