در SQL، دستورهای UNION و UNION ALL برای ترکیب دادهها از دو یا چند دستور SELECT استفاده میشوند. این دستورات به شما این امکان را میدهند که نتایج چندین پرسوجو را در یک مجموعه نتایج ترکیب کنید. تفاوت اصلی بین این دو دستور در نحوه برخورد با مقادیر تکراری است.
1. دستور UNION:
دستور UNION برای ترکیب نتایج دو یا چند پرسوجو استفاده میشود و به طور پیشفرض مقادیر تکراری را حذف میکند. یعنی فقط رکوردهای یکتا را در خروجی نمایش میدهد.
ساختار کلی دستور:
FROM جدول1
UNION
SELECT ستون1, ستون2, ...
FROM جدول2;
در اینجا:
- هر پرسوجوی
SELECTباید تعداد و نوع ستونهای یکسانی داشته باشد. UNIONنتایج هر دو پرسوجو را ترکیب کرده و فقط رکوردهای یکتا را در خروجی نشان میدهد.
مثال:
فرض کنید دو جدول داریم: کاربران_آقایان و کاربران_خانمها. میخواهیم نام کاربران از هر دو جدول را ترکیب کنیم:
UNION
SELECT نام FROM کاربران_خانمها;
در اینجا:
- تمام نامهای کاربران از هر دو جدول به یکدیگر ترکیب میشوند.
- اگر نام مشابهی در هر دو جدول وجود داشته باشد، فقط یک بار در نتیجه نمایش داده میشود.
2. دستور UNION ALL:
دستور UNION ALL مشابه دستور UNION است، با این تفاوت که مقادیر تکراری را حذف نمیکند و همه رکوردها، حتی اگر تکراری باشند، در نتیجه نمایش داده میشوند.
ساختار کلی دستور:
FROM جدول1
UNION ALL
SELECT ستون1, ستون2, ...
FROM جدول2;
در اینجا:
- مشابه
UNION، هر پرسوجویSELECTباید تعداد و نوع ستونهای یکسانی داشته باشد. - اما
UNION ALLتمام رکوردها را، حتی اگر تکراری باشند، در خروجی نمایش میدهد.
مثال:
با استفاده از همان دو جدول قبلی، اگر بخواهیم تمام نامها (از جمله تکراریها) را ترکیب کنیم، از دستور UNION ALL استفاده میکنیم:
UNION ALL
SELECT نام FROM کاربران_خانمها;
در اینجا:
- نامهای مشابه که در هر دو جدول وجود دارند، چند بار در نتیجه نمایش داده میشوند.
تفاوتهای اصلی بین UNION و UNION ALL:
| ویژگی | UNION |
UNION ALL |
|---|---|---|
| مقادیر تکراری | حذف میکند (فقط یکتاها نمایش داده میشوند) | نگه میدارد (مقادیر تکراری نیز نمایش داده میشوند) |
| عملکرد | معمولاً کندتر است چون مقادیر تکراری باید فیلتر شوند | سریعتر است چون نیازی به فیلتر کردن تکراریها نیست |
| خروجی | رکوردهای یکتا | تمام رکوردها (شامل تکراریها) |
نکات مهم:
- هر دو دستور باید از جداول یا زیرپرسوجوهای مشابه (از نظر تعداد و نوع ستونها) استفاده کنند.
- در صورتی که نیاز به نمایش همه رکوردها دارید، از
UNION ALLاستفاده کنید. - اگر از
UNIONاستفاده میکنید، عملکرد کمی کندتر خواهد بود زیرا باید تکراریها را شناسایی و حذف کند.
نتیجهگیری:
- اگر میخواهید نتایج چند پرسوجو را ترکیب کنید و تنها نتایج یکتا را میخواهید، از
UNIONاستفاده کنید. - اگر میخواهید همه رکوردها، حتی تکراریها، در نتیجه نمایش داده شوند، از
UNION ALLاستفاده کنید.