دستور Union در SQL – از کاربرد تا نحوه استفاده به زبان ساده


دستور UNION در SQL برای ترکیب کردن نتایج حاصل از کوئریها بر روی جدولهای مختلف در پایگاه داده استفاده میشود. دستور UNION بعد از اجرای عمل ترکیب دادههای تکراری بدست آمده را حذف میکند. با استفاده از دستور UNION میتوانیم اشتراک و افتراق نتایج کوئری اجرا شده بر روی جدولها را محاسبه کرده و برگردانیم. در زمان کار با پایگاه دادههای بزرگ ممکن است که جدولهای بسیار زیاد و مختلفی از دادهها تشکیل شوند. مدیران پایگاه داده برای اینکه بتوانند با دادههای درون این جدولها به طور کامل و راحت کار کنند نیاز به ابزارهای مختلفی دارند که یکی از بهترین ابزارها برای این کار دستور UNION است. با کمک این دستور گرفتن گزارشات مربوط به دادههای چندین جدول مختلف در پایگاههای داده SQL محور بهسادگی ممکن میشود.
در این مطلب از مجله فرادرس، در ابتدا با دستور UNION آشنا شدهایم. سپس انواع روشهای استفاده از این دستور را بررسی کرده و ترکیبات مختلف ممکن درباره این دستور را همراه با عبارتهای WHERE و ORDER BY در SQL بررسی کردیم. در نهایت هم روش استفاده از «نامهای مستعار» (Aliases) را برای ستونهای جدول نتیجه توضیح دادهایم. تمام این توضیحات و بررسیها همراه با مثال و بر روی جدولهایی با دادههای فرضی ارائه شدهاند.
دستور UNION در SQL چیست؟
دستور UNION در SQL برای ترکیب کردن دادههای چندین جدول مختلف همراه با حذف ردیفهای تکراری بهکار برده میشود. برای اینکه از دستور UNIONبر روی چندین جدول مختلف استفاده کنیم، همه این جدولها باید قابلیت اتحادپذیری داشته باشند. به جداول مختلف به شرطی اتحادپذیر میگویند اگر و تنها اگر معیارهای زیر را داشته باشند.
- در محله اول، تعداد ستون یکسانی از جداول با نوع دادههای یکسان انتخاب شدهاند.
- دقت میکنیم که ستونهای یکسان انتخاب شده حتما نظم یکسانی هم داشته باشند.
- در آخر اما نیازی به تعداد ردیفهای همسان در جدولهای مختلف وجود ندارد.
همینکه این معیارها محقق شوند، دستور UNIONترکیبی از ردیفهای جداول مختلف را به صورت جدول جواب برمیگرداند. در انجام این کار، را مقادیر تکراری موجود در جدولها را از مجموعه نتیجه نهایی حذف میکند.

نام ستونهای درون جدول نتیجه بر اساس نامهای ستونهای انتخاب شده در اولین عبارت SELECT در SQL تعیین میشوند. اگر بخواهیم که از نامهای دیگری برای ستونهای جدول جواب نهایی بهره ببریم، میتوانیم از نامهای مستعار در عبارت SELECT استفاده کنیم.
سینتکس پایه دستور UNION در SQL
در کادر زیر، سینتکس پایه دستور UNIONرا به زبان SQL کدنویسی کردهایم.
در کد بالا شرط داده شده [WHERE condition] میتواند هر عبارت دلخواهی بر اساس نیاز مدیر پایگاه داده باشد.
بهترین روش آموزش SQL Server
دستور UNIONیکی از دستورات بسیار کلیدی مخصوصا در تهیه گزارشات است. چندین دستور دیگر مانند دستور UNIONوجود دارند که برای کار کردن با SQL تا حد زیادی مفید و موثر هستند. معمولا بهترین روش استفاده از این دستورها زمانی است که آنها را با یکدیگر ترکیب میکنیم. آموزش کوئرینویسی پیشرفته یکی از تکنیکهای ارتقا سطح مهارت در کار با پایگاه داده SQL Server است.
SQL «زبان ساختاریافته کوئرینویسی» (Structured Query Language) است که برای کار با پایگاههای داده رابطه طراحی شده است. SQL Server، یکی از بهترین پایگاههای دادهای است که با زبان SQL کار میکند. برای کار با SQL Server فیلمهای آموزشی پیشرفته و حرفهای در فرادرس تولید شدهاند. هر شخصی چه مبتدی یا ناآشنا با پایگاه داده باشد و چه حرفهای، با مشاهده فیلمهای مربوط به سطح علمی خودش و تمرین به راحتی بر کار با این پایگاه داده مسلط میشود.

