📞 02166056460

عملگر UNION در اسکیوال

5 / 10
از 2 کاربر
بازگشت به لیست مقالات » | جمعه 1 آبان 1405 در ساعت 11 و 7 دقیقه | نظرات کاربران ( 0 )
آموزش SQL

دستور UNION در SQL؛ راهنمای ترکیب نتایج جداول

نحوه استفاده از UNION و UNION ALL همراه با مثال، تفاوت‌ها و نکات کاربردی

دستور UNION در SQL برای ترکیب نتایج چند پرس‌وجوی SELECT و نمایش آن‌ها در قالب یک مجموعه نتیجه به کار می‌رود. با کمک این عملگر می‌توان داده‌های دو یا چند جدول را زیر یکدیگر قرار داد؛ به شرطی که تعداد ستون‌ها و نوع داده ستون‌های متناظر با هم سازگار باشند.

۰۱

دستور UNION در SQL چیست و چه کاربردی دارد؟

UNION یک عملگر مجموعه‌ای در SQL است که خروجی دو یا چند دستور SELECT را با هم ترکیب می‌کند. نتیجه نهایی به شکل مجموعه‌ای یکپارچه نمایش داده می‌شود، نه به صورت ستون‌های متصل به هم. بنابراین، اگر نام کارکنان دو شعبه در دو جدول جداگانه ثبت شده باشد، می‌توان با UNION نام‌ها را در یک ستون و یک فهرست مشاهده کرد.

این عملگر برای داده‌هایی مناسب است که ساختار مشابه دارند اما در جدول‌های جدا نگهداری می‌شوند؛ برای نمونه، اطلاعات فروش دو منطقه، فهرست مشتریان دو سامانه یا سوابق مربوط به دو دوره زمانی. هر SELECT داده‌های یکی از منابع را می‌خواند و UNION نتیجه‌ها را به یکدیگر اضافه می‌کند.

📊

ترکیب نتایج

خروجی چند دستور SELECT را در یک مجموعه نتیجه نمایش می‌دهد.

🔄

حذف تکرارها

در حالت عادی، ردیف‌های تکراری را از نتیجه نهایی حذف می‌کند.

⚙️

ساختار سازگار

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

۰۲

ساختار پایه دستور UNION

هر بخش از عبارت UNION باید یک دستور SELECT معتبر باشد. ستون‌هایی که در بخش‌های مختلف انتخاب می‌شوند باید از نظر تعداد برابر باشند و نوع داده آن‌ها نیز سازگاری لازم را داشته باشد. ترتیب ستون‌ها اهمیت دارد؛ زیرا ستون اول یک SELECT با ستون اول SELECT بعدی مقایسه می‌شود، نه با ستونی که نام مشابهی دارد.

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

SELECT E_Name FROM Employees_Norway
UNION
SELECT E_Name FROM Employees_USA;

در دستور اصلی می‌توان به جای نام کارکنان، یک یا چند ستون دیگر را انتخاب کرد. اگر چند ستون انتخاب می‌شوند، باید تعداد آن‌ها در هر SELECT برابر باشد و ستون‌های هم‌جایگاه بتوانند در یک نتیجه مشترک قرار بگیرند. استفاده از نام مستعار نیز می‌تواند خواندن خروجی را ساده‌تر کند.

۵ نکته مهم درباره دستور UNION در SQL

۰۳

۱. تعداد ستون‌های انتخاب‌شده را یکسان نگه دارید

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

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

۰۴

۲. نوع داده ستون‌های متناظر را بررسی کنید

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

فرض کنید یک SELECT ستون نام مشتری و SELECT دیگر کد عددی مشتری را برمی‌گرداند. هر دو ستون از نظر تعداد درست هستند، اما معنای داده و نوع آن‌ها با هم تطابق ندارند. بهتر است پیش از اجرای UNION، نوع، معنای هر ستون و امکان تبدیل امن آن را بررسی کنید.

۰۵

۳. تفاوت UNION و UNION ALL را بشناسید

