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

۹۴ بازدید
آخرین به‌روزرسانی: ۲۳ خرداد ۱۴۰۳
زمان مطالعه: ۱۰ دقیقه
دستور Union در SQL – از کاربرد تا نحوه استفاده به زبان ساده

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

997696

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

دستور UNION در SQL چیست؟

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

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

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

دختر و پسر در کتابخانه بر روی میز مطالعه مشغول کار با لپتاپ هستند.

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

سینتکس پایه دستور UNION در SQL

در کادر زیر، سینتکس پایه دستور UNION را به زبان SQL کدنویسی کرده‌ایم.

1SELECT column1 [, column2 ]
2FROM table1 [, table2 ]
3[WHERE condition]
4UNION
5SELECT column1 [, column2 ]
6FROM table1 [, table2 ]
7[WHERE condition];

در کد بالا شرط داده شده [WHERE condition]  می‌تواند هر عبارت دل‌خواهی بر اساس نیاز مدیر پایگاه داده باشد.

بهترین روش آموزش SQL Server

دستور UNION یکی از دستورات بسیار کلیدی مخصوصا در تهیه گزارشات است. چندین دستور دیگر مانند دستور UNION وجود دارند که برای کار کردن با SQL تا حد زیادی مفید و موثر هستند. معمولا بهترین روش استفاده از این دستور‌ها زمانی است که آن‌ها را با یکدیگر ترکیب می‌کنیم. آموزش کوئری‌نویسی پیشرفته یکی از تکنیک‌های ارتقا سطح مهارت در کار با پایگاه داده SQL Server است.

SQL «زبان ساختاریافته کوئری‌نویسی» (Structured Query Language) است که برای کار با پایگاه‌های داده رابطه طراحی شده است. SQL Server، یکی از بهترین پایگاه‌‌های داده‌ای است که با زبان SQL کار می‌کند. برای کار با SQL Server فیلم‌های آموزشی پیشرفته و حرفه‌ای در فرادرس تولید شده‌اند. هر شخصی چه مبتدی یا ناآشنا با پایگاه داده باشد و چه حرفه‌ای، با مشاهده فیلم‌های مربوط به سطح علمی خودش و تمرین به راحتی بر کار با این پایگاه داده مسلط می‌شود.

مجموعه آموزش اس کیو ال سرور – مقدماتی تا پیشرفته

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

دستور UNION بر روی یک ستون مجزا

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

به طور کل، توانایی کوئری‌نویسی حرفه‌ای مسئولیت بسیار مهمی است که مدیران پایگاه داده سیستم‌های بزرگ باید بتوانند به‌خوبی از پس آن بربیایند. یکی از بهترین راه‌های آموزش این مسئله مشاهده فیلم آموزش کوئری‌ نویسی پیشرفته در SQL Server از فرادرس است. برای راحتی کار شما لینک مربوط به این فیلم آموزشی را در پایین، قرار داده‌ایم.

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

مثال

فرض کنیم همین‌طور که در پایین نمایش داده‌ایم، جدولی به نام مشتریان CUSTOMERS  با استفاده از دستور CREATE TABLE  در پایگاه داده MySQL ایجاد کرده‌ایم.

1CREATE TABLE CUSTOMERS (
2   ID INT NOT NULL,
3   NAME VARCHAR (20) NOT NULL,
4   AGE INT NOT NULL,
5   ADDRESS CHAR (25),
6   SALARY DECIMAL (18, 2),       
7   PRIMARY KEY (ID)
8);

سپس با استفاده از دستور INSERT در SQL به شکل کوئری زیر، مقادیر مختلفی را برای استفاده در جدول ساخته شده وارد می‌کنیم.

1INSERT INTO CUSTOMERS VALUES
2(1, 'Ramesh', 32, 'Ahmedabad', 2000.00),
3(2, 'Khilan', 25, 'Delhi', 1500.00),
4(3, 'Kaushik', 23, 'Kota', 2000.00),
5(4, 'Chaitali', 25, 'Mumbai', 6500.00),
6(5, 'Hardik', 27, 'Bhopal', 8500.00),
7(6, 'Komal', 22, 'Hyderabad', 4500.00),
8(7, 'Muffy', 24, 'Indore', 10000.00);

با اجرای کوئری بالا، جدول مشتریان به شکلی که در پایین نمایش داده شده ایجاد می‌شود.

IDNAMEAGEADDRESSSALARY
1Ramesh32Ahmedabad2000.00
2Khilan25Delhi1500.00
3Kaushik23Kota2000.00
4Chaitali25Mumbai6500.00
5Hardik27Bhopal8500.00
6Komal22Hyderabad4500.00
7Muffy24Indore10000.00

