الربط Joins
تعلمالربط Joins
البيانات العلائقية تعيش في أكثر من جدول. في هذا الفصل ستتعلم كيف تربط الطلبات بالعملاء، والعناصر بالطلبات، والجداول الوسيطة بالعلاقات المتعددة.
ما ستتعلمه:
- المفاتيح — كيف تشير الصفوف إلى بعضها.
- INNER JOIN — الصفوف المتطابقة فقط.
- LEFT JOIN — الاحتفاظ بالصفوف حتى دون تطابق.
- many-to-many — جداول وسيطة لعلاقات كثيرة.
ما لا نغطيه ولماذا
معيار SQL يعرّف أربعة أنواع من الربط الخارجي إلى جانب INNER JOIN الضمني: LEFT JOIN، RIGHT JOIN، وFULL OUTER JOIN. هذا الفصل يغطي INNER وLEFT فقط. السبب عملي:
RIGHT JOINميكانيكياً =LEFT JOINمع تبديل ترتيب الجدولين. أي استعلامA RIGHT JOIN B ON …يمكن إعادة كتابته كـB LEFT JOIN A ON …بنتيجة مطابقة. تعلّمLEFTفقط يكفي.FULL OUTER JOINيجمعLEFTوRIGHTمعاً — يُرجع كل الصفوف من الطرفين، ويملأ بـNULLحيث لا يوجد تطابق. مفيد أحياناً (التسويات، مقارنة مصدرين)، لكنه غير مدعوم في SQLite قبل الإصدار 3.39 (مارس 2022). كثير من بيئات الإنتاج لا تزال على إصدارات أقدم.- محاكاة
FULL OUTERعلى SQLite الأقدم:
SELECT a.id, a.name, b.id AS b_id
FROM a LEFT JOIN b ON b.a_id = a.id
UNION ALL
SELECT a.id, a.name, b.id AS b_id
FROM b LEFT JOIN a ON a.id = b.a_id
WHERE a.id IS NULL;
السطر الثاني مع WHERE a.id IS NULL يمنع تكرار الصفوف المتطابقة من الجانبين.
التوصية: ابقَ مع LEFT JOIN. أكثر قابلية للنقل عبر المحركات، وأسهل في القراءة، ويغطي تقريباً كل الحالات التي يطرحها العمل الفعلي.
مهارات الفصل
relationships
inner-join
left-join
many-to-many