تفاوت بین UNION و UNION ALL در چیست؟
در SQL، UNION
و UNION ALL
برای ترکیب نتایج دو یا چند پرس و جوی مختلف استفاده میشوند، اما در نحوهی مدیریت ردیفهای تکراری با یکدیگر تفاوت دارند.
UNION
به طور خودکار ردیفهای تکراری را از نتایج حذف میکند. این به این معنی است که اگر ردیفهای مشابهی در دو مجموعهی نتیجه وجود داشته باشد، تنها یک بار در نتیجه نهایی نشان داده میشوند. عملکرد این دستور معمولاً به دلیل نیاز به شناسایی و حذف تکراریها، میتواند کندتر باشد. در بیشتر سیستمهای پایگاه داده، برای حذف تکراریها نیاز به یک فرآیند مرتبسازی وجود دارد، که این خود تأثیر مستقیمی بر عملکرد و زمان اجرا دارد.
به عنوان مثال:
SELECT 'foo' AS bar
UNION
SELECT 'foo' AS bar
نتیجه:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
از سوی دیگر، UNION ALL
ردیفهای تکراری را حذف نمیکند و تمام نتایج را به صورت یکجا ترکیب میکند. این به معنای آن است که اگر دادهها در هر دو پرس و جو یکسان باشند، هر دو ردیف در نتایج نهایی نمایش داده خواهند شد، که این امر باعث میشود که UNION ALL
معمولاً سریعتر از UNION
باشد.
به عنوان مثال:
SELECT 'foo' AS bar
UNION ALL
SELECT 'foo' AS bar
نتیجه:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
برای استفاده از UNION
و UNION ALL
، باید توجه کرد که تمام ستونهای انتخاب شده باید از نوع دادهای یکسان باشند، در حالی که استاندارد SQL به این نکته اشاره دارد که توصیفگرهای ستونهای مربوطه (column descriptor) باید یکسان باشند حتی اگر نامها متفاوت باشند. این امر میتواند در برخی از پایگاههای داده به طور خاص بر روی عملکرد اثر بگذارد.
در نهایت، انتخاب بین UNION
و UNION ALL
بستگی به نیاز شما به حذف دادههای تکراری و همچنین کمیت و نوع دادههای مورد نظر دارد.