در ادامه چند مورد از این فیلمهای آموزشی را معرفی کردهایم. فیلمهای آموزشی فرادرس حاوی اطلاعاتی هستند که با حساسیت و دقت بالایی تولید و در صحت و تناسب کنار یکدیگر چیده شدهاند. در صورت تمایل به دیدن فیلمهای بیشتر میتوانید بر روی تصویر بالا کلیک کرده و به صفحه اصلی این مجموعه آموزش منتقل شوید.
- فیلم آموزش اس کیو ال سرور دوره تکمیلی در فرادرس
- فیلم آموزش اس کیو ال سرور دوره پیشرفته در فرادرس
- فیلم آموزش کوئری نویسی پیشرفته در SQL Server با فرادرس
- فیلم آموزش استفاده از JSON در SQL در فرادرس
دستور UNION بر روی یک ستون مجزا
از دستور UNIONمیتوان برای ترکیب مجموعه نتایج هر چندتا عبارت SELECTبر اساس فقط یک ستون مجزا استفاده کرد. برای اینکار، فقط کافی است که به سادگی آن ستون را در عبارت SELECTمربوط به هر کوئری شامل کنیم. دستور UNIONبه صورت خودکار هر داده تکراری را در مجموعه جواب نهایی حذف میکند.
به طور کل، توانایی کوئرینویسی حرفهای مسئولیت بسیار مهمی است که مدیران پایگاه داده سیستمهای بزرگ باید بتوانند بهخوبی از پس آن بربیایند. یکی از بهترین راههای آموزش این مسئله مشاهده فیلم آموزش کوئری نویسی پیشرفته در SQL Server از فرادرس است. برای راحتی کار شما لینک مربوط به این فیلم آموزشی را در پایین، قرار دادهایم.
وقتی که از دستور UNIONتنها بر روی یک ستون استفاده میکنیم، نام ستونهای درون مجموعه جواب نهایی بر اساس نام ستونهای داخل عبارت SELECTاول تعیین میشوند. بنابراین، شاید لازم باشد که از نام مستعار در عبارت SELECTاستفاده کنیم. با انجام این کار اطمینان حاصل میکنیم که ستونهای درون جدول جواب نهایی دارای نامهای معنیدار هستند.
مثال
فرض کنیم همینطور که در پایین نمایش دادهایم، جدولی به نام مشتریان CUSTOMERS با استفاده از دستور CREATE TABLE در پایگاه داده MySQL ایجاد کردهایم.
سپس با استفاده از دستور INSERT در SQL به شکل کوئری زیر، مقادیر مختلفی را برای استفاده در جدول ساخته شده وارد میکنیم.
با اجرای کوئری بالا، جدول مشتریان به شکلی که در پایین نمایش داده شده ایجاد میشود.
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
الان با استفاده از دستور CREATE TABLE جدول دومی را برای سفارشات با نام ORDERS ایجاد میکنیم. کوئری ساخت جدول دوم مطابق کادر زیر نوشته شده است.
با استفاده از دستور INSERT به شکل کوئری زیر، مقادیر دیگری را نیز به این جدول جدید وارد میکنیم.
بعد از اجرای کوئریهای بالا، جدول ORDERS به شکل نمایش داده شده در پایین، ساخته میشود.
OID | DATE | CUSTOMER_ID | AMOUNT |
---|---|---|---|
102 | 2009-10-08 00:00:00 | 3 | 3000.00 |
100 | 2009-10-08 00:00:00 | 3 | 1500.00 |
101 | 2009-11-20 00:00:00 | 2 | 1560.00 |
103 | 2008-05-20 00:00:00 | 4 | 2060.00 |
الان با استفاده از کوئری زیر میخواهیم که ستونهای میزان درامد SALARY و قیمت کالا AMOUNT را به ترتیب از جدولهای CUSTOMERSو ORDERSباهم ترکیب کنیم. زیرا این ستونها از نوع دادههای یکسانی استفاده می کنند.
خروجی
بعد از ترکیب ستونهای SALARYو AMOUNTاز جدولهای CUSTOMERS و ORDERS با استفاده از کوئری بالا، نتیجه به صورت زیر، جدولی با یک ستون، در خروجی نمایش داده میشود.
SALARY |
---|
2000.00 |
1500.00 |
6500.00 |
8500.00 |
4500.00 |
10000.00 |
3000.00 |
1560.00 |
2060.00 |
اجرای دستور UNION بر روی چند ستون مختلف
زمانی که دستور UNIONرا بر روی چند ستون مختلف اجرا میکنیم، در هر عبارت SELECT در SQL، تعداد و ترتیب ستونها باید با هم سازگار باشند. همچنین نوع داده مربوط به ستونهای همسان نیز باید با هم همخوانی داشته باشند، تا در نهایت دستور UNION بهدرستی کار کند.
اگر نوعهای داده ستونها با یکدیگر همخوان نباشند، شاید نیاز به استفاده از استفاده از توابع تبدیل کننده نوع داده مانند CAST یا CONVERT داشته باشیم. با استفاده از این توابع مطمئن میشویم که نوع دادههای ستونهای مختلف با همدیگر سازگار هستند.

