في هذا الدرس 6تصفّح المواضيع
بينما تدمج جمل الربط (INNER JOIN وLEFT JOIN) الجداول أفقياً بوضع الأعمدة جنباً إلى جنب بناءً على شرط مفتاح مشترك، تعمل معاملات المجموعات في SQL على دمج مخرجات استعلامين أو أكثر عمودياً برصّ الصفوف فوق بعضها:
- تساوي عدد الأعمدة: يجب أن يرجع كل استعلام
SELECTداخل العملية العدد نفسه تماماً من الأعمدة وبنفس الترتيب الموضعي. - توافق الأنواع وأسماء الأعمدة: يجب أن تتوافق أنواع البيانات بين الأعمدة المتقابلة، ويعتمد MySQL أسماء أعمدة النتيجة النهائية من جملة
SELECTالأولى حصرياً.
-- 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: يزيل الصفوف المتطابقة تلقائياً لتكون كل سطور النتيجة فريدة، وهو ما يتطلب إنشاء جدول مؤقت داخلي لفرز التكرارات.
-- 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: يحتفظ بعدد مرات التكرار المشتركة للصف الواحد وفق العدد الأدنى لظهوره في كلا الاستعلامين.
-- 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المتقابلتين كقيمتين متساويتين عند طرح الصفوف أو إزالة التكرار.
-- 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على استعلام فرعي منفرد قبل دمجه، أحِط ذلك الاستعلام الفرعي بقوسين.
-- 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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+ يرجع صفوف الاستعلام الأول غير الموجودة في الاستعلام الثاني.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
نفّذ أمثلة SQL المشروحة في قسم الربط الأفقي ودمج المجموعات داخل قاعدة بياناتك المحلية وتحقق من مجموعة النتائج.
-
بدّل بين الحالات التفاعلية في قسم دمج النتائج بـ UNION ALL وقارن كيف ينفّذ محرك MySQL 8 كل استعلام.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي5 أسئلة تنتظرك +
ما هو الشرط الإلزامي الذي يجب تحققه في جملتي SELECT قبل دمجهما بمعاملات UNION أو INTERSECT أو EXCEPT؟
تذكّر الشرط الهيكلي للأعمدة في عمليات المجموعات الرأسية.
لماذا يُعد المعامل UNION ALL أسرع أداءً من UNION المجردة عند دمج الجداول الكبيرة في MySQL؟
فكّر في التكلفة الحسابية لفحص وحذف الصفوف المكررة.
أي معامل مجموعات (أُضيف في MySQL 8.0.31) يرجع فقط الصفوف المشتركة التي ظهرت في كلا الاستعلامين الأول والثاني معاً؟
اختر معامل التقاطع بين مجموعتين.
في معاملات المجموعات، تعطي عبارة Query_A EXCEPT Query_B نفس النتيجة تماماً التي تعطيها Query_B EXCEPT Query_A.
تذكّر ما إذا كانت عملية طرح المجموعات عملية إبدالية أم تعتمد على الترتيب.
من أين يأخذ MySQL أسماء أعمدة النتيجة النهائية في استعلامات UNION أو INTERSECT أو EXCEPT؟
تذكّر أي جملة SELECT تحدد عناوين الأعمدة في الجدول المدمج.