ايران ويج

نسخه‌ی کامل: difference between IN and EXISTS
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
کسانی که با اسکیوال کار میکنن احتمالا دیدن این دو تا دستور رو :
Exists
IN
این دو دستور رو میشه خیلی راحت بجای هم استفاده کرد پس چرا دو دستور ساخته شده ؟؟؟؟
تقریبا هم این دو تا معادل هم هستن؟؟؟؟
من اینجا یکی از اختلافهای این دو تا دستور رو میگم :
نرم افزار اوراکل و ام اس اسکیوال قبل از اجرای یه دسوتر اونو بهینه میکنن تا کارایی رو بالاتر ببرن.

اولی اینه :

کد:
select ename from emp e
    where exists (select 0 from emp where e.mgr = empno and ename = '001');

دومی هم این:
کد:
select ename from emp e
    where mgr in (select empno from emp where ename = '001');
وقتی از دستور اولی Exists استفاده میکنی ناخودآگاه به بهینه ساز میگی اول سلکت خارجی رو اجرا کن نتیجه رو بده به سلکت داخل exists و او فیلتر رو روش اعمال کنه
اما در دومی اول سلکت داخل IN اجرا میشه نتیجه به سلکت بیرونی پاس میشه تا اون عمل فیلتر کردن رو انجام بده.

هر کدوم از سلکت ها که نتیجش تعداد رکورد کمتری داره بهتره زودتر اجرا بشه چون اینطوری سرعت کار بالا میره.
پس میشه گفت اختلاف این دو تا دستور یکیش کارایی هست که به نوع سلکت ما بستگی داره