sql JOIN : الربط بين الجداول

LEFT/RIGH/ JOIN : الرّبط الخارجي

آخر تحيين: 16-04-2014

المُدوّنة : تحسين الإستعلام INNER JOIN : الرّبط الدّاخلي


بخلاف INNER JOIN التي تعطينا فقط ، النتائج المتطابقة في الجدولين . إذا أردنا الحصول على جميع النتائج ، حتّى الغير المتطابقة . سنلجأ إلى تعليمات أخرى ، حسب حاجتنا :

  • LEFT JOIN : تعطينا جميع إدخالات الجدول الموجود على اليسار "authors" ، زائد الإدخالات المتطابقة فقط في الجدول على اليمين
  • RIGHT JOIN : تعطينا جميع إدخالات الجدول الموجود على اليمين "books" ، زائد الإدخالات المتطابقة فقط في الجدول على اليسار
  • FULL JOIN : تعطينا جميع إدخالات الجدولين ، أثناء وجود و لو نتيجة واحدة متطابقة

أضع أمام أعينكم جدولينا السابقين

books
book_idauthor_idbook_name
12كتاب الصحة
23الكتاب الأخضر
33الكتاب الأصفر
41الكتاب الأصفر
50كتاب الفضاء
...
authors
idauthor_name
1زيد
2ليلى
3عمر
4قيس

LEFT JOIN

تُعطينا جميع إدخالات الجدول الموجود على اليسار "authors" ، زائد الإدخالات المطابقة فقط في الجدول على اليمين .



في مثالنا سنحصل أيضاً على قيس . لأننا سنأخذ جميع إدخالات جدول "authors".
لكننا لن نحصل على "كتاب الفضاء" من جدول "books" لإن ليس له أي نتيجة مطابقة في جدول authors (ليس لديه أي مُؤلّف) .

الإستعلام :

SELECT a.author_name AS alkatib, b.book_name AS kitab
FROM authors a
LEFT JOIN books b
ON a.id = b.author_id
نتيجة ضم الجدولين باستعمال LEFT JOIN
kitabalkatib
الكتاب الأصفرزيد
كتاب الصحةليلى
الكتاب الأخضرعمر
الكتاب الأصفرعمر
قيس

RIGHT JOIN

تُعطينا جميع إدخالات الجدول الموجود على اليمين "books" ، زائد الإدخالات المطابقة فقط في الجدول على اليسار .



في مثالنا سنحصل أيضاً على "كتاب الفضاء" . لأننا سنأخذ جميع إدخالات جدول "books".
لكننا لن نحصل على "قيس" من جدول authors لإن ليس له أي نتيجة مطابقة في جدول books (ليس لديه أي كتاب) .

الإستعلام :

SELECT a.author_name AS alkatib, b.book_name AS kitab
FROM authors a
RIGHT JOIN books b
ON a.id = b.author_id
نتيجة ضم الجدولين باستعمال RIGHT JOIN
kitabalkatib
الكتاب الأصفرزيد
كتاب الصحةليلى
الكتاب الأخضرعمر
الكتاب الأصفرعمر
كتاب الفضاء

FULL OUTER JOIN

تُعطينا جميع إدخالات الجدولين ، في حالة وجود على الأقل نتيجة واحدة متطابقة .



التعليمة FULL OUTER JOIN (تسمّى أيضا OUTER JOIN ) قليلة الإستعمال مقارنة بالتعليمات السابقة . كما أن MySQL لا تأخذها بعين الإعتبار . لكن رغم ذلك يمكننا الحصول على نتيجتها ، بالجمع بين استعلامي LEFT و RIGHT باستعمال التعليمة UNION

الإستعلام :

SELECT a.author_name AS alkatib, b.book_name AS kitab
FROM authors a
LEFT JOIN books b
ON a.id = b.author_id

UNION

SELECT a.author_name AS alkatib, b.book_name AS kitab
FROM authors a
RIGHT JOIN books b
ON a.id = b.author_id
نتيجة ضم الجدولين باستعمال FULL OUTER JOIN
kitabalkatib
الكتاب الأصفرزيد
كتاب الصحةليلى
الكتاب الأخضرعمر
الكتاب الأصفرعمر
قيس
كتاب الفضاء