زمان کنونی: ۳۰ مهر ۱۳۹۷, ۰۳:۲۴ ق.ظ مهمان گرامی به انجمن مانشت خوش آمدید. برای استفاده از تمامی امکانات انجمن می‌توانید عضو شوید.
گزینه‌های شما (ورودثبت نام)

سوالی از دستور Exists

ارسال:
  

mahdikoochooloo پرسیده:

سوالی از دستور Exists

به نام خدا
سلام رفقا
تو دستور Exists گیر کردم
به این مثال توجه کنید‌:
Select QTY from SP where exists(select * from S where S.S#=SP.S# AND QTY>1000)
سوال ‌: این دستور توسط SQL چطوری Trace می شه؟ اگر زحمت بکشید یک بار تریس کنید
مثلا به این شکل که SQL ابتدا رکورد اول رو از SP انتخاب می کنه و در Where چک می کنه که آیا این رکوردی که انتخاب شده دارای شروط مورد نظر است یا خیر؟
اگر شکل دستور رو تغییر بدیم به:
Select * from SP where exists(select * from S where S.S#=SP.S# AND QTY>1000)
آیا باز هم این دستور درست کار می کنه در صورتی که ما هیچ متغیری در سلکت اصلی قرار ندادیم که شرط Exists متوجه بشه کدوم رکورد مد نظر ماست
سوال سوم‌: آیا شرطی که داخل Exists است باید دارای متغیری باشد که جلوی Select اصلی آمده است ؟

با تشکر
نقل قول این ارسال در یک پاسخ

۰
ارسال:
  

Processor پاسخ داده:

RE: سوالی از دستور Exists

سلام

در مورد سوال اول:
ابتدا یک سطر از SP انتخاب میشه و برای اینکه این سطر در خروجی ظاهر بشه باید شرط Where مقدار True بگیره که چون شرط Where شامل دستور Exist هست، در صورتی مقدار True میگیره که مقداری برای Select داخلی برگشته باشه یعنی زمانی که حداقل یک تولید کننده وجود داشته باشه که اون قطعه رو تولید کرده و اینکه مقدار QTY بیشتر از ۱۰۰۰ باشه. اگه این شرط برقرار باشه، شرط Where درست میشه و اون سطر در خروجی ظاهر میشه و سطرهای بعدی SP به ترتیب بررسی میشن و در صورتی که شرط Where درست نباشه اون سطر نادیده گرفته میشه و سطرهای بعدی SP چک میشن.

در مورد سوال دوم هم باید بگم تنها تغییری که بوجود میاد در خروجی هست. و هیچ تاثیری روی شرط Exists نداره. در کوئری اول خروجی فقط مقدار QTY از جدول SP بود و در کوئری دوم همه مقادیر جدول SP در خروجی ظاهر میشه.
چون مقابل Select علامت * گذاشته شده یعنی تمامی خصیصه ها انتخاب شده و اینکه در کوئری دوم اسم خصیصه ها آورده نشده دلیلی نیس که نتونه تشخیص بده منظور ما کدوم خصیصه هست.

در مورد سوال سوم هم نیازی نیست که حتما مقداری که داخل Exists اومده رو در مقابل Select اصلی داشته باشیم. برای این مورد مثالهای زیادی وجود داره. (مقادیر مقابل Select فقط برای مشخص کردن مقادیر خروجی استفاده میشه و فقط در دستور Group by هست که مقدار مقابل Group by حتما باید قبلا مقابل Select بوده باشه.)
نقل قول این ارسال در یک پاسخ



موضوع‌های مرتبط با این موضوع...
موضوع: نویسنده پاسخ: بازدید: آخرین ارسال
  دستور INSERT فاطمه ارشد ای تی ۴ ۱,۱۲۱ ۳۰ اردیبهشت ۱۳۹۴ ۰۱:۱۲ ب.ظ
آخرین ارسال: فاطمه ارشد ای تی
  جای قرار دادن توابع سنونی در فرم دستور sql - تست دولتی ۷۵( ابهام در بکار بردن توابع ) so@ ۷ ۱,۶۹۳ ۱۹ آبان ۱۳۹۳ ۱۰:۳۷ ب.ظ
آخرین ارسال: so@
  سوالی در رابطه با نحوه ی انجام تراکنش fereshte88 ۴ ۱,۶۹۸ ۱۹ مهر ۱۳۹۳ ۰۹:۴۳ ب.ظ
آخرین ارسال: fereshte88
  حل query هایی با شرط Exists sal_dovomi ۲ ۱,۲۹۷ ۲۲ بهمن ۱۳۸۹ ۱۱:۴۵ ب.ظ
آخرین ارسال: sepid
  سوالی از جبر رابطه ای لهمشد ۱۵ ۴,۸۹۳ ۰۴ دى ۱۳۸۹ ۰۵:۳۶ ق.ظ
آخرین ارسال: bijibuji

پرش به انجمن:

Can I see some ID?

به خاطر سپاری رمز Cancel

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close

رمزت رو فراموش کردی؟

Feeling left out?


نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. close