مثال
از آنجا که جدولهای CUSTOMERS و ORDERS، به صورت جداگانه، توانایی متحد شدن را ندارند، در ابتدا باید این دو جدول را برای ساخت جدول بزرگتری به عنوان واسطه با یکدیگر ترکیب کنیم. برای انجام این کار، جدول بزرگتر را در وسط قرار داده و از تکینک «اجماع از چپ» (Left Join) و «اجماع از راست» (Right Join) استفاده میکنیم. در واقع کاری که با کمک این دستور انجام میدهیم همان عمل ساخت اتحاد در مجموعهها است. جدولهای اجتماع یافته و بازیابی شده همان تعداد ستونها را با همان نوع داده خواهند داشت. الان جداول جدید دارای قابلیت متحد شدن هستند. این جدولها را میتوانیم با استفاده از دستور UNIONنمایش داده شده در پایین با یکدیگر ترکیب کنیم.
خروجی
با اجرای کوئری بالا، دادههای جواب به شکل جدول زیر در خروجی به کاربر نمایش داده میشوند.
ID | NAME | AMOUNT | DATE |
---|---|---|---|
1 | Ramesh | NULL | NULL |
2 | Khilan | 1560 | 2009-11-20 00:00:00 |
3 | Kaushik | 3000 | 2009-10-08 00:00:00 |
3 | Kaushik | 1500 | 2009-10-08 00:00:00 |
4 | Chaitali | 2060 | 2008-05-20 00:00:00 |
5 | Hardik | NULL | NULL |
6 | Komal | NULL | NULL |
7 | Muffy | NULL | NULL |
دستور UNION همراه با عبارت WHERE
میتوانیم از عبارت WHERE در SQL همراه با دستور UNIONاستفاده کنیم. با کمک این ترکیب دستوری میتوانیم نتایج هر عبارت SELECT را قبل از ترکیب کردن آنها با هم فیلتر کنیم.
SQL دستورات زیادی دارد که برای کار با پایگاه داده ضروری هستند. در صورتی که تمایل به نگاه کلی به دستورات اصلی SQL دارید، پیشنهاد میکنم که مطلب ۱۳ دستور SQL مهم که هر برنامهنویسی باید بداند از مجله فرادرس را مطالعه کنید.
سینتکس پایه دستور
در کادر زیر شکل سینتکس پایه، برای ترکیب دستور UNIONهمراه با عبارت WHERE را پیادهسازی کردهایم.

