الگوریتم اول

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

در SQL، دستورهای UNION و UNION ALL برای ترکیب داده‌ها از دو یا چند دستور SELECT استفاده می‌شوند. این دستورات به شما این امکان را می‌دهند که نتایج چندین پرس‌وجو را در یک مجموعه نتایج ترکیب کنید. تفاوت اصلی بین این دو دستور در نحوه برخورد با مقادیر تکراری است.

1. دستور UNION:

دستور UNION برای ترکیب نتایج دو یا چند پرس‌وجو استفاده می‌شود و به طور پیش‌فرض مقادیر تکراری را حذف می‌کند. یعنی فقط رکوردهای یکتا را در خروجی نمایش می‌دهد.

ساختار کلی دستور:

SELECT ستون1, ستون2, ...
FROM جدول1
UNION
SELECT ستون1, ستون2, ...
FROM جدول2;

در اینجا:

  • هر پرس‌وجوی SELECT باید تعداد و نوع ستون‌های یکسانی داشته باشد.
  • UNION نتایج هر دو پرس‌وجو را ترکیب کرده و فقط رکوردهای یکتا را در خروجی نشان می‌دهد.

مثال:

فرض کنید دو جدول داریم: کاربران_آقایان و کاربران_خانم‌ها. می‌خواهیم نام کاربران از هر دو جدول را ترکیب کنیم:

SELECT نام FROM کاربران_آقایان
UNION
SELECT نام FROM کاربران_خانم‌ها;

در اینجا:

  • تمام نام‌های کاربران از هر دو جدول به یکدیگر ترکیب می‌شوند.
  • اگر نام مشابهی در هر دو جدول وجود داشته باشد، فقط یک بار در نتیجه نمایش داده می‌شود.

2. دستور UNION ALL:

دستور UNION ALL مشابه دستور UNION است، با این تفاوت که مقادیر تکراری را حذف نمی‌کند و همه رکوردها، حتی اگر تکراری باشند، در نتیجه نمایش داده می‌شوند.

ساختار کلی دستور:

SELECT ستون1, ستون2, ...
FROM جدول1
UNION ALL
SELECT ستون1, ستون2, ...
FROM جدول2;

در اینجا:

  • مشابه UNION، هر پرس‌وجوی SELECT باید تعداد و نوع ستون‌های یکسانی داشته باشد.
  • اما UNION ALL تمام رکوردها را، حتی اگر تکراری باشند، در خروجی نمایش می‌دهد.

مثال:

با استفاده از همان دو جدول قبلی، اگر بخواهیم تمام نام‌ها (از جمله تکراری‌ها) را ترکیب کنیم، از دستور UNION ALL استفاده می‌کنیم:

SELECT نام FROM کاربران_آقایان
UNION ALL
SELECT نام FROM کاربران_خانم‌ها;

در اینجا:

  • نام‌های مشابه که در هر دو جدول وجود دارند، چند بار در نتیجه نمایش داده می‌شوند.

تفاوت‌های اصلی بین UNION و UNION ALL:

ویژگی UNION UNION ALL
مقادیر تکراری حذف می‌کند (فقط یکتاها نمایش داده می‌شوند) نگه می‌دارد (مقادیر تکراری نیز نمایش داده می‌شوند)
عملکرد معمولاً کندتر است چون مقادیر تکراری باید فیلتر شوند سریع‌تر است چون نیازی به فیلتر کردن تکراری‌ها نیست
خروجی رکوردهای یکتا تمام رکوردها (شامل تکراری‌ها)

نکات مهم:

  • هر دو دستور باید از جداول یا زیرپرس‌وجوهای مشابه (از نظر تعداد و نوع ستون‌ها) استفاده کنند.
  • در صورتی که نیاز به نمایش همه رکوردها دارید، از UNION ALL استفاده کنید.
  • اگر از UNION استفاده می‌کنید، عملکرد کمی کندتر خواهد بود زیرا باید تکراری‌ها را شناسایی و حذف کند.

نتیجه‌گیری:

  • اگر می‌خواهید نتایج چند پرس‌وجو را ترکیب کنید و تنها نتایج یکتا را می‌خواهید، از UNION استفاده کنید.
  • اگر می‌خواهید همه رکوردها، حتی تکراری‌ها، در نتیجه نمایش داده شوند، از UNION ALL استفاده کنید.