الگوریتم اول

لطفا صبر کنید...

در SQL، عملگر EXISTS و عملگر NOT EXISTS برای بررسی وجود یا عدم وجود رکوردهایی مطابق با شرایط خاص در یک زیرپرس‌وجو استفاده می‌شوند. این دو عملگر معمولاً در پرس‌وجوهای وابسته (Correlated Subqueries) به کار می‌روند و برای ارزیابی وجود داده‌ها یا عدم وجود داده‌ها در یک جدول یا نتیجه زیرپرس‌وجو استفاده می‌شوند.

1. عملگر EXISTS

عملگر EXISTS بررسی می‌کند که آیا زیرپرس‌وجو حداقل یک رکورد برگشتی دارد یا خیر. اگر زیرپرس‌وجو حداقل یک رکورد پیدا کند، EXISTS مقدار TRUE برمی‌گرداند و اگر هیچ رکوردی پیدا نشود، EXISTS مقدار FALSE برمی‌گرداند.

ساختار:

SELECT ستون‌ها
FROM جدول
WHERE EXISTS (زیرپرس‌وجو);

توضیحات:

  • EXISTS فقط بررسی می‌کند که آیا زیرپرس‌وجو حداقل یک نتیجه برمی‌گرداند یا خیر.
  • نتیجه برگشتی از زیرپرس‌وجو به طور خاص اهمیتی ندارد، بلکه وجود یا عدم وجود رکوردها اهمیت دارد.
  • عملگر EXISTS بیشتر برای پرس‌وجوهای وابسته (Correlated Subqueries) استفاده می‌شود.

مثال:

فرض کنید دو جدول کاربران و سفارشات دارید و می‌خواهید کاربرانی را که حداقل یک سفارش ثبت کرده‌اند، نمایش دهید. می‌توانید از EXISTS استفاده کنید:

SELECT نام, ایمیل
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 برمی‌گرداند.

ساختار:

SELECT ستون‌ها
FROM جدول
WHERE NOT EXISTS (زیرپرس‌وجو);

توضیحات:

  • NOT EXISTS به طور خاص بررسی می‌کند که آیا هیچ رکوردی از زیرپرس‌وجو وجود ندارد.
  • مانند EXISTS، نتیجه برگشتی از زیرپرس‌وجو اهمیت ندارد، بلکه عدم وجود رکوردها در آن اهمیت دارد.
  • این عملگر معمولاً زمانی استفاده می‌شود که بخواهید داده‌هایی که در شرایط خاص موجود نیستند را پیدا کنید.

مثال:

فرض کنید می‌خواهید کاربرانی را پیدا کنید که هیچ سفارشی در جدول سفارشات ثبت نکرده‌اند. برای این کار می‌توانید از NOT EXISTS استفاده کنید:

SELECT نام, ایمیل
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 ابزارهایی برای بررسی وجود یا عدم وجود داده‌ها در یک زیرپرس‌وجو هستند. استفاده از این دو عملگر در پرس‌وجوهای وابسته به شما این امکان را می‌دهد که به طور مؤثر داده‌هایی را که شرایط خاصی دارند یا فاقد آن شرایط هستند، جستجو کنید.