الان با استفاده از دستور CREATE TABLE جدول دومی را برای سفارشات با نام ORDERS  ایجاد می‌کنیم. کوئری ساخت جدول دوم مطابق کادر زیر نوشته شده است.

1CREATE TABLE ORDERS (
2   OID INT NOT NULL,
3   DATE DATETIME NOT NULL,
4   CUSTOMER_ID INT NOT NULL,
5   AMOUNT INT NOT NULL,      
6   PRIMARY KEY (OID)
7);

با استفاده از دستور INSERT  به شکل کوئری زیر، مقادیر دیگری را نیز به این جدول جدید وارد می‌کنیم.

1INSERT INTO ORDERS VALUES
2(102, '2009-10-08 00:00:00', 3, 3000),
3(100, '2009-10-08 00:00:00', 3, 1500),
4(101, '2009-11-20 00:00:00', 2, 1560),
5(103, '2008-05-20 00:00:00', 4, 2060);

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

OIDDATECUSTOMER_IDAMOUNT
1022009-10-08 00:00:0033000.00
1002009-10-08 00:00:0031500.00
1012009-11-20 00:00:0021560.00
1032008-05-20 00:00:0042060.00

الان با استفاده از کوئری زیر می‌خواهیم که ستون‌های میزان درامد SALARY  و قیمت کالا AMOUNT  را به ترتیب از جدول‌های CUSTOMERS و ORDERS باهم ترکیب کنیم. زیرا این ستون‌ها از نوع داده‌های یکسانی استفاده می کنند.

1SELECT SALARY FROM CUSTOMERS UNION SELECT AMOUNT FROM 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  داشته باشیم. با استفاده از این توابع مطمئن می‌شویم که نوع‌ داده‌های ستون‌های مختلف با همدیگر سازگار هستند.

دانشجویان در کلاس درس کامیپوتر سر جای خودشان نشسته‌اند. - دستور Union در SQL

مثال

از آنجا که جدول‌های CUSTOMERS و ORDERS ، به صورت جداگانه، توانایی متحد شدن را ندارند، در ابتدا باید این دو جدول را برای ساخت جدول بزرگتری به عنوان واسطه با یکدیگر ترکیب کنیم. برای انجام این کار، جدول بزرگتر را در وسط قرار داده و از تکینک «اجماع از چپ» (Left Join) و «اجماع از راست» (Right Join) استفاده می‌کنیم. در واقع کاری که با کمک این دستور انجام می‌دهیم همان عمل ساخت اتحاد در مجموعه‌ها است. جدول‌های اجتماع یافته و بازیابی شده همان تعداد ستون‌ها را با همان نوع داده خواهند داشت. الان جداول جدید دارای قابلیت متحد شدن هستند. این جدول‌ها را می‌توانیم با استفاده از دستور UNION نمایش داده شده در پایین با یکدیگر ترکیب کنیم.

1SELECT  ID, NAME, AMOUNT, DATE FROM CUSTOMERS
2LEFT JOIN ORDERS ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
3UNION
4SELECT  ID, NAME, AMOUNT, DATE FROM CUSTOMERS
5RIGHT JOIN ORDERS ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

خروجی

با اجرای کوئری بالا، داده‌های جواب به شکل جدول زیر در خروجی به کاربر نمایش داده می‌شوند.

ID NAME AMOUNT DATE
1RameshNULLNULL
2Khilan15602009-11-20 00:00:00
3Kaushik30002009-10-08 00:00:00
3Kaushik15002009-10-08 00:00:00
4Chaitali20602008-05-20 00:00:00
5HardikNULLNULL
6KomalNULLNULL
7MuffyNULLNULL

دستور UNION همراه با عبارت WHERE

می‌توانیم از عبارت WHERE در SQL همراه با دستور UNION استفاده کنیم. با کمک این ترکیب دستوری می‌توانیم نتایج هر عبارت SELECT را قبل از ترکیب کردن آن‌ها با هم فیلتر کنیم.

SQL دستورات زیادی دارد که برای کار با پایگاه‌ داده ضروری هستند. در صورتی که تمایل به نگاه کلی به دستورات اصلی SQL دارید، پیشنهاد می‌کنم که مطلب ۱۳ دستور SQL مهم که هر برنامه‌نویسی باید بداند از مجله فرادرس را مطالعه کنید.

سینتکس پایه دستور

در کادر زیر شکل سینتکس پایه، برای ترکیب دستور UNION همراه با عبارت WHERE  را پیاده‌سازی کرده‌ایم.

1SELECT column1, column2, column3
2FROM table1
3WHERE column1 = 'value1'
4UNION
5SELECT column1, column2, column3
6FROM table2
7WHERE column1 = 'value2';
یک کامیپوتر بر روی میزی در راهرو یکی از معابر عمومی قرار گرفته است.

