MySQL: الدليل الشامل لعمليات الربط في MySQL
آخر تحديث: 2026-08-26
يُعد «JOIN» إحدى القدرات الأساسية لقواعد البيانات العلائقية — ولا تظهر قوته الحقيقية إلا عند ربط جداول متعددة.
يقدم هذا الدرس نظرة عامة منهجية على جميع أنواع عمليات «JOIN» وتطبيقاتها العملية.
1. ما ستتعلمه
- INNER JOIN (الربط الداخلي)
- LEFT JOIN / RIGHT JOIN (الربط الخارجي)
- CROSS JOIN
- الربط الذاتي
- قواعد استخدام Syntax
2. قصة حقيقية عن الاستعلامات متعددة الجداول
(1) المشكلة: البيانات مبعثرة عبر جداول متعددة
يتم تخزين بيانات الطلبات في الجدول orders، بينما يتم تخزين أسماء العملاء في الجدول customers.
للحصول على «اسم العميل المرتبط بكل طلب»، ستحتاج إلى تنفيذ استعلام ربط.
(2) حلول لعمليات «JOIN»
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»
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
اعرض فقط الصفوف المتطابقة في كلا الجدولين.
▶ مثال: عملية «الربط الداخلي» الأساسية
-- 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 في حالة عدم وجود مطابقات في الجدول الأيمن.
▶ مثال: الانضمام الأيسر
-- 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;
الناتج:
+----------+----------+--------+
| name | order_id | amount |
+----------+----------+--------+
| Alice | 1 | 100.00 |
| Alice | 2 | 200.00 |
| Bob | 3 | 150.00 |
| Charlie | NULL | NULL | -- No orders
+----------+----------+--------+
▶ مثال: البحث عن العملاء الذين ليس لديهم أي طلبات
SELECT c.*
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
WHERE o.id IS NULL;
6. الربط الأيمن (الربط الخارجي الأيمن)
تُرجع جميع الصفوف من الجدول الأيمن؛ وتُرجع القيمة NULL في حالة عدم وجود مطابقات في الجدول الأيسر.
▶ مثال: الانضمام الأيمن
-- 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;
7. الارتباط المتقاطع
إرجاع الحاصل الضربي الديكارتي (صفًا تلو الآخر).
▶ مثال: التوصيل المتقاطع
-- Generate Colors×Size Combinations
SELECT c.color, s.size
FROM colors c
CROSS JOIN sizes s;
الناتج (3 ألوان × 3 أحجام = 9 صفوف):
+-------+------+
| color | size |
+-------+------+
| Red | S |
| Red | M |
| Red | L |
| Blue | S |
| Blue | M |
| Blue | L |
| Green | S |
| Green | M |
| Green | L |
+-------+------+
8. الروابط الداخلية
الجدول مرتبط بنفسه.
▶ مثال: البحث عن موظف ومشرفه
-- 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;
الناتج:
+----------+---------+
| employee | manager |
+----------+---------+
| Alice | NULL | -- CEO,No superior
| Bob | Alice |
| Charlie | Alice |
| Dave | Bob |
+----------+---------+
9. أساسيات تحسين عمليات JOIN
| استراتيجية التحسين | الوصف |
|---|---|
| فهرسة حقل الربط | يجب فهرسة الحقل الموجود في ON o.customer_id = c.id |
| الجدول الصغير يتحكم في الجدول الكبير | ضع الجدول الذي يحتوي على مجموعة النتائج الصغيرة على اليسار |
تجنب SELECT * |
البحث في الحقول المطلوبة فقط |
| تصفية WHERE | تقلل من عدد الصفوف المشمولة في عملية JOIN |
❓ أسئلة شائعة
JOIN هي القيمة الافتراضية لـ INNER JOIN.A LEFT JOIN B تعادل B RIGHT JOIN A. يُنصح باستخدام LEFT JOIN بشكل ثابت.📖 ملخص
- INNER JOIN تُرجع الصفوف المتطابقة من الجدولين
- LEFT JOIN تُرجع جميع الصفوف من الجدول الأيسر بالإضافة إلى الصفوف المطابقة من الجدول الأيمن (يُستخدم بشكل شائع)
- RIGHT JOIN تُرجع جميع الصفوف من الجدول الأيمن بالإضافة إلى الصفوف المطابقة من الجدول الأيسر
- CROSS JOIN تُرجع حاصل الضرب الديكارتي
- الربط الذاتي: يتم ربط جدول بنفسه
- USING يبسط عمليات الربط التي تتضمن حقولًا تحمل الاسم نفسه
- فهرسة حقول الانضمام هي إحدى تقنيات التحسين الرئيسية
📝 تمارين
-
سؤال أساسي (مستوى الصعوبة: ⭐): استخدم INNER JOIN لاسترداد الطلبات وأسماء العملاء المرتبطة بها.
-
مشكلة متقدمة (مستوى الصعوبة: ⭐⭐): استخدم LEFT JOIN لتحديد العملاء الذين لم يقدموا أي طلب شراء من قبل.
-
سؤال التحدي (مستوى الصعوبة: ⭐⭐⭐): استخدم عملية «الانضمام الذاتي» (self-join) للاستعلام عن الموظفين ومشرفيهم، واحسب عدد المرؤوسين الذين يديرهم كل مشرف.