در SQL، عملگر EXISTS و عملگر NOT EXISTS برای بررسی وجود یا عدم وجود رکوردهایی مطابق با شرایط خاص در یک زیرپرسوجو استفاده میشوند. این دو عملگر معمولاً در پرسوجوهای وابسته (Correlated Subqueries) به کار میروند و برای ارزیابی وجود دادهها یا عدم وجود دادهها در یک جدول یا نتیجه زیرپرسوجو استفاده میشوند.
1. عملگر EXISTS
عملگر EXISTS بررسی میکند که آیا زیرپرسوجو حداقل یک رکورد برگشتی دارد یا خیر. اگر زیرپرسوجو حداقل یک رکورد پیدا کند، EXISTS مقدار TRUE برمیگرداند و اگر هیچ رکوردی پیدا نشود، EXISTS مقدار FALSE برمیگرداند.
ساختار:
FROM جدول
WHERE EXISTS (زیرپرسوجو);
توضیحات:
- EXISTS فقط بررسی میکند که آیا زیرپرسوجو حداقل یک نتیجه برمیگرداند یا خیر.
- نتیجه برگشتی از زیرپرسوجو به طور خاص اهمیتی ندارد، بلکه وجود یا عدم وجود رکوردها اهمیت دارد.
- عملگر EXISTS بیشتر برای پرسوجوهای وابسته (Correlated Subqueries) استفاده میشود.
مثال:
فرض کنید دو جدول کاربران و سفارشات دارید و میخواهید کاربرانی را که حداقل یک سفارش ثبت کردهاند، نمایش دهید. میتوانید از EXISTS استفاده کنید:
FROM کاربران AS u
WHERE EXISTS (
SELECT 1
FROM سفارشات AS o
WHERE o.کاربر_id = u.id
);
در اینجا:
- زیرپرسوجو بررسی میکند که آیا برای هر کاربر حداقل یک سفارش در جدول سفارشات وجود دارد.
- اگر برای یک کاربر سفارش وجود داشته باشد، آن کاربر در نتایج پرسوجو نمایش داده میشود.
2. عملگر NOT EXISTS
عملگر NOT EXISTS مشابه EXISTS است، با این تفاوت که بررسی میکند که آیا زیرپرسوجو هیچ رکوردی برنمیگرداند یا خیر. اگر زیرپرسوجو هیچ رکوردی پیدا نکند، NOT EXISTS مقدار TRUE برمیگرداند و اگر حداقل یک رکورد پیدا شود، NOT EXISTS مقدار FALSE برمیگرداند.
ساختار:
FROM جدول
WHERE NOT EXISTS (زیرپرسوجو);
توضیحات:
- NOT EXISTS به طور خاص بررسی میکند که آیا هیچ رکوردی از زیرپرسوجو وجود ندارد.
- مانند EXISTS، نتیجه برگشتی از زیرپرسوجو اهمیت ندارد، بلکه عدم وجود رکوردها در آن اهمیت دارد.
- این عملگر معمولاً زمانی استفاده میشود که بخواهید دادههایی که در شرایط خاص موجود نیستند را پیدا کنید.
مثال:
فرض کنید میخواهید کاربرانی را پیدا کنید که هیچ سفارشی در جدول سفارشات ثبت نکردهاند. برای این کار میتوانید از NOT EXISTS استفاده کنید:
FROM کاربران AS u
WHERE NOT EXISTS (
SELECT 1
FROM سفارشات AS o
WHERE o.کاربر_id = u.id
);
در اینجا:
- زیرپرسوجو بررسی میکند که آیا برای هر کاربر هیچ سفارشی در جدول سفارشات وجود ندارد.
- اگر برای یک کاربر هیچ سفارش پیدا نشود، آن کاربر در نتایج پرسوجو نمایش داده میشود.
تفاوتهای اصلی بین EXISTS و NOT EXISTS:
ویژگی | EXISTS | NOT EXISTS |
---|---|---|
هدف | بررسی وجود رکوردهایی مطابق با شرایط | بررسی عدم وجود رکوردهایی مطابق با شرایط |
نتیجه | اگر زیرپرسوجو حداقل یک رکورد پیدا کند، TRUE | اگر زیرپرسوجو هیچ رکوردی پیدا نکند، TRUE |
زمان استفاده | برای پیدا کردن رکوردهایی که حداقل یک بار ظاهر میشوند | برای پیدا کردن رکوردهایی که هیچ بار ظاهر نمیشوند |
عملکرد | بررسی میکند که آیا دادهها مطابق با شرایط وجود دارند | بررسی میکند که آیا دادهها مطابق با شرایط وجود ندارند |
کاربردهای EXISTS و NOT EXISTS:
- EXISTS معمولاً زمانی استفاده میشود که بخواهید رکوردهایی از جدول اصلی پیدا کنید که دارای رکوردهایی در جدول فرعی مطابق با شرایط خاص باشند.
- NOT EXISTS زمانی استفاده میشود که بخواهید رکوردهایی از جدول اصلی پیدا کنید که هیچ رکورد مطابق با شرایط خاص در جدول فرعی ندارند.
نتیجهگیری:
- EXISTS و NOT EXISTS ابزارهایی برای بررسی وجود یا عدم وجود دادهها در یک زیرپرسوجو هستند. استفاده از این دو عملگر در پرسوجوهای وابسته به شما این امکان را میدهد که به طور مؤثر دادههایی را که شرایط خاصی دارند یا فاقد آن شرایط هستند، جستجو کنید.
