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

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

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

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

germany_people

idالاسم
1لينا
2ليوني

england_people

idالاسم
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

النتيجة:

الاسم
لينا
ليوني
جورج
لينا

يمكنك أيضاً دمج UNION ALL مع الدوال التجميعية (aggregate functions)، و GROUP BY، و ORDER BY لتلخيص البيانات عبر جداول متعددة. تكمن الحيلة في تغليف UNION ALL داخل استعلام فرعي (subquery)، ثم تطبيق التجميع والفرز فوقه.

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

SELECT name, COUNT(*) AS total_count
FROM (
    SELECT name FROM germany_people
    UNION ALL
    SELECT name FROM england_people
) AS combined
GROUP BY name
ORDER BY total_count DESC

النتيجة:

nametotal_count
Lena2
Leonie1
George1

هنا، يتم استخدام UNION ALL (وليس UNION) بحيث يتم الاحتفاظ بالتكرارات مثل Lena — وإلا فسيتم إزالتها قبل العد. يقوم الاستعلام الفرعي بدمج جميع الصفوف، ثم يقوم GROUP BY + COUNT بتلخيصها. يقوم ORDER BY بفرز النتيجة النهائية.

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.

قم بفرز النتائج حسب إجمالي المبيعات بترتيب تنازلي.

جرّب بنفسك

quiz iconاختبر نفسك

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

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