0Pricing
SQL Academy · درس

عمليات Cross Join والمنتجات الديكارتية

استخدم CROSS JOIN عمدًا لإنشاء الاقترانات التوافقية، وتجنب الانفجارات الديكارتية العرضية الناتجة عن مفاتيح ربط مفقودة.

عمليات Cross Join والمنتجات الديكارتية درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.

ما هي CROSS JOIN؟

تنتج CROSS JOIN كل تركيبة ممكنة من الصفوف: m × n من صفوف المخرجات. ولا تحتوي على عبارة ON.

SELECT * FROM a CROSS JOIN b;

-- Equivalent:
SELECT * FROM a, b;        -- comma join, no condition

حواصل الضرب الديكارتية غير المقصودة

الخطأ الكلاسيكي: نسيان شرط JOIN، فتقترن كل صفوف A بكل صفوف B.

SELECT u.email, o.id
FROM users u, orders o;     -- missing WHERE u.id = o.user_id !
-- m users × n orders rows — millions!

حالات الاستخدام المقصودة

تكون CROSS JOIN مفيدة عندما تريد فعلاً جميع الأزواج:

  • تركيبات الفئات × الفترات الزمنية لتقارير الحاويات الفارغة
  • بيانات الاختبار: كل مستخدم × كل منتج
  • التقويمات: كل متجر × كل تاريخ

مثال على التقويم × المتاجر

أدرج الأيام التي لا مبيعات فيها لكل متجر:

SELECT d.day, s.id, COALESCE(SUM(o.total), 0) AS revenue
FROM generate_series(CURRENT_DATE - 30, CURRENT_DATE, '1 day') AS d(day)
CROSS JOIN stores s
LEFT JOIN orders o ON o.store_id = s.id
                  AND date_trunc('day', o.created_at) = d.day
GROUP BY d.day, s.id
ORDER BY d.day, s.id;

الحواصل الديكارتية وEXPLAIN

يظهر الحاصل الديكارتي غير المقصود على شكل عدد هائل من الصفوف في EXPLAIN ANALYZE:

EXPLAIN ANALYZE
SELECT u.email, o.id FROM users u, orders o;
-- Nested Loop  (rows=10000000)  ← warning sign

LATERAL: ‏CROSS JOIN مشروط

تشبه LATERAL JOIN عملية CROSS JOIN، لكن يمكن للجانب الأيمن فيها الرجوع إلى الجانب الأيسر — وهذا ما سيتناوله الدرس التالي.

التباديل والتوافيق

للحصول على أزواج (A,B) من دون تكرارات، أضف شرط مقارنة في ON:

SELECT a.id, b.id
FROM products a
JOIN products b ON a.id < b.id;
-- All unique pairs of products, no (A,A), no (B,A) duplicates of (A,B)

CROSS JOIN مع VALUES

ضمّن مجموعة صغيرة مباشرة:

SELECT u.email, c.code
FROM users u
CROSS JOIN (VALUES ('EUR'), ('USD'), ('GBP')) AS c(code);

تجنب صيغة الوصلة بالفاصلة

وصلة الفاصلة الضمنية (FROM a, b) قانونية، لكنها تخفي المقصود. فضّل استخدام CROSS JOIN الصريحة:

-- Don't (looks like a typo):
FROM users, orders

-- Do:
FROM users CROSS JOIN orders

الأداء

عملية CROSS JOIN نفسها رخيصة — فلا يوجد شرط لتقييمه. أما التكلفة فتنتج عن عدد صفوف المخرجات: ‏10k × 10k = 100M صف.

خلاصة

CROSS JOIN = جميع الأزواج.

  • استخدمها عمداً لإنشاء التركيبات
  • انتبه إلى الحواصل الديكارتية غير المقصودة، الناتجة عن غياب WHERE
  • ادمجها مع generate_series لتقارير استكمال الفجوات

تحقق سريع

كتبت SELECT * FROM users u, orders o; من دون WHERE. ما المخرجات؟

الأسئلة الشائعة

هل درس «عمليات Cross Join والمنتجات الديكارتية» مجاني؟

نعم — نص درس «عمليات Cross Join والمنتجات الديكارتية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «عمليات Cross Join والمنتجات الديكارتية»؟

استخدم CROSS JOIN عمدًا لإنشاء الاقترانات التوافقية، وتجنب الانفجارات الديكارتية العرضية الناتجة عن مفاتيح ربط مفقودة. تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «عمليات Cross Join والمنتجات الديكارتية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. عمليات Cross Join والمنتجات الديكارتية
  2. عمليات الربط الجانبي (LATERAL JOIN)
  3. الربط المضاد والربط شبه الكامل (NOT EXISTS)
  4. ضبط أداء الربط بين جداول متعددة
← العودة إلى SQL Academy