در MySQL، عملگر UNION برای ترکیب نتایج چندین دستور SELECT و نمایش آنها بهصورت یک مجموعه داده واحد استفاده میشود.
UNION دادههای بازیابیشده از چندین کوئری را ادغام میکند، اما مقادیر تکراری را حذف میکند. اگر بخواهیم تمامی مقادیر (حتی مقادیر تکراری) را نیز نمایش دهیم، از UNION ALL استفاده میکنیم.
در این مقاله، مفهوم UNION، تفاوت آن با UNION ALL، نحوه عملکرد و مثالهای کاربردی آن را بررسی خواهیم کرد.
۱. عملگر UNION در MySQL چیست؟
UNION در MySQL برای ترکیب نتایج دو یا چند کوئری SELECT و نمایش آنها در یک خروجی استفاده میشود.
🔹 ویژگیهای UNION:
- ادغام نتایج دو یا چند SELECT در یک مجموعه خروجی
- حذف مقادیر تکراری بهصورت پیشفرض
- تمامی کوئریهای SELECT باید تعداد ستونهای یکسانی داشته باشند
- نوع دادههای ستونها در هر کوئری باید سازگار باشد
۲. نحوه استفاده از UNION در MySQL
۲.۱. ساختار کلی UNION
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
🔹 قوانین مهم:
✅ تعداد ستونهای انتخابشده در تمام دستورات SELECT باید برابر باشد.
✅ نوع دادههای انتخابشده باید سازگار باشند.
✅ مقادیر تکراری بهصورت خودکار حذف میشوند.
۳. مثال عملی از UNION در MySQL
سناریو: ترکیب دو جدول مشتریان
فرض کنید دو جدول داریم:
جدول customers_2023 (مشتریان سال ۲۰۲۳)
customer_id | name | city |
---|---|---|
1 | علی احمدی | تهران |
2 | زهرا مرادی | مشهد |
جدول customers_2024 (مشتریان سال ۲۰۲۴)
customer_id | name | city |
---|---|---|
3 | رضا نوری | اصفهان |
2 | زهرا مرادی | مشهد |
✅ در اینجا، مشتری “زهرا مرادی” در هر دو جدول وجود دارد، بنابراین هنگام استفاده از UNION فقط یکبار نمایش داده خواهد شد.
۳.۱. استفاده از UNION برای ترکیب مشتریان دو سال
SELECT name, city FROM customers_2023
UNION
SELECT name, city FROM customers_2024;
✅ نتیجه:
name | city |
---|---|
علی احمدی | تهران |
زهرا مرادی | مشهد |
رضا نوری | اصفهان |
🔹 ویژگی:
- مقادیر تکراری (زهرا مرادی – مشهد) بهصورت خودکار حذف شدهاند.
۳.۲. استفاده از UNION ALL برای نمایش تمام دادهها (بدون حذف تکراریها)
SELECT name, city FROM customers_2023
UNION ALL
SELECT name, city FROM customers_2024;
✅ نتیجه:
name | city |
---|---|
علی احمدی | تهران |
زهرا مرادی | مشهد |
رضا نوری | اصفهان |
زهرا مرادی | مشهد |
🔹 ویژگی:
- مقادیر تکراری حذف نشدهاند و زهرا مرادی دو بار نمایش داده شده است.
۴. تفاوت UNION و UNION ALL
مقایسه | UNION | UNION ALL |
---|---|---|
حذف تکراریها | بله، مقادیر تکراری حذف میشوند. | خیر، تمام مقادیر نمایش داده میشوند. |
سرعت اجرا | کندتر، زیرا نیاز به پردازش و حذف مقادیر تکراری دارد. | سریعتر، چون مستقیماً همه رکوردها را نمایش میدهد. |
کاربرد | زمانی که دادههای منحصربهفرد میخواهیم. | زمانی که نیاز به مشاهده تمامی رکوردها داریم. |
۵. استفاده از ORDER BY در UNION
✅ در MySQL، نمیتوان ORDER BY را در هر SELECT جداگانه استفاده کرد، بلکه باید در انتهای کل UNION بیاید.
❌ دستور اشتباه:
SELECT name, city FROM customers_2023 ORDER BY name
UNION
SELECT name, city FROM customers_2024 ORDER BY name;
✅ دستور صحیح:
SELECT name, city FROM customers_2023
UNION
SELECT name, city FROM customers_2024
ORDER BY name;
۶. استفاده از UNION برای ترکیب دادهها از یک جدول
گاهی اوقات نیازی به ترکیب دو جدول مختلف نیست، بلکه میخواهیم مقادیر متفاوت از یک جدول را استخراج کنیم.
🔹 مثال: نمایش تمام کاربران تهران و مشهد از جدول users
SELECT name, city FROM users WHERE city = 'تهران'
UNION
SELECT name, city FROM users WHERE city = 'مشهد';
✅ نتیجه:
- لیستی از تمام کاربران که در تهران و مشهد هستند بدون مقادیر تکراری نمایش داده میشود.
۷. محدودیتهای استفاده از UNION در MySQL
❌ ستونهای دو SELECT باید تعداد یکسانی داشته باشند
SELECT name, city FROM customers_2023
UNION
SELECT name FROM customers_2024; -- خطا! ستونها برابر نیستند
✅ راهحل: اضافه کردن مقدار NULL به SELECT دوم
SELECT name, city FROM customers_2023
UNION
SELECT name, NULL FROM customers_2024;
۸. نکات کلیدی در استفاده از UNION
✔ UNION مقادیر تکراری را حذف میکند، UNION ALL همه رکوردها را نمایش میدهد.
✔ ستونهای SELECT در دو کوئری باید تعداد و نوع داده یکسانی داشته باشند.
✔ ORDER BY باید در انتهای UNION استفاده شود، نه در هر SELECT جداگانه.
✔ برای ترکیب مجموعه دادههای متفاوت از یک جدول، میتوان از UNION استفاده کرد.
۹. نتیجهگیری
عملگر UNION در MySQL ابزاری قدرتمند برای ترکیب نتایج چندین کوئری SELECT در یک خروجی واحد است. با استفاده از UNION میتوان دادههای منحصربهفرد را نمایش داد، در حالی که UNION ALL برای نمایش تمامی رکوردها، از جمله موارد تکراری استفاده میشود.
بهترین استفادهها از UNION:
✅ ترکیب دادههای مشابه از چندین جدول
✅ استخراج مجموعهای از دادههای منحصربهفرد
✅ ترکیب مجموعههای متفاوت از یک جدول واحد
✅ نمایش دادهها از چندین فیلتر مختلف در یک خروجی
💡 با شناخت صحیح از UNION و UNION ALL، میتوانید کوئریهای بهینهتری در MySQL اجرا کنید! 🚀