MySQL: الدليل الشامل لعمليات الربط في MySQL

آخر تحديث: 2026-08-26

يُعد «JOIN» إحدى القدرات الأساسية لقواعد البيانات العلائقية — ولا تظهر قوته الحقيقية إلا عند ربط جداول متعددة.

يقدم هذا الدرس نظرة عامة منهجية على جميع أنواع عمليات «JOIN» وتطبيقاتها العملية.

1. ما ستتعلمه



2. قصة حقيقية عن الاستعلامات متعددة الجداول

(1) المشكلة: البيانات مبعثرة عبر جداول متعددة

يتم تخزين بيانات الطلبات في الجدول orders، بينما يتم تخزين أسماء العملاء في الجدول customers.

للحصول على «اسم العميل المرتبط بكل طلب»، ستحتاج إلى تنفيذ استعلام ربط.

(2) حلول لعمليات «JOIN»

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


3. نظرة عامة على أنواع عمليات «JOIN»

100%
graph LR
    A[JOIN Type] --> B[INNER JOIN]
    A --> C[LEFT JOIN]
    A --> D[RIGHT JOIN]
    A --> E[CROSS JOIN]
    B --> F[Return only matching rows]
    C --> G[Full Refund on the Left Table+Right Table Match]
    D --> H[Full refund as shown in the table on the right+Left Table Match]
    E --> I[Cartesian product]
نوع JOIN الوصف عدد الصفوف المُرجعة
INNER JOIN الصفوف المتطابقة في كلا الجدولين التقاطع
LEFT JOIN الجدول الأيسر بأكمله + الصفوف المطابقة من الجدول الأيمن الجدول الأيسر بأكمله
RIGHT JOIN الجدول الأيمن بأكمله + الصفوف المطابقة من الجدول الأيسر الجدول الأيمن بأكمله
CROSS JOIN الضرب الديكارتي m × n


4. INNER JOIN

اعرض فقط الصفوف المتطابقة في كلا الجدولين.

▶ مثال: عملية «الربط الداخلي» الأساسية

SQL
-- Check Order and Customer Information
SELECT 
    o.id AS order_id,
    c.name AS customer_name,
    o.amount,
    o.order_date
FROM orders o
INNER JOIN customers c ON o.customer_id = c.id;

-- Connection of the Three Tables
SELECT 
    o.id,
    c.name,
    p.product_name,
    oi.quantity
FROM orders o
INNER JOIN customers c ON o.customer_id = c.id
INNER JOIN order_items oi ON o.id = oi.order_id
INNER JOIN products p ON oi.product_id = p.id;
▶ جرّب الكود

5. LEFT JOIN (الربط الخارجي الأيسر)

تُرجع جميع الصفوف من الجدول الأيسر؛ وتُرجع القيمة NULL في حالة عدم وجود مطابقات في الجدول الأيمن.

▶ مثال: الانضمام الأيسر

SQL
-- Query all customers and their orders(Including customers with no orders)
SELECT 
    c.name,
    o.id AS order_id,
    o.amount
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id;
▶ جرّب الكود

الناتج:

TEXT 📖 للعرض فقط
+----------+----------+--------+
| name     | order_id | amount |
+----------+----------+--------+
| Alice    |        1 | 100.00 |
| Alice    |        2 | 200.00 |
| Bob      |        3 | 150.00 |
| Charlie  |     NULL |   NULL |  -- No orders
+----------+----------+--------+

▶ مثال: البحث عن العملاء الذين ليس لديهم أي طلبات

SQL
SELECT c.*
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
WHERE o.id IS NULL;
▶ جرّب الكود

6. الربط الأيمن (الربط الخارجي الأيمن)

تُرجع جميع الصفوف من الجدول الأيمن؛ وتُرجع القيمة NULL في حالة عدم وجود مطابقات في الجدول الأيسر.

▶ مثال: الانضمام الأيمن