UNION به طور معمول ردیف‌های تکراری را از نتیجه نهایی حذف می‌کند. اگر یک نام در هر دو جدول وجود داشته باشد، آن مقدار یک بار نمایش داده می‌شود. این رفتار برای تهیه فهرست یکتا مفید است، اما ممکن است هنگام تحلیل داده‌ها، تعداد تکرارهای معنادار را پنهان کند.

در مقابل، UNION ALL همه ردیف‌ها را نگه می‌دارد؛ حتی اگر چند ردیف کاملاً مشابه باشند. برای مثال، اگر هدف شمارش تمام رخدادهای ثبت‌شده در دو جدول باشد، حذف تکرارها می‌تواند آمار را تغییر دهد. در چنین سناریویی، UNION ALL انتخاب مناسب‌تری است.

۰۶

۴. ترتیب ستون‌ها را در تمام SELECTها هماهنگ کنید

در UNION، ارتباط ستون‌ها بر اساس جایگاه آن‌ها تعیین می‌شود. یعنی ستون اول یک SELECT با ستون اول SELECT بعدی ترکیب خواهد شد. یکسان بودن نام ستون‌ها به تنهایی کافی نیست؛ ترتیب انتخاب باید طوری باشد که داده‌های هم‌معنا کنار هم قرار بگیرند.

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

۰۷

۵. مرتب‌سازی را در انتهای پرس‌وجوی ترکیبی انجام دهید

اگر لازم است خروجی مجموعه مرتب شود، معمولاً باید ORDER BY را پس از آخرین SELECT و در انتهای عبارت ترکیبی بنویسید. به این ترتیب، مرتب‌سازی روی نتیجه UNION انجام می‌شود، نه فقط روی یکی از جدول‌ها.

برای مثال، اگر نام کارکنان دو شعبه را ترکیب کرده‌اید و می‌خواهید نتیجه بر اساس نام مرتب شود، ORDER BY را بعد از بخش UNION قرار دهید. در بیشتر موارد بهتر است در عبارت مرتب‌سازی از نام ستون خروجی یا جایگاه آن مطابق قواعد سامانه پایگاه داده استفاده کنید.

نکته توضیح کوتاه درجه اهمیت
تعداد ستون‌ها همه دستورهای SELECT باید تعداد ستون برابر داشته باشند. ضروری
نوع داده نوع ستون‌های متناظر باید با یکدیگر سازگار باشد. ضروری
تکراری‌ها UNION حذف و UNION ALL حفظ ردیف‌های تکراری را انجام می‌دهد. بسیار مهم
ترتیب ستون‌ها ستون‌های هم‌معنا باید در جایگاه یکسان انتخاب شوند. بسیار مهم
مرتب‌سازی برای مرتب کردن کل خروجی، ORDER BY را در انتهای عبارت بیاورید. تکمیلی
۰۸

دستور UNION ALL برای نگه داشتن همه ردیف‌ها

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

SELECT E_Name FROM Employees_Norway
UNION ALL
SELECT E_Name FROM Employees_USA;

برای نمونه، تصور کنید در هر جدول یک ردیف با نام «سارا» وجود دارد. UNION نام را یک بار نشان می‌دهد، اما UNION ALL هر دو ردیف را نگه می‌دارد. این تفاوت در گزارش‌هایی که تعداد واقعی رکوردها اهمیت دارد، بسیار مهم است.

UNION
حذف ردیف‌های تکراری
UNION ALL
حفظ همه ردیف‌ها
SELECT
منبع هر مجموعه نتیجه

مزایا و محدودیت‌های استفاده از UNION

۰۹

مزایا در گزارش‌گیری و یکپارچه‌سازی

UNION راهی روشن برای کنار هم قرار دادن داده‌هایی است که در چند جدول یا چند پرس‌وجو نگهداری می‌شوند. به جای اجرای جداگانه چند SELECT و ترکیب دستی نتایج، می‌توان یک مجموعه خروجی ساخت و آن را در گزارش یا برنامه مصرف کرد. این روش زمانی کاربردی است که ساختار داده‌ها مشابه باشد.

این عملگر همچنین می‌تواند برای ساخت فهرست‌های یکپارچه، مانند فهرست نام مشتریان چند منطقه، مفید باشد. با انتخاب UNION یا UNION ALL، کنترل می‌کنید که نتیجه نهایی یکتا باشد یا تمام ردیف‌های اولیه را حفظ کند.