مثال

در کوئری پایین، شماره ID  مشتری‌ها را با شرایط زیر فراخوانی می‌کنیم.

  1. شماره ID در جدول CUSTOMERS از 5  بزرگتر باشد.
  2. شماره ID در جدول ORDERS از 2  بیشتر باشد.
1SELECT ID, SALARY FROM CUSTOMERS WHERE ID > 5
2UNION
3SELECT CUSTOMER_ID, AMOUNT FROM ORDERS WHERE CUSTOMER_ID > 2;

خروجی

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

ID SALARY
64500.00
710000.00
33000.00
31500.00
42060.00

دستور UNION همراه با عبارت ORDER BY

در کوئری می‌توانیم از دستور UNION همراه با عبارت ORDER BY  نیز استفاده کنیم. این کار، مجموعه جواب‌های مرتب شده همه عبارت‌های SELECT را با یکدیگر ترکیب کرده و سپس مجموعه جواب مجزایی را به صورت مرتب شده ایجاد می‌کند.

مثال

در این کد، شماره ID همه مشتریان را با توجه به شرایط زیر فراخوانی می‌کنیم.

  1. شماره ID در جدول CUSTOMERS از 5 بزرگتر باشد.
  2. شماره ID در جدول ORDERS از 2 بیشتر باشد.

در نهایت همه شماره‌های ID را بر اساس میزان حقوقشان از کم به زیاد -به صورت صعودی- مرتب می‌کنیم.

1SELECT ID, SALARY FROM CUSTOMERS WHERE ID > 5
2UNION
3SELECT CUSTOMER_ID, AMOUNT FROM ORDERS WHERE CUSTOMER_ID > 2
4ORDER BY SALARY;

خروجی

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

ID SALARY
31500.00
42060.00
33000.00
64500.00
710000.00

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

فیلم‌ های آموزش انواع پایگاه های داده در فرادرس

SQL زبان‌ مخصوص کوئری‌نویسی برای کار با پایگاه‌های داده رابطه‌ای است. پایگاه‌های داده غیر رابطه‌ای زبان کوئری‌نویسی مخصوص به خود را دارند. خود پایگاه‌های داده رابطه‌ای چندین نوع نرم‌افزار مختلف دارند. نرم‌افزار‌ها مختلفی توسط سازمان‌ها و تیم‌های برنامه‌نویسی گوناگون با توجه به نیاز‌های هر سازمان، طراحی شده‌اند.

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

مجموعه آموزش پایگاه داده – مقدماتی تا پیشرفته

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

دستور UNION در SQL همراه با نام های مستعار

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

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

دختر سیاه پوست با موهای فرفری در حال کار با کامپیوتر است.- دستور Union در SQL

سینتکس پایه کوئری

در کادر زیر سینتکس پایه روش استفاده از دستور UNION را همراه با نام‌های مستعار نمایش داده‌ایم.

1SELECT column1 AS alias1, column2 AS alias2
2FROM table1
3UNION
4SELECT column3 AS alias1, column4 AS alias2
5FROM table2;

مثال

در کوئری زیر همه شماره‌های ID را از هر دو جدول فراخوانی می‌کنیم. همراه با شماره‌های ID نشان می‌دهیم که هر شماره مربوط به کدام جدول است. یعنی در مقابل شماره ID و در یک ستون جدید می‌نویسیم که هر شماره مربوط به مشتری است یا سفارش.

1SELECT ID, 'customer' AS type FROM CUSTOMERS
2UNION
3SELECT OID, 'order' AS type FROM ORDERS;

خروجی

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

ID type
1customer
2customer
3customer
4customer
5customer
6customer
7customer
100order
101order
102order
103order

عملگرهای مشابه دستور UNION در SQL

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

  • دستور SQL INTERSECT: از این عملگر برای ترکیب کردن دو عبارت SELECT استفاده می‌شود. اما در جواب فقط ردیف‌های مربوط به جدول جواب در عبارت SELECT اول را نمایش می‌دهد. البته هر کدام از این ردیف‌ها نشانه‌ای برای ردیف متناظری در جدول دوم هستند. در واقع با کمک این دستور اشتراک بین دو جدول را بدست می‌آوریم.
  • دستور EXCEPT Operator: با کمک این دستور هم دو عبارت SELECT را با یکدیگر ترکیب می‌کنیم. این دستور در جواب ردیف‌هایی از جدول SELECT اول را برمی‌گرداند که در جدول SELECT دوم وجود ندارند. در واقع با کمک این دستور جدول اول را منهای جدول دوم می‌کنیم.

جمع بندی

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

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

بر اساس رای ۰ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
tutorialspoint
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *