انتقل إلى محتوى الدرس
الدرس 44
دورة MySQL

معاملات المجموعات UNION و INTERSECT و EXCEPT في MySQLMySQL Set Operators UNION INTERSECT and EXCEPT

تعلّم معاملات المجموعات UNION و INTERSECT و EXCEPT في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
8
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

بينما تدمج جمل الربط (INNER JOIN وLEFT JOIN) الجداول أفقياً بوضع الأعمدة جنباً إلى جنب بناءً على شرط مفتاح مشترك، تعمل معاملات المجموعات في SQL على دمج مخرجات استعلامين أو أكثر عمودياً برصّ الصفوف فوق بعضها:

  • تساوي عدد الأعمدة: يجب أن يرجع كل استعلام SELECT داخل العملية العدد نفسه تماماً من الأعمدة وبنفس الترتيب الموضعي.
  • توافق الأنواع وأسماء الأعمدة: يجب أن تتوافق أنواع البيانات بين الأعمدة المتقابلة، ويعتمد MySQL أسماء أعمدة النتيجة النهائية من جملة SELECT الأولى حصرياً.
مخطط معاملات المجموعات UNION و INTERSECT و EXCEPT في MySQL 8
SQL
-- Stack active and archived orders vertically with matching columns
SELECT order_id, customer_id, total_amount, 'current' AS source_table
FROM orders_2026
UNION ALL
SELECT order_id, customer_id, total_amount, 'archive' AS source_table
FROM orders_2025;

يدمج المعامل UNION صفوف استعلامين أو أكثر في مجموعة نتائج موحدة، ويوفر وضعين واضحين للتعامل مع الصفوف المكررة:

  • UNION ALL (الخيار الأسرع): يلحق جميع صفوف الاستعلام الثاني مباشرةً أسفل صفوف الاستعلام الأول دون فحص التكرار أو حذفه.
  • UNION أو UNION DISTINCT: يزيل الصفوف المتطابقة تلقائياً لتكون كل سطور النتيجة فريدة، وهو ما يتطلب إنشاء جدول مؤقت داخلي لفرز التكرارات.
SQL
-- Deduplicate contact emails across customers and suppliers
SELECT email, full_name AS contact_name
FROM customers
WHERE is_active = 1
UNION DISTINCT
SELECT email, company_rep AS contact_name
FROM suppliers
WHERE is_active = 1;

أضاف إصدار MySQL 8.0.31 دعماً أصلياً للمعامل القياسي INTERSECT، الذي يستخرج فقط الصفوف المشتركة الموجودة في كلا الاستعلامين الأول والثاني معاً:

  • INTERSECT DISTINCT (الوضع الافتراضي): يرجع الصفوف المشتركة الفريدة بين المجموعتين مع إزالة أي تكرار تلقائياً.
  • INTERSECT ALL: يحتفظ بعدد مرات التكرار المشتركة للصف الواحد وفق العدد الأدنى لظهوره في كلا الاستعلامين.
SQL
-- Find customers who bought from both web and mobile channels
SELECT customer_id, email
FROM web_channel_orders
INTERSECT
SELECT customer_id, email
FROM mobile_channel_orders;

يوفّر المعامل EXCEPT (المدعوم منذ MySQL 8.0.31) عملية طرح المجموعات رياضياً؛ إذ يرجع الصفوف الموجودة في الاستعلام الأول (العلوي) شريطة عدم وجودها في مخرجات الاستعلام الثاني (السفلي):

  • أهمية ترتيب الاستعلامين: بخلاف الإبدال الممكن في UNION وINTERSECT، فإن كتابة A EXCEPT B تعطي نتيجة مختلفة تماماً عن B EXCEPT A.
  • المطابقة الآمنة لقيم NULL: تعامل معاملات المجموعات قيمتي NULL المتقابلتين كقيمتين متساويتين عند طرح الصفوف أو إزالة التكرار.
SQL
-- Return products in the catalog that have never been discontinued
SELECT product_id, sku_code, product_title
FROM catalog_products
EXCEPT
SELECT product_id, sku_code, product_title
FROM discontinued_products;

لترتيب المخرجات النهائية لعملية UNION أو INTERSECT أو EXCEPT أو تقسيمها لصفحات، ضع جملة ORDER BY وLIMIT مرة واحدة في نهاية الاستعلام المدمج بالكامل:

  • الترتيب الشامل للنتيجة الموحدة: تطبق جملة ORDER BY الختامية الترتيب على جميع الصفوف المدمجة بالاعتماد على أسماء الأعمدة أو الأسماء المستعارة المعرّفة في جملة SELECT الأولى.
  • الأقواس للترتيب الفرعي: إذا أردت تطبيق ORDER BY ... LIMIT على استعلام فرعي منفرد قبل دمجه، أحِط ذلك الاستعلام الفرعي بقوسين.
SQL
-- Take top 3 VIP orders and top 3 B2B orders, then sort combined list
(SELECT order_id, total_amount, 'VIP' AS tier
 FROM vip_orders ORDER BY total_amount DESC LIMIT 3)
UNION ALL
(SELECT order_id, total_amount, 'B2B' AS tier
 FROM b2b_orders ORDER BY total_amount DESC LIMIT 3)
ORDER BY total_amount DESC;

يقارن الجدول التالي بين معاملات المجموعات الأربعة المتاحة في MySQL 8 الحديث:

