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

سوالی از دستور 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 بوده باشه.)
نقل قول این ارسال در یک پاسخ



موضوع‌های مرتبط با این موضوع...
موضوع: نویسنده پاسخ: بازدید: آخرین ارسال
  سوالی از دنباله ها و قوانین سیگما fendi ۱ ۶۸۴ ۰۶ اردیبهشت ۱۳۹۸ ۰۲:۱۱ ق.ظ
آخرین ارسال: Saman
  سوالی از max-heap sir_ams ۳۳ ۱۰,۶۱۹ ۲۸ دى ۱۳۹۶ ۰۲:۳۴ ب.ظ
آخرین ارسال: سیمول
  مشکل در اجرای دستور hashcat در کالی لینوکس ACM ۰ ۸۵۷ ۲۹ خرداد ۱۳۹۶ ۰۶:۴۹ ب.ظ
آخرین ارسال: ACM
  ابهام در دستور SQL peace2013 ۰ ۶۳۱ ۱۷ فروردین ۱۳۹۶ ۰۸:۵۱ ب.ظ
آخرین ارسال: peace2013
  سوالی از sql wskf ۱ ۷۲۰ ۰۱ بهمن ۱۳۹۵ ۱۱:۵۸ ب.ظ
آخرین ارسال: alireza01
  دستور using *tarannom* ۱ ۶۸۵ ۲۳ آذر ۱۳۹۵ ۰۸:۴۱ ب.ظ
آخرین ارسال: Hopegod
  تست سراسری ۸۷ | مهندسی کامپیوتر | مبحث SQL | دستور Insert Into Happiness.72 ۳ ۱,۳۷۷ ۰۸ مهر ۱۳۹۵ ۰۵:۴۹ ب.ظ
آخرین ارسال: Iranian Wizard
  سوالی در خصوص کتاب بهروز قلی زاده agha_Yahya ۱ ۱,۰۸۷ ۰۳ مرداد ۱۳۹۵ ۰۴:۵۹ ب.ظ
آخرین ارسال: Pure Liveliness
  سوالی در مورد تولید جمعیت اولیه الگوریتم ژنتیک نازین ۶ ۲,۶۶۱ ۰۹ تیر ۱۳۹۵ ۰۳:۱۳ ق.ظ
آخرین ارسال: kingxerxes
  حل دو سوال معماری(محاسبه تعداد دستور العمل ها) Saman ۰ ۱,۰۰۶ ۱۵ اردیبهشت ۱۳۹۵ ۰۶:۵۲ ب.ظ
آخرین ارسال: Saman

پرش به انجمن:

Can I see some ID?

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

Feeling left out?


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

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

Feeling left out?


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