تالار گفتمان مانشت
پایگاه داده- دستور exists - نسخه‌ی قابل چاپ

پایگاه داده- دستور exists - mhd3 - 29 آذر ۱۳۹۲ ۱۰:۴۶ ب.ظ

سلام .
میشه query زیر رو توضیح بدید؟؟

select sname
from s
where not exists
* select)
from p
where not exists
* select)
from sp
((where sp.p_number=p.p_number and s.s_number=sp.s_number

من کلا exists رو نَوَفهمم!!
از رو چی بخونم تا متوجه بشم؟؟ جزوه ای هست که خوب توضیح داده باشه؟؟

RE: پایگاه داده- دستور exists - ایزدی - ۲۹ آذر ۱۳۹۲ ۱۱:۵۹ ب.ظ

select sname
from s
where not exists
* select)
from p
where not exists
* select)
from sp
((where sp.p_number=p.p_number and s.s_number=sp.s_number

از بین جدول s سطر هایی را که به ازای انها هیچ p وجود نداشته باشد که به ازای آن وجود نداشته باشد از جدول sp سطری که در ارتباط با s و p باشد
=>
از بین جدول s سطر هایی را که به ازای انها هیچ p وجود نداشته باشد که در هیچ سطری از جدول sp یا s ارتباط نداشته باشد
=>
از بین جدول s سطر هایی را که به ازای انها همه p ها در جدول sp یا s ارتباط داشته باشد
به عبارتی
از جدول s فقط سطر هایی را انتخاب کن که در جدولsp با همه سطر های جدول p رابطه داشته باشد

اول کلشو بنویسید بعد قدم به قدم not رو لحاظ کنین

RE: پایگاه داده- دستور exists - نارین - ۲۵ دى ۱۳۹۲ ۰۵:۵۴ ب.ظ

not exist
۱-عدم وجود رکورد در جدول را بررسی میکند(تهی بودم رابطه)
۲-اگر B-A خالی باشد یعنی همه اعضای B در A هست یا B زیر مجموعه A است .
الان از داخلی ترین select شروع به بررسی میکنیم :not exists
* select)
from sp
((where sp.p_number=p.p_number and s.s_number=sp.s_number
از ۱ اسفاده میکنیم، یعنی از جدول sp آنهایی را انتخاب کن که شمارهاشون در جدول P وS نیست not exist دومی میگه اونایی را انتخاب کن که تو این مجموعه نیستند یعنی دقیقا همون select داخلی را به عنوان جواب برمیگردونه مثل اینه که بگیم نقیضه نقیضه مجموعه A چی میشه ؟ میشه خود A یا اینکه بگیم متمم متمم A چی میشه ؟
ولی اگه توی سوالمون از except استفاده باشه واسه خودمون باید مجموعه A و B را مشخص کنیم بعد از راه ۲ اسفاده کنیم .
در رابطه با exist کارمون راحتتره اگه نتیجه پرس وجومون غیر تهی بود exist مقدار true را برامون برمیگردونه .
امیدوارم خیلی بد توضیح نداده باشم