English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

عمودية UNION في SQL

في هذا الدليل، ستتعلم كيفية دمج نتائج استعلامات SQL من اثنين أو أكثر.

عمودية UNION

استخدام عمودية UNION يتم استخدامه لدمج نتائج استعلامين SELECT أو أكثر إلى مجموعة نتائج واحدة. يختلف عمودية UNION عن استخدام الاتحاد بين أعمدة من جدولين. يقوم عمودية UNION بوضع جميع الصفوف من الجداول المصدرتين في جدول نتائج جديد، مما يخلق جدولاً جديداً.

هذه هي القواعد الأساسية لاستخدام UNION لدمج نتائج استعلامين SELECT من أجل إنشاء مجموعة نتائج واحدة:

  • في جميع الاستعلامات، يجب أن تكون عدد الأعمدة والترتيب نفسه.

  • يجب أن تكون نوع البيانات في الأعمدة المماثلة متوافقة.

عند استيفاء هذه الشروط، تكون هذه الجداول متوافقة في الاتحاد (union-compatible):

النحو

قواعد النحو الأساسية لـ UNION:

SELECT column_list FROM table1_name
   UNION SELECT column_list FROM table2_name;

لفهم أفضل للعمليات المشتركة، نفترض أن هناك بعض الحقول المفترضة في جداول employees وcustomers، مثل first_name وlast_name. يرجى الانتباه، هذه الحقول في الواقع ليست موجودة في جداول قاعدة بيانات العرض لدينا.

+----+------------+-----------+--------+
| id | first_name | last_name | salary |
+----+------------+-----------+--------+
|  1 | Ethan      | Hunt      |   5000 |
|  2 | Tony       | Montana   |   6500 |
|  3 | Sarah      | Connor    |   8000 |
|  4 | Rick       | Deckard   |   7200 |
|  5 | Martin     | Blank     |   5600 |
+----+------------+-----------+--------+

+----+------------+-----------+----------+
| id | first_name | last_name | city     |
+----+------------+-----------+----------+
|  1 | Maria      | Anders    | Berlin   |
|  2 | Fran       | Wilson    | Madrid   |
|  3 | Dominique  | Perrier   | Paris    |
|  4 | Martin     | Blank     | Turin    |
|  5 | Thomas     | Hardy     | Portland |
+----+------------+-----------+----------+
جدول: employees
جدول: customers

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

این دستور تمام نام‌ها و نام‌خانوادگی مشتریان و کارکنان را برمی‌گرداند:

SELECT first_name, last_name FROM employees 
UNION
SELECT first_name, last_name FROM customers;

بعد از اجرای این دستور، نتایج به صورت زیر خواهد بود:

+---------------+--------------+
| first_name    | last_name    |
+---------------+--------------+
| Ethan         | Hunt         |
| Tony          | Montana      |
| Sarah         | Connor       |
| Rick          | Deckard      |
| Martin        | Blank        |
| Maria         | Anders       |
| Fran         | Wilson       |
| Dominique                   | Perrier                   |
| Thomas                       | Hardy                       |
+---------------+--------------+

بالتأكيد، عملاً بتحديد UNION عموديًا، سيتم إزالة الصفوف المكررة من الناتج المدمج. لذلك، العنوان “Martin Blank” تم العثور عليه مرة واحدة فقط في جداول employees وcustomers.

لكن، إذا كنت ترغب في الحفاظ على الصفوف المكررة، يمكنك استخدام كلمة المفتاح ALL، مثلما هو موضح أدناه:

SELECT first_name, last_name FROM employees 
UNION ALL
SELECT first_name, last_name FROM customers;