SQL
-- Query all orders and their customers(Including invalid orders)
SELECT 
    c.name,
    o.id AS order_id,
    o.amount
FROM customers c
RIGHT JOIN orders o ON c.id = o.customer_id;
▶ جرّب الكود
💡 نصيحة: نادرًا ما يُستخدم «RIGHT JOIN»؛ ويمكن عادةً استبداله بـ «LEFT JOIN» (عن طريق تبديل ترتيب الجداول).



7. الارتباط المتقاطع

إرجاع الحاصل الضربي الديكارتي (صفًا تلو الآخر).

▶ مثال: التوصيل المتقاطع

SQL
-- Generate Colors×Size Combinations
SELECT c.color, s.size
FROM colors c
CROSS JOIN sizes s;
▶ جرّب الكود

الناتج (3 ألوان × 3 أحجام = 9 صفوف):

TEXT 📖 للعرض فقط
+-------+------+
| color | size |
+-------+------+
| Red   | S    |
| Red   | M    |
| Red   | L    |
| Blue  | S    |
| Blue  | M    |
| Blue  | L    |
| Green | S    |
| Green | M    |
| Green | L    |
+-------+------+


8. الروابط الداخلية

الجدول مرتبط بنفسه.

▶ مثال: البحث عن موظف ومشرفه

SQL
-- The employee roster includes manager_id A field pointing to itself id
SELECT 
    e.name AS employee,
    m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;
▶ جرّب الكود

الناتج:

TEXT 📖 للعرض فقط
+----------+---------+
| employee | manager |
+----------+---------+
| Alice    | NULL    |  -- CEO,No superior
| Bob      | Alice   |
| Charlie  | Alice   |
| Dave     | Bob     |
+----------+---------+


9. أساسيات تحسين عمليات JOIN

استراتيجية التحسين الوصف
فهرسة حقل الربط يجب فهرسة الحقل الموجود في ON o.customer_id = c.id
الجدول الصغير يتحكم في الجدول الكبير ضع الجدول الذي يحتوي على مجموعة النتائج الصغيرة على اليسار
تجنب SELECT * البحث في الحقول المطلوبة فقط
تصفية WHERE تقلل من عدد الصفوف المشمولة في عملية JOIN


❓ أسئلة شائعة

س هل هناك فرق بين INNER JOIN و JOIN؟
ج لا. JOIN هي القيمة الافتراضية لـ INNER JOIN.
س هل يمكن استخدام LEFT JOIN وRIGHT JOIN بالتبادل؟
ج نعم. A LEFT JOIN B تعادل B RIGHT JOIN A. يُنصح باستخدام LEFT JOIN بشكل ثابت.
س هل عملية «JOIN» بطيئة؟
ج هذا يعتمد على حجم البيانات والفهارس. عندما تكون حقول الربط مفهرسة، يمكن لعمليات «JOIN» على الجداول التي تحتوي على ملايين الصفوف أن تُرجع النتائج في غضون ثوانٍ.
س كم عدد الجداول التي يمكن ربطها معًا؟
ج من الناحية النظرية، لا يوجد حد أقصى في MySQL، ولكن من الناحية العملية، يُنصح بعدم تجاوز 5–6 جداول. إذا كان عدد الجداول كبيرًا جدًّا، ففكر في إزالة التطبيع من التصميم.

📖 ملخص


📝 تمارين

  1. سؤال أساسي (مستوى الصعوبة: ⭐): استخدم INNER JOIN لاسترداد الطلبات وأسماء العملاء المرتبطة بها.

  2. مشكلة متقدمة (مستوى الصعوبة: ⭐⭐): استخدم LEFT JOIN لتحديد العملاء الذين لم يقدموا أي طلب شراء من قبل.

  3. سؤال التحدي (مستوى الصعوبة: ⭐⭐⭐): استخدم عملية «الانضمام الذاتي» (self-join) للاستعلام عن الموظفين ومشرفيهم، واحسب عدد المرؤوسين الذين يديرهم كل مشرف.

Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%