Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الاتحاد (Union)

جزء من قسم الأساسيات في رحلة SQL على Coddy — الدرس 48 من 72.

تختلف عمليات الاتحاد (Unions) عن عمليات الربط (Joins). تستخدم عمليات الربط (Joins) شروطاً لدمج الجداول بينما تقوم عمليات الاتحاد (unions) ببساطة بإضافة جدولين فوق بعضهما البعض. لاستخدام UNION سنكتب:

SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2

يجب أن يلتزم كلا الاختيارين بالقواعد التالية:

  • يجب أن يكون عدد الحقول متساوياً
  • الترتيب مهم
  • يجب أن تتطابق الأعمدة الموجودة في نفس المكان مع أنواع البيانات

على سبيل المثال، لنفترض أن لدينا الجداول التالية:

germany_people

idname
1لينا
2ليوني

england_people

idname
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

النتيجة:

nametotal
Lena2
Leonie1
George1

هنا، يحتفظ UNION ALL بجميع الصفوف (بما في ذلك التكرارات) بحيث يعكس COUNT العدد الحقيقي للتكرارات. ثم يقوم الاستعلام الخارجي بتجميع وفرز النتيجة المجمعة.

challenge icon

التحدي

سهل

الجداول والأعمدة المتاحة:

  • <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_people
SELECT 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

يقوم هذا بحساب عدد مرات ظهور كل اسم في كلا الجدولين، بما في ذلك التكرارات.

جرّب بنفسك

quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الأساسيات