معامل المجموعةالتعامل مع التكرارقاعدة اختيار الصفوفالاستخدام الهندسي الأمثل
UNION ALLيحتفظ بجميع التكراراتكل صفوف الاستعلام الأول مضافاً إليها كل صفوف الثانيالدمج الرأسي السريع لجداول الأرشيف والسجلات المقسمة زمنياً
UNION [DISTINCT]يزيل الصفوف المكررةالصفوف الفريدة الموجودة في الأول أو الثاني أو كليهماتوحيد قوائم البريد أو نتائج البحث مع منع تكرار السجلات
INTERSECT [DISTINCT]يزيل الصفوف المكررةالصفوف المشتركة الموجودة في الاستعلامين معاً فقطاكتشاف العملاء المشتركين بين قناتين أو الصلاحيات المتقاطعة
EXCEPT [DISTINCT]يزيل الصفوف المكررةصفوف الاستعلام الأول غير الموجودة في الاستعلام الثانيمراجعة السجلات غير المتزامنة أو استبعاد المنسحبين من القوائم

ملخص الدرس: فرّقنا في هذا الدرس بين الربط الأفقي والدمج الرأسي للمجموعات، وطبّقنا UNION ALL وUNION DISTINCT، واستخرجنا التقاطع المشترك بمعامل INTERSECT، وطرحنا المجموعات عبر EXCEPT، ورتّبنا المخرجات المدمجة.
الخطوة التالية والدرس القادم: في الدرس القادم نختتم وحدة ربط الجداول بدراسة «العمليات متعددة الجداول INSERT SELECT و UPDATE JOIN و DELETE JOIN في MySQL».

خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

تتيح معاملات المجموعات دمج مخرجات الاستعلامات عمودياً أو تقاطعها أو طرحها بشرط تطابق عدد الأعمدة. الخطوة التالية: انتقل إلى درس «العمليات متعددة الجداول INSERT SELECT و UPDATE JOIN و DELETE JOIN في MySQL».

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات5

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 5 مفهومةأول بطاقة، أول خطوة
01 Set Operators معاملات المجموعات
تعلّم معاملات المجموعات UNION و INTERSECT و EXCEPT في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
للمراجعة
02 Horizontal Joins vs Vertical Sets الربط الأفقي ودمج المجموعات
المفهوم الهندسي والصياغة العملية الخاصة بقسم الربط الأفقي ودمج المجموعات في MySQL 8.
للمراجعة
03 Combining Results with UNION ALL دمج النتائج بـ UNION ALL
المفهوم الهندسي والصياغة العملية الخاصة بقسم دمج النتائج بـ UNION ALL في MySQL 8.
للمراجعة
04 Common Rows with INTERSECT الصفوف المشتركة بمعامل INTERSECT
المفهوم الهندسي والصياغة العملية الخاصة بقسم الصفوف المشتركة بمعامل INTERSECT في MySQL 8.
للمراجعة
05 Set Difference with EXCEPT طرح النتائج بمعامل EXCEPT
المفهوم الهندسي والصياغة العملية الخاصة بقسم طرح النتائج بمعامل EXCEPT في MySQL 8.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات3

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 3 مفهومةأول بطاقة، أول خطوة
01 UNION ALL UNION ALL
Unfiltered Vertical Set Union
دمج رأسي لجميع صفوف استعلامين أو أكثر دون إبطاء الأداء بفحص التكرار.
للمراجعة
02 INTERSECT INTERSECT
Relational Set Intersection Operator
معامل في MySQL 8.0.31+ يرجع فقط الصفوف المشتركة التي ظهرت في كلا الاستعلامين.
للمراجعة
03 EXCEPT EXCEPT
Relational Set Difference Operator
معامل في MySQL 8.0.31+ يرجع صفوف الاستعلام الأول غير الموجودة في الاستعلام الثاني.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. نفّذ أمثلة SQL المشروحة في قسم الربط الأفقي ودمج المجموعات داخل قاعدة بياناتك المحلية وتحقق من مجموعة النتائج.

  2. بدّل بين الحالات التفاعلية في قسم دمج النتائج بـ UNION ALL وقارن كيف ينفّذ محرك MySQL 8 كل استعلام.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

5أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي5 أسئلة تنتظرك
01

ما هو الشرط الإلزامي الذي يجب تحققه في جملتي SELECT قبل دمجهما بمعاملات UNION أو INTERSECT أو EXCEPT؟

تذكّر الشرط الهيكلي للأعمدة في عمليات المجموعات الرأسية.

02

لماذا يُعد المعامل UNION ALL أسرع أداءً من UNION المجردة عند دمج الجداول الكبيرة في MySQL؟

فكّر في التكلفة الحسابية لفحص وحذف الصفوف المكررة.

03

أي معامل مجموعات (أُضيف في MySQL 8.0.31) يرجع فقط الصفوف المشتركة التي ظهرت في كلا الاستعلامين الأول والثاني معاً؟

اختر معامل التقاطع بين مجموعتين.

04

في معاملات المجموعات، تعطي عبارة Query_A EXCEPT Query_B نفس النتيجة تماماً التي تعطيها Query_B EXCEPT Query_A.

تذكّر ما إذا كانت عملية طرح المجموعات عملية إبدالية أم تعتمد على الترتيب.

05

من أين يأخذ MySQL أسماء أعمدة النتيجة النهائية في استعلامات UNION أو INTERSECT أو EXCEPT؟

تذكّر أي جملة SELECT تحدد عناوين الأعمدة في الجدول المدمج.