در 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
استفاده کنید.
