رفتن به محتوای اصلی
دیدگاه کلود | ارائه‌کننده سرورهای ابری و اختصاصی
آموزش استفاده از UNION در SQL

آموزش استفاده از UNION در SQL

در پایگاه‌های داده رابطه‌ای، اطلاعات معمولاً در چند جدول جدا ذخیره می‌شوند. اما وقتی گزارش می‌گیرید، اغلب لازم است داده‌ها را از بیش از یک جدول همزمان بخوانید.

در پایگاه‌های داده رابطه‌ای، اطلاعات معمولاً در چند جدول جدا ذخیره می‌شوند. اما وقتی گزارش می‌گیرید، اغلب لازم است داده‌ها را از بیش از یک جدول همزمان بخوانید.

SQL برای این کار از عملیات مجموعه‌ای (Set Operations) استفاده می‌کند. یکی از مهم‌ترین آن‌ها دستور UNION است که خروجی دو کوئری SELECT را با هم ترکیب می‌کند و یک نتیجه واحد می‌سازد.

در این آموزش یاد می‌گیرید:

  • چطور از UNION استفاده کنید

  • چطور نتایج را فیلتر و مرتب کنید

  • تفاوت UNION و UNION ALL چیست

  • چه اشتباه‌هایی باعث خطا یا خروجی اشتباه می‌شود


ساختار دستور UNION

فرم کلی:

 
SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2;

نکات مهم:

  • هر دو SELECT باید تعداد ستون یکسان داشته باشند

  • نوع داده ستون‌های متناظر باید سازگار باشد

  • ترتیب ستون‌ها در هر دو کوئری باید یکسان باشد

  • فقط انتهای کل دستور سمی‌کالن ; می‌گیرد


مثال کاربردی

فرض کنید دو جدول داریم:

  • book_purchases → خرید کتاب

  • book_leases → امانت گرفتن کتاب

می‌خواهیم لیست تمام مشتری‌هایی که یا خرید کرده‌اند یا کتاب امانت گرفته‌اند را ببینیم:

 
SELECT customer_name FROM book_purchases UNION SELECT customer_name FROM book_leases;

خروجی شامل همه افراد می‌شود، اما نام‌های تکراری حذف می‌شوند.


تفاوت اجرای جداگانه با UNION

اگر دو کوئری را جدا اجرا کنید، نام‌ها تکرار می‌شوند.
اما UNION:

✔ نتایج را ترکیب می‌کند
✔ ردیف‌های تکراری را حذف می‌کند


خطاهای رایج در UNION

❌ تعداد ستون‌ها برابر نیست

 
SELECT purchase_id, customer_name FROM book_purchases UNION SELECT customer_name FROM book_leases;

خطا:
The used SELECT statements have a different number of columns


❌ ترتیب ستون‌ها اشتباه است

 
SELECT customer_name, book_title FROM book_purchases UNION SELECT book_title, customer_name FROM book_leases;

خطا نمی‌دهد، ولی خروجی قاطی می‌شود چون ستون اول با ستون اول ترکیب می‌شود.


استفاده از WHERE همراه UNION

می‌توانید قبل از ترکیب، داده‌ها را فیلتر کنید:

 
SELECT book_title FROM book_purchases WHERE customer_name = 'Sammy' UNION SELECT book_title FROM book_leases WHERE customer_name = 'Sammy';

اینجا فقط کتاب‌هایی که یک مشتری خاص خریده یا امانت گرفته نمایش داده می‌شود.


مرتب‌سازی نتایج UNION

مرتب‌سازی روی نتیجه نهایی انجام می‌شود:

 
SELECT book_title FROM book_purchases WHERE customer_name = 'Sammy' UNION SELECT book_title FROM book_leases WHERE customer_name = 'Sammy' ORDER BY book_title;

UNION ALL چیست؟

UNION → تکراری‌ها حذف می‌شوند
UNION ALL → تکراری‌ها حفظ می‌شوند

مثال:

 
SELECT book_title FROM book_purchases WHERE date = '2022-10-01' UNION ALL SELECT book_title FROM book_leases WHERE date_from = '2022-10-01';

اگر کتابی هم خرید شده هم امانت گرفته شده باشد، دو بار در خروجی می‌آید.

مزیت UNION ALL

سریع‌تر است، چون دیتابیس لازم نیست تکراری‌ها را بررسی کند.


مقایسه UNION و UNION ALL

ویژگیUNIONUNION ALL
حذف داده تکراریبلهخیر
سرعت اجراکندترسریع‌تر
کاربردگزارش‌های یکتاتحلیل تعداد تکرار

جمع‌بندی

UNION ابزار قدرتمندی برای ترکیب نتایج چند جدول است.

نکات کلیدی:

  • تعداد و ترتیب ستون‌ها باید یکسان باشد

  • UNION تکراری‌ها را حذف می‌کند

  • UNION ALL همه داده‌ها را نگه می‌دارد

  • می‌توان از WHERE و ORDER BY استفاده کرد

  • مرتب‌سازی روی خروجی نهایی انجام می‌شود

اگر گزارش‌گیری حرفه‌ای انجام می‌دهید، بدون UNION عملاً دارید با دست خالی کار می‌کنید.