۱۰

محدودیت‌هایی که باید در نظر بگیرید

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

همچنین حذف تکرارها در UNION ممکن است در مجموعه‌های بزرگ هزینه پردازشی داشته باشد؛ زیرا پایگاه داده باید ردیف‌ها را برای شناسایی موارد یکسان بررسی کند. اگر حفظ تمام داده‌ها خواسته اصلی است، UNION ALL معمولاً گزینه مستقیم‌تری است. تصمیم نهایی باید با توجه به نیاز گزارش و حجم داده گرفته شود.

مزایای دستور UNION

ترکیب ساده و قابل‌کنترل داده‌ها

برای گزارش‌های چندمنبعی و فهرست‌های یکپارچه
۰۱
یکپارچگی

خروجی مشترک

چند نتیجه SELECT را در یک مجموعه نمایش دهید.

۰۲
انتخاب

کنترل تکرار

حذف یا حفظ ردیف‌های تکراری را انتخاب کنید.

۰۳
گزارش

فهرست یکپارچه

داده‌های منابع مشابه را یکجا بررسی کنید.

۰۴
خوانایی

پرس‌وجوی روشن

ساختار ترکیب نتایج را ساده و قابل‌فهم نگه دارید.

۱۱

نکات کاربردی و خطاهای رایج

اگر هنگام اجرای UNION با خطا روبه‌رو شدید، ابتدا تعداد ستون‌های تمام SELECTها را مقایسه کنید. سپس نوع داده و ترتیب هر ستون را بررسی کنید. گاهی یک ستون محاسباتی، مقدار ثابت یا مقدار خالی باعث می‌شود ساختار دو بخش با هم هماهنگ نباشد.

برای ساده‌تر شدن بررسی، ابتدا هر SELECT را به تنهایی اجرا کنید. خروجی هر کدام را از نظر نام، ترتیب و نوع داده ستون‌ها بسنجید و پس از اطمینان، عملگر UNION را اضافه کنید. اگر هدف حفظ همه ردیف‌هاست، از همان ابتدا UNION ALL را در نظر بگیرید تا رفتار پرس‌وجو با نیاز واقعی هماهنگ باشد.

✅

تعداد ستون‌ها

پیش از ترکیب، تعداد خروجی ستون‌ها را در تمام SELECTها مقایسه کنید.

🔎

نوع داده‌ها

سازگاری نوع داده ستون‌های هم‌جایگاه را بررسی کنید.

📌

نوع عملگر

برای حذف تکرار UNION و برای حفظ همه ردیف‌ها UNION ALL را انتخاب کنید.

مطالعه بیشتر

مفاهیم SQL را گام‌به‌گام یاد بگیرید

برای آشنایی با موضوعات بیشتر، بخش آموزش sql را ببینید و کاربرد دستور UNION و UNION ALL را در مثال‌های مختلف بررسی کنید.

مشاهده آموزش SQL ←
۱۲

نتیجه‌گیری

دستور UNION در SQL برای ترکیب خروجی چند دستور SELECT و ساخت یک مجموعه نتیجه مشترک استفاده می‌شود. برای اجرای درست آن باید تعداد ستون‌ها، نوع داده‌ها و ترتیب ستون‌های متناظر را هماهنگ کنید. همچنین انتخاب بین UNION و UNION ALL به این بستگی دارد که حذف ردیف‌های تکراری مطلوب باشد یا لازم باشد همه ردیف‌ها در خروجی بمانند.

اگر خروجی یکتا می‌خواهید، UNION را به کار ببرید؛ اگر تمام رکوردها اهمیت دارند، UNION ALL گزینه مناسب‌تری است. در نهایت، هر بخش SELECT را جداگانه بررسی کنید و عملگر را بر اساس هدف گزارش انتخاب کنید. برای آشنایی با خدمات طراحی سایت نیز می‌توانید به این صفحه مراجعه کنید.

سوالات متداول دستور UNION در SQL

دستور UNION در SQL چه کاری انجام می‌دهد؟

UNION نتیجه دو یا چند دستور SELECT را در یک مجموعه خروجی ترکیب می‌کند. این عملگر برای داده‌هایی مناسب است که ساختار مشابه دارند و قرار است به صورت ردیف‌های یک فهرست مشترک نمایش داده شوند.

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

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

آیا نام ستون‌ها در دو دستور SELECT باید یکسان باشد؟

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

آیا می‌توان با UNION ستون‌های دو جدول را کنار هم قرار داد؟

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

ORDER BY را در کدام بخش پرس‌وجوی UNION می‌نویسیم؟

برای مرتب‌سازی نتیجه نهایی، ORDER BY را معمولاً پس از آخرین دستور SELECT و در انتهای عبارت ترکیبی قرار می‌دهند. قواعد دقیق ارجاع به ستون خروجی ممکن است با توجه به سامانه پایگاه داده تفاوت داشته باشد.

با انتخاب درست، نتیجه دقیق‌تری از SQL بگیرید

تعداد و نوع ستون‌ها را هماهنگ کنید و با توجه به نیاز خود میان UNION و UNION ALL انتخاب کنید.

مرور دستور UNION ←
ارسال نظر و نظرات ثبت شده
سایر مقالات
دستور ISNULL در اس کیو ال آموزش SQL دستور ISNULL در SQL؛ آموزش کاربرد، تفاوت‌ها و مثال‌ها یاد بگیرید مقدار ...
مقدار Null در اس کیو ال آموزش پایگاه داده مقدار Null در SQL چیست و چگونه از آن استفاده کنیم؟ تفاوت مقدار تهی با رش ...
دستور SELECT INTO در sql آموزش SQL دستور SELECT INTO در SQL؛ آموزش ساخت جدول و نسخه پشتیبان یاد بگیرید چطور داده ها ...
عملگر UNION در اسکیوال آموزش SQL دستور UNION در SQL؛ راهنمای ترکیب نتایج جداول نحوه استفاده از UNION و UNION ALL ...
دستور FULL JOIN در sql آموزش SQL دستور FULL JOIN در SQL؛ آموزش کامل با مثال ترکیب همه سطرهای دو جدول، حتی وقتی بر ...
دستور RIGHT JOIN در sql راهنمای SQL دستور RIGHT JOIN در SQL؛ آموزش، مثال و کاربردها نحوه نمایش همه رکوردهای جدول س ...
دستور LEFT JOIN در sql آموزش SQL دستور LEFT JOIN در SQL؛ آموزش کاربرد و مثال با حفظ همه رکوردهای جدول سمت چپ، داد ...
دستور INNER JOIN در sql آموزش SQL دستور INNER JOIN در SQL؛ آموزش کاربرد و مثال یاد بگیرید چگونه داده‌های مرتب ...
دستورات پیوند و Join در SQL آموزش پایگاه داده SQL JOIN چیست؟ راهنمای تفاوت انواع دستورهای پیوند آشنایی با INNER JOIN، ...
Alias در اس کیو ال آموزش SQL Alias در SQL چیست و چگونه از آن استفاده کنیم؟ راهنمای نام گذاری موقت ستون ها و ج ...
عملگر BETWEEN در شرطهای sql آموزش SQL عملگر BETWEEN در SQL؛ آموزش استفاده از بازه ها کاربرد، ساختار، مثال ها و نکات مه ...
عملگر In در شرط های sql آموزش SQL عملگر IN در SQL چیست و چگونه از آن استفاده کنیم؟ راهنمای کاربردی بررسی چند مقدار ...
علامت های شرطی در Like علامت های شرطی در LIKE و کاربرد آن ها در SQL 💡آشنایی با جستجوی الگویی هنگام جستجو در پایگ ...
عملگر Like در SQL عملگر LIKE در SQL چیست و چه کاربردی دارد؟ 🔎جست وجوی الگو در داده ها عملگر LIKE در SQL برا ...
دستور شرطی Top در SQL دستور TOP در SQL چیست و چه کاربردی دارد؟ 💡آشنایی با محدود کردن خروجی دستور TOP در SQL برای ...
دسته بندی
جستجو
⏳ در حال پردازش...
لطفا صبر کنید