دستور 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);

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

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

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

دانشجویان در کلاس درس کامیپوتر سر جای خودشان نشسته‌اند. - دستور 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
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

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

  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

6 4500.00
7 10000.00
3 3000.00
3 1500.00
4 2060.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

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 در 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
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

توسط expressjs.ir