شرح SQL JOIN مع أمثلة (Inner وLeft وRight وFull)

SQL joins explained with examples: inner, left, right, full, cross and self joins
  1. الرئيسية
  2. المدونة
  3. قواعد البيانات وSQL

قواعد البيانات وSQL

شرح SQL JOIN مع أمثلة (Inner وLeft وRight وFull)

تعلّم عمليات الربط INNER وLEFT وRIGHT وFULL وCROSS وSELF بجدولين صغيرين واستعلامات واضحة والنتائج الدقيقة المتوقعة.

بقلم Stack Quoraآخر تحديث: 29 أكتوبر 20268 دقائق للقراءة
SQLشرح SQL JOINمع أمثلةstackquora.com

أهم النقاط

  • INNER JOIN: الصفوف المتطابقة في الجدولين فقط.
  • LEFT JOIN: كل صفوف الجدول الأيسر مع المتطابقة (وNULL إن لم يوجد تطابق).
  • RIGHT JOIN: كل صفوف الجدول الأيمن مع المتطابقة.
  • FULL JOIN: كل صفوف الجدولين مع المطابقة حيثما أمكن.
  • اربط عبر المفاتيح، واستخدم أسماء مستعارة للجداول، وأنشئ فهارس لأعمدة الربط.

لا تخزّن قواعد البيانات الحقيقية كل شيء في جدول واحد. العملاء في جدول والطلبات في جدول آخر. وللإجابة عن سؤال «أي العملاء قدّموا طلبات هذا الشهر؟» يجب الجمع بينهما، وهذا ما تفعله عمليات SQL JOIN.

هذا الدليل عملي. تُربك عمليات الربط كثيراً من المبتدئين لأن الجدولين نفسيهما يعطيان نتائج مختلفة بحسب نوع الربط. وعندما تراها ببيانات صغيرة ملموسة تصبح سهلة.

شرح SQL JOIN: الجداول النموذجية

customers

id name
1 Asha
2 Ben
3 Chitra

orders

id customer_id total
101 1 250
102 1 120
103 2 90
104 9 40

لا طلبات لدى Chitra، والطلب 104 يشير إلى عميل (9) غير موجود. هاتان الحالتان الحديتان توضحان الفرق بين أنواع الربط.

INNER JOIN

يعيد INNER JOIN الصفوف التي يتحقق فيها الشرط في الجدولين فقط، وتُستبعد الصفوف التي لا نظير لها.

SELECT c.name, o.id AS order_id, o.total
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id;

النتيجة: Asha (101) وAsha (102) وBen (103). تغيب Chitra والطلب 104. استخدمه عندما تهتم بالبيانات المترابطة فقط، مثل الطلبات مع بيانات عملائها. كتابة JOIN وحدها تعني INNER JOIN.

LEFT JOIN

يحتفظ LEFT JOIN بكل صفوف الجدول الأيسر ويضيف الصفوف المتطابقة من الأيمن. وحيث لا يوجد تطابق تكون أعمدة الجدول الأيمن NULL.

SELECT c.name, o.id AS order_id, o.total
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;

النتيجة: Asha (101) وAsha (102) وBen (103) وChitra (NULL, NULL). تظهر Chitra الآن.

نصيحة سريعة: للعثور على العملاء الذين لم يطلبوا أبداً، صفِّ بحسب NULL في الجانب الأيمن: WHERE o.id IS NULL يعيد Chitra. يستخدمه المختبرون لإيجاد السجلات اليتيمة أو المفقودة.

RIGHT JOIN وFULL JOIN

RIGHT JOIN مرآة LEFT JOIN ويحتفظ بكل صفوف الجدول الأيمن. يفضّل معظم الناس تبديل ترتيب الجدولين واستخدام LEFT JOIN لأنه أطبع في القراءة.

SELECT c.name, o.id AS order_id
FROM customers c
RIGHT JOIN orders o ON o.customer_id = c.id;

تتضمن النتيجة الطلب 104 مع اسم عميل NULL. أما FULL (OUTER) JOIN فيعيد كل صفوف الجدولين: Chitra بلا طلب والطلب 104 بلا عميل.

SELECT c.name, o.id AS order_id
FROM customers c
FULL OUTER JOIN orders o ON o.customer_id = c.id;

