شارك المقالة

لجلب بيانات من أكثر من جدول في Oracle نحدد علاقة واضحة بين المفاتيح، ثم نختار نوع JOIN المناسب. يطابق INNER JOIN الصفوف المرتبطة فقط، ويحافظ LEFT JOIN على جميع صفوف الجدول الأيسر حتى عندما لا توجد مطابقة في الجدول الآخر.

تستخدم الأمثلة جداول التدريب في درس إنشاء جداول وبيانات تدريب Oracle. نفّذ إعدادها مرة واحدة في مخطط تدريب قبل الاستعلامات، حتى تتطابق أسماء الأعمدة والنتائج.

مثال SQL قابل للنسخ

SELECT e.emp_id, e.emp_name, d.dept_name
FROM gc_employees e
JOIN gc_departments d ON d.dept_id = e.dept_id
ORDER BY e.emp_id;

SELECT e.emp_id, e.emp_name, d.dept_name
FROM gc_employees e
LEFT JOIN gc_departments d ON d.dept_id = e.dept_id
ORDER BY e.emp_id;

SELECT e.emp_id, e.emp_name, COUNT(a.project_id) AS project_count
FROM gc_employees e
LEFT JOIN gc_assignments a ON a.emp_id = e.emp_id
GROUP BY e.emp_id, e.emp_name
ORDER BY e.emp_id;

INNER JOIN مقابل LEFT JOIN

يرجع الربط الداخلي بين الموظفين والأقسام خمسة موظفين لهم قسم. يرجع الربط الأيسر السبعة جميعًا، وتكون بيانات القسم NULL للموظفين Mona وNoor. لا يعني ذلك أن كل أقسام الشركة ستظهر؛ الاتجاه يبدأ من الموظفين، ولذلك لا يظهر قسم Support الذي ليس له موظفون.

العد بعد الربط

يعرض المثال الثالث عدد المشروعات لكل موظف. نستخدم COUNT(a.project_id) وليس COUNT(*) حتى تكون النتيجة صفرًا لمن ليس له مشروع؛ الربط الأيسر يحتفظ بصف خارجي ولو كانت أعمدة العلاقة كلها NULL. عدد مشروعات الموظف 1 هو 2، والموظفين 2 و3 هو 1 لكل منهما.

أخطاء شائعة

تأهيل الأعمدة باسم مستعار مثل e وd يمنع الغموض عندما يوجد عمود بالاسم نفسه في الجدولين. حذف شرط الربط قد ينتج حاصل ضرب للصفوف. كذلك وضع شرط على الجدول الأيمن في WHERE بعد LEFT JOIN قد يستبعد الصفوف غير المطابقة؛ ضع الشرط في ON عندما يكون هذا هو الغرض المنطقي.

الصور والفيديو من الشرح السابق

الكود النصي أعلاه هو النسخة المصححة؛ قد تختلف المواد المرئية السابقة في أسماء المتغيرات أو طريقة التشغيل.

شاهد أيضًا
مقالات ذات صلة
🚫 مانع الإعلانات مفعل

يجب إيقاف مانع الإعلانات لاستكمال تصفح الموقع