الاتحاد (Union)
جزء من قسم الأساسيات في رحلة SQL على Coddy — الدرس 48 من 72.
تختلف عمليات الاتحاد (Unions) عن عمليات الربط (Joins). تستخدم عمليات الربط (Joins) شروطاً لدمج الجداول بينما تقوم عمليات الاتحاد (unions) ببساطة بإضافة جدولين فوق بعضهما البعض. لاستخدام UNION سنكتب:
SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2يجب أن يلتزم كلا الاختيارين بالقواعد التالية:
- يجب أن يكون عدد الحقول متساوياً
- الترتيب مهم
- يجب أن تتطابق الأعمدة الموجودة في نفس المكان مع أنواع البيانات
على سبيل المثال، لنفترض أن لدينا الجداول التالية:
germany_people
| id | name |
| 1 | لينا |
| 2 | ليوني |
england_people
| id | name |
| 1 | جورج |
| 2 | لينا |
المشكلة: نريد إنشاء جدول واحد كبير لجميع الأسماء التي لدينا.
SELECT name from germany_people
UNION
SELECT name from england_peopleالنتيجة:
| الاسم |
| لينا |
| ليوني |
| جورج |
تعيد UNION القيم الفريدة فقط، بينما تعيد UNION ALL كافة السجلات كما هي:
SELECT name from germany_people
UNION ALL
SELECT name from england_peopleالنتيجة:
| الاسم |
| Lena |
| Leonie |
| George |
| Lena |
يمكنك أيضاً دمج UNION ALL مع GROUP BY، والدوال التجميعية، و ORDER BY من خلال تغليف عملية الـ union في استعلام فرعي. على سبيل المثال، لحساب عدد مرات ظهور كل اسم في كلا الجدولين:
SELECT name, COUNT(*) AS total
FROM (
SELECT name FROM germany_people
UNION ALL
SELECT name FROM england_people
) AS all_people
GROUP BY name
ORDER BY total DESCالنتيجة:
| name | total |
| Lena | 2 |
| Leonie | 1 |
| George | 1 |
هنا، يحتفظ UNION ALL بجميع الصفوف (بما في ذلك التكرارات) بحيث يعكس COUNT العدد الحقيقي للتكرارات. ثم يقوم الاستعلام الخارجي بتجميع وفرز النتيجة المجمعة.
التحدي
سهلالجداول والأعمدة المتاحة:
<strong>sales_2009</strong>:<strong>product_id</strong>,<strong>quantity_sold</strong><strong>sales_2010</strong>:<strong>product_id</strong>,<strong>quantity_sold</strong><strong>sales_2011</strong>:<strong>product_id</strong>,<strong>quantity_sold</strong>
هناك 3 جداول للمبيعات.
أوجد مجموع المبيعات لكل منتج من جميع الجداول معاً.
يجب أن تتضمن النتيجة product_id وإجمالي المبيعات.
قم بتسمية هذا العمود total_sales.
قم بترتيب النتائج حسب إجمالي المبيعات بترتيب تنازلي.
ورقة مرجعية
تقوم UNION بدمج الجداول عن طريق تكديسها عمودياً. على عكس عمليات الربط (joins)، لا تستخدم unions شروطاً - فهي ببساطة تضيف الجداول فوق بعضها البعض.
صيغة UNION الأساسية:
SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2قواعد UNION:
- يجب أن يكون عدد الحقول متساوياً
- الترتيب مهم
- يجب أن تتطابق أنواع البيانات للأعمدة الموجودة في نفس الموضع
الفرق بين UNION و UNION ALL:
UNIONتعيد القيم الفريدة فقطUNION ALLتعيد جميع السجلات بما في ذلك التكرارات
SELECT name FROM germany_people
UNION
SELECT name FROM england_peopleSELECT name FROM germany_people
UNION ALL
SELECT name FROM england_peopleيمكنك استخدام UNION ALL داخل استعلام فرعي (subquery) ثم تطبيق GROUP BY و ORDER BY والدوال التجميعية (aggregate functions) على النتيجة المدمجة:
SELECT name, COUNT(*) AS total
FROM (
SELECT name FROM germany_people
UNION ALL
SELECT name FROM england_people
) AS all_people
GROUP BY name
ORDER BY total DESCيقوم هذا بحساب عدد مرات ظهور كل اسم في كلا الجدولين، بما في ذلك التكرارات.
جرّب بنفسك
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
2الشروط
أساسيات الشروطالكلمة المفتاحية ANDالكلمة المفتاحية ORالكلمة المفتاحية NOTدمج شروط متعددةالأقواسالقيم المنطقية Booleans3تنسيق محدد للنتائج
قيم Nullترتيب النتائج - الجزء الأولترتيب النتائج - الجزء الثانيمراجعة - شركة للأمن السيبرانيتحديد عدد السجلاتمراجعة - مصنع مركبات6تحديات تمهيدية
مراجعة - الانتخابات البرلمانيةمراجعة - اعتقال الشرطة للمجرمينمراجعة - حاوية مشروبات البارمراجعة - هندسة أعمدة جديدة9جداول متعددة
الربط الأساسي - الجزء الأولالربط الأساسي - الجزء الثانيمراجعة - الربط (Join)الربط الذاتي (Self Join)مراجعة - الربط الذاتي (Self Join)الاتحاد (Union)تبسيط الاستعلامات، الكلمة المفتاحية WITHمراجعة - استعلامات WITHمراجعة - مقاول العقارات12Window Functions الجزء الثاني
دوال RANK و DENSE_RANKمراجعة - RANK و DENSE_RANKدالة NTILEدوال التجميعمعيار ROWS و RANGE