يدعمه PostgreSQL وSQL Server. أما MySQL فلا يدعمه، لذا اجمع LEFT JOIN وRIGHT JOIN باستخدام UNION. وللمزيد، يتضمن دليل PostgreSQL درساً واضحاً عن الربط.

الربط صفوف الأيسر فقط صفوف الأيمن فقط المتطابقة
INNER لا لا نعم
LEFT نعم لا نعم
RIGHT لا نعم نعم
FULL نعم نعم نعم

CROSS JOIN وSELF JOIN

يقرن CROSS JOIN كل صف من جدول بكل صف من الجدول الآخر: ثلاثة عملاء وأربعة طلبات تعطي اثني عشر صفاً. نادراً ما يُستخدم، لكنه مفيد لتوليد التركيبات، مثل بيانات اختبار لكل مقاس ولون.

SELECT c.name, o.id
FROM customers c
CROSS JOIN orders o;

يربط SELF JOIN الجدول بنفسه عبر أسماء مستعارة، مثلاً لإيجاد مدير كل موظف.

SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;

SQL JOIN: الأخطاء الشائعة ونصائح الأداء

  • نسيان شرط ON ينشئ CROSS JOIN عن غير قصد ويضخّم عدد الصفوف.
  • التصفية على الجدول الأيمن في WHERE بعد LEFT JOIN تحوّله إلى INNER JOIN؛ ضع الشرط في ON.
  • أسماء أعمدة ملتبسة: ابدأ الأعمدة بالاسم المستعار للجدول.
  • الربط على أعمدة غير فريدة يضاعف الصفوف ويضخّم المجاميع.
  • أنشئ فهارس لأعمدة الربط، واختر الأعمدة اللازمة فقط، وافحص الاستعلامات البطيئة بـ EXPLAIN.

لماذا تهم عمليات الربط المختبرين

يستخدم مهندسو الجودة عمليات الربط للتحقق من أن البيانات المُنشأة عبر الواجهة أو API وصلت إلى قاعدة البيانات بشكل صحيح، وللعثور على السجلات اليتيمة. اقرأ معها دليل اختبار API باستخدام Postman (بالإنجليزية). وللأساسيات راجع دليل SQL للمبتدئين (بالإنجليزية)، وللمخازن الحديثة اقرأ عن قواعد البيانات المتجهية (بالإنجليزية). ولتشغيل قاعدة بيانات محلياً راجع دليل Docker (بالإنجليزية).

الخلاصة

SQL JOIN في سطر واحد: INNER يبقي المتطابق فقط، وLEFT يبقي كل ما في اليسار، وRIGHT كل ما في اليمين، وFULL يبقي الجميع. تدرّب بجدولين صغيرين حتى تتوقع النتيجة قبل تشغيل الاستعلام، ثم جرّب ربط ثلاثة جداول والجمع بين الربط وGROUP BY.

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

ما الفرق بين INNER JOIN وLEFT JOIN؟

يعيد INNER JOIN الصفوف المتطابقة في الجدولين فقط. ويعيد LEFT JOIN كل صفوف الجدول الأيسر ويملأ أعمدة الأيمن غير المتطابقة بـ NULL.

أي نوع من SQL JOIN هو الأسرع؟

لا يوجد نوع هو الأسرع دائماً. يعتمد الأداء على الفهارس وحجم الجداول وخطة الاستعلام. أنشئ فهارس لأعمدة الربط وافحص خطة التنفيذ.

هل يدعم MySQL الأمر FULL OUTER JOIN؟

لا. في MySQL اجمع LEFT JOIN وRIGHT JOIN باستخدام UNION للحصول على النتيجة نفسها.

ما فائدة SELF JOIN؟

يقارن SELF JOIN صفوفاً من الجدول نفسه، مثل إيجاد مدير كل موظف في جدول employees واحد.

لماذا يعيد الربط صفوفاً مكررة؟

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

تابع التعلّم (مقالات بالإنجليزية)

اعمل مع Stack Quora

هل تحتاج مساعدة في الاختبار أو WordPress أو SEO؟

نساعد الفرق على إطلاق برمجيات أفضل وتنمية مواقعها. أخبرنا بما تعمل عليه وسنقترح خطوة تالية واضحة.

استمر في القراءة

المزيد من الأدلة على الاختبار والذكاء الاصطناعي والتطوير الحديث

استمتعت بهذا المقال؟ اختر موضوعًا وانتقل مباشرةً إلى أحدث برامجنا التعليمية.