دستور 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 کدنویسی کردهایم.
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);
با اجرای کوئری بالا، جدول مشتریان به شکلی که در پایین نمایش داده شده ایجاد میشود.
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
ایجاد میکنیم. کوئری ساخت جدول دوم مطابق کادر زیر نوشته شده است.
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
به شکل نمایش داده شده در پایین، ساخته میشود.
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
باهم ترکیب کنیم. زیرا این ستونها از نوع دادههای یکسانی استفاده می کنند.
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
داشته باشیم. با استفاده از این توابع مطمئن میشویم که نوع دادههای ستونهای مختلف با همدیگر سازگار هستند.
مثال
از آنجا که جدولهای 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 |
---|---|---|---|
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
را پیادهسازی کردهایم.
1SELECT column1, column2, column3
2FROM table1
3WHERE column1 = 'value1'
4UNION
5SELECT column1, column2, column3
6FROM table2
7WHERE column1 = 'value2';
مثال
در کوئری پایین، شماره ID
مشتریها را با شرایط زیر فراخوانی میکنیم.
- شماره ID
در جدول CUSTOMERS
از 5
بزرگتر باشد.
- شماره ID
در جدول ORDERS
از 2
بیشتر باشد.
1SELECT ID, SALARY FROM CUSTOMERS WHERE ID > 5
2UNION
3SELECT CUSTOMER_ID, AMOUNT FROM ORDERS WHERE CUSTOMER_ID > 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
را بر اساس میزان حقوقشان از کم به زیاد -به صورت صعودی- مرتب میکنیم.
1SELECT ID, SALARY FROM CUSTOMERS WHERE ID > 5
2UNION
3SELECT CUSTOMER_ID, AMOUNT FROM ORDERS WHERE CUSTOMER_ID > 2
4ORDER BY SALARY;
خروجی
با اجرای کوئری بالا، جدول زیر به عنوان نتیجه جواب در خروجی نمایش داده میشود.
ID | SALARY |
---|---|
3 | 1500.00 |
4 | 2060.00 |
3 | 3000.00 |
6 | 4500.00 |
7 | 10000.00 |
توجه: دستور ORDER BY
در عبارت UNION
بر روی همه مجموعه جوابهای عبارت اعمال میشود. نه فقط بر روی جوابهای عبارت SELECT
که در آخر آمده است.
فیلم های آموزش انواع پایگاه های داده در فرادرس
SQL زبان مخصوص کوئرینویسی برای کار با پایگاههای داده رابطهای است. پایگاههای داده غیر رابطهای زبان کوئرینویسی مخصوص به خود را دارند. خود پایگاههای داده رابطهای چندین نوع نرمافزار مختلف دارند. نرمافزارها مختلفی توسط سازمانها و تیمهای برنامهنویسی گوناگون با توجه به نیازهای هر سازمان، طراحی شدهاند.
دورههای مربوط به آموزش هر کدام از این پایگاههای داده با کیفیتهای متفاوت و شرایط خاصی توسط آموزشگاههای مختلفی ارائه میشوند. اما تقریبا هیچ آموزشگاهی نمیتوان پیدا کرد که همه این پایگاههای داده را پوشش دهد. در فرادرس به دلیل تهیه فیلمهای آموزشی با کیفیت و تنوع دورههای مربوط به پایگاه داده یکی از بزرگترین مرجعهای آموزشی دانشجویان و علاقهمندان به علم، ایجاد شده است. کیفیت بالا، نبود محدودیت زمانی، هزینه مقرون به صرفهتر به نسبت کلاسهای حضوری و امکان بازبینی نامحدود فیلمهای آموزشی از جمله عواملی هستند که بر محبوبیت فرادرس افزودهاند.
در این قسمت از مطلب، فیلمهای آموزشی مربوط به چند پایگاه داده مختلف را همراه تمرینات موجود در هر کدام معرفی کردهایم. در صورت تمایل به دیدن فیلمهای بیشتر درباره پایگاههای داده متنوع و موجود با کلیک بر روی تصویر بالا میتوانید به صفحه اصلی این مجموعه آموزش منتقل شده و گزینههای بیشتری را بررسی کنید.
دستور UNION در SQL همراه با نام های مستعار
از نامهای مستعار نیز میتوانیم در عبارت SELECT
از دستور UNION
استفاده کنیم. با این کار در زمان ساخت جدول در SQL یا ستونهای آن، نامی موقتی به هر کدام از آنها اختصاص داده میشود. در زمان کار کردن با جدولها و ستونها مختلفی که نام یکسان دارند، این کار بسیار مفید است.
وقتی که از دستور UNION
همراه با نامهای مستعار استفاده میکنیم، باید به خاطر داشت که نامهای مستعارِ ستونها توسط اولین عبارت SELECT
تعیین میشوند. اما شاید بخواهیم که از نام مستعار متفاوتی برای ستون یکسانی در عبارت SELECT
دیگری نیز استفاده کنیم. برای اینکار لازم است که از نام مستعار ستونها در همه عبارتهای SELECT
استفاده کنیم. انجام این رفتار، باعث اطمینان از ثابت بودن نام ستونها در مجموعه جواب نهایی میشود.
سینتکس پایه کوئری
در کادر زیر سینتکس پایه روش استفاده از دستور 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 |
---|---|
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
بررسی کردیم. این دستور از مهمترین دستورات برای کار با جدولها و گرفتن گزارشات مختلف است.
source