مثال
در کوئری پایین، شماره ID مشتریها را با شرایط زیر فراخوانی میکنیم.
- شماره IDدر جدول CUSTOMERS از 5 بزرگتر باشد.
- شماره IDدر جدول ORDERS از 2 بیشتر باشد.
خروجی
با اجرای کوئری بالا، جدول زیر به عنوان نتیجه جواب در خروجی نمایش داده میشود.
ID | SALARY |
---|---|
6 | 4500.00 |
7 | 10000.00 |
3 | 3000.00 |
3 | 1500.00 |
4 | 2060.00 |
دستور UNION همراه با عبارت ORDER BY
در کوئری میتوانیم از دستور UNIONهمراه با عبارت ORDER BY نیز استفاده کنیم. این کار، مجموعه جوابهای مرتب شده همه عبارتهای SELECTرا با یکدیگر ترکیب کرده و سپس مجموعه جواب مجزایی را به صورت مرتب شده ایجاد میکند.
مثال
در این کد، شماره ID همه مشتریان را با توجه به شرایط زیر فراخوانی میکنیم.
- شماره IDدر جدول CUSTOMERSاز 5 بزرگتر باشد.
- شماره IDدر جدول ORDERSاز 2 بیشتر باشد.
در نهایت همه شمارههای IDرا بر اساس میزان حقوقشان از کم به زیاد -به صورت صعودی- مرتب میکنیم.
خروجی
با اجرای کوئری بالا، جدول زیر به عنوان نتیجه جواب در خروجی نمایش داده میشود.
ID | SALARY |
---|---|
3 | 1500.00 |
4 | 2060.00 |
3 | 3000.00 |
6 | 4500.00 |
7 | 10000.00 |
توجه: دستور ORDER BY در عبارت UNIONبر روی همه مجموعه جوابهای عبارت اعمال میشود. نه فقط بر روی جوابهای عبارت SELECTکه در آخر آمده است.
فیلم های آموزش انواع پایگاه های داده در فرادرس
SQL زبان مخصوص کوئرینویسی برای کار با پایگاههای داده رابطهای است. پایگاههای داده غیر رابطهای زبان کوئرینویسی مخصوص به خود را دارند. خود پایگاههای داده رابطهای چندین نوع نرمافزار مختلف دارند. نرمافزارها مختلفی توسط سازمانها و تیمهای برنامهنویسی گوناگون با توجه به نیازهای هر سازمان، طراحی شدهاند.
دورههای مربوط به آموزش هر کدام از این پایگاههای داده با کیفیتهای متفاوت و شرایط خاصی توسط آموزشگاههای مختلفی ارائه میشوند. اما تقریبا هیچ آموزشگاهی نمیتوان پیدا کرد که همه این پایگاههای داده را پوشش دهد. در فرادرس به دلیل تهیه فیلمهای آموزشی با کیفیت و تنوع دورههای مربوط به پایگاه داده یکی از بزرگترین مرجعهای آموزشی دانشجویان و علاقهمندان به علم، ایجاد شده است. کیفیت بالا، نبود محدودیت زمانی، هزینه مقرون به صرفهتر به نسبت کلاسهای حضوری و امکان بازبینی نامحدود فیلمهای آموزشی از جمله عواملی هستند که بر محبوبیت فرادرس افزودهاند.

در این قسمت از مطلب، فیلمهای آموزشی مربوط به چند پایگاه داده مختلف را همراه تمرینات موجود در هر کدام معرفی کردهایم. در صورت تمایل به دیدن فیلمهای بیشتر درباره پایگاههای داده متنوع و موجود با کلیک بر روی تصویر بالا میتوانید به صفحه اصلی این مجموعه آموزش منتقل شده و گزینههای بیشتری را بررسی کنید.
- فیلم آموزش پایگاه داده ها و اصول طراحی آن در فرادرس
- فیلم آموزش پایگاه داده MySQL در فرادرس
- فیلم آموزش اوراکل، مدیریت بانک اطلاعاتی با Oracle دوره مقدماتی در فرادرس
- فیلم آموزش پایگاه داده کلیک هاوس، مبانی و مقدمات (رایگان) در فرادرس
- فیلم آموزش مقدماتی PostgreSQL برای مدیریت پایگاه داده در فرادرس
دستور UNION در SQL همراه با نام های مستعار
از نامهای مستعار نیز میتوانیم در عبارت SELECTاز دستور UNIONاستفاده کنیم. با این کار در زمان ساخت جدول در SQL یا ستونهای آن، نامی موقتی به هر کدام از آنها اختصاص داده میشود. در زمان کار کردن با جدولها و ستونها مختلفی که نام یکسان دارند، این کار بسیار مفید است.
وقتی که از دستور UNIONهمراه با نامهای مستعار استفاده میکنیم، باید به خاطر داشت که نامهای مستعارِ ستونها توسط اولین عبارت SELECTتعیین میشوند. اما شاید بخواهیم که از نام مستعار متفاوتی برای ستون یکسانی در عبارت SELECTدیگری نیز استفاده کنیم. برای اینکار لازم است که از نام مستعار ستونها در همه عبارتهای SELECTاستفاده کنیم. انجام این رفتار، باعث اطمینان از ثابت بودن نام ستونها در مجموعه جواب نهایی میشود.

سینتکس پایه کوئری
در کادر زیر سینتکس پایه روش استفاده از دستور UNIONرا همراه با نامهای مستعار نمایش دادهایم.
مثال
در کوئری زیر همه شمارههای IDرا از هر دو جدول فراخوانی میکنیم. همراه با شمارههای IDنشان میدهیم که هر شماره مربوط به کدام جدول است. یعنی در مقابل شماره IDو در یک ستون جدید مینویسیم که هر شماره مربوط به مشتری است یا سفارش.
خروجی
با اجرای کوئری بالا، جدول زیر به عنوان نتیجه جواب در خروجی نمایش داده میشود.
ID | type |
---|---|
1 | customer |
2 | customer |
3 | customer |
4 | customer |
5 | customer |
6 | customer |
7 | customer |
100 | order |
101 | order |
102 | order |
103 | order |
عملگرهای مشابه دستور UNION در SQL
در زبان SQL دو عملگر دیگر وجود دارند که شبیه به دستور UNIONکار میکنند.
- دستور SQL INTERSECT: از این عملگر برای ترکیب کردن دو عبارت SELECTاستفاده میشود. اما در جواب فقط ردیفهای مربوط به جدول جواب در عبارت SELECT اول را نمایش میدهد. البته هر کدام از این ردیفها نشانهای برای ردیف متناظری در جدول دوم هستند. در واقع با کمک این دستور اشتراک بین دو جدول را بدست میآوریم.
- دستور EXCEPT Operator: با کمک این دستور هم دو عبارت SELECTرا با یکدیگر ترکیب میکنیم. این دستور در جواب ردیفهایی از جدول SELECTاول را برمیگرداند که در جدول SELECTدوم وجود ندارند. در واقع با کمک این دستور جدول اول را منهای جدول دوم میکنیم.
جمع بندی
دستور UNION، جزو دستورات بسیار مفید در امر گزارشگیری از دادهها است. مخصوصا در پایگاههای داده بزرگی که گاهی تعداد جدولهای بسیار زیاد را شامل میشوند، با کمک این دستور، امکان گرفتن بهترین و خلاصهترین گزارشات ممکن میشود. دستور UNIONدر پیشپردازش دادهها، دیتا ساینس، سامانههای اقتصادی و غیره کاربرد دارد.
در این مطلب از مجله فرادرس، درباره دستور UNIONمطالعه کردیم. به انواع کاربردهای این دستور پرداختیم و ترکیبات مختلف آن را با عبارتهای کلیدی SQL مانند WHEREو ORDER BY بررسی کردیم. این دستور از مهمترین دستورات برای کار با جدولها و گرفتن گزارشات مختلف است.