عمليات الربط في SQL Server: أنواعها مع أمثلة

⚡ ملخص ذكي

تقوم عمليات الربط في SQL Server بدمج الصفوف من جدولين أو أكثر بناءً على عمود ذي صلة، باستخدام عمليات الربط الداخلية والخارجية اليسرى واليمنى والخارجية الكاملة للتحكم في الصفوف المتطابقة وغير المتطابقة التي تظهر في النتيجة.

  • 🔗 الغرض: تسترجع عملية الربط (JOIN) البيانات ذات الصلة من جدولين أو أكثر عن طريق مطابقة عمود مشترك، وعادة ما يكون مفتاحًا.
  • 🎯 صلة داخلية: تُرجع عملية الربط الداخلي (INNER JOIN) فقط الصفوف التي يكون فيها شرط الربط صحيحًا في كلا الجدولين.
  • ⬅️ الوصلة الخارجية اليسرى: تقوم عملية الربط الخارجي الأيسر (LEFT OUTER JOIN) بإرجاع كل صف من الجدول الأيسر، مع ملء أعمدة الجدول الأيمن غير المتطابقة بـ NULL.
  • ➡️ الوصلة الخارجية اليمنى: تقوم عملية الربط الخارجي الأيمن (RIGHT OUTER JOIN) بإرجاع كل صف من الجدول الأيمن، مع ملء أعمدة الجدول الأيسر غير المتطابقة بقيم NULL.
  • 🔄 انضمام خارجي كامل: تقوم عملية الربط الخارجي الكامل (FULL OUTER JOIN) بإرجاع جميع الصفوف من كلا الجدولين، باستخدام القيمة NULL حيثما لا يتم استيفاء الشرط.
  • 🔑 بشرط: تحدد عبارة ON الأعمدة التي تربط الجداول، وغالبًا ما تكون زوجًا من المفتاح الأساسي والمفتاح الأجنبي.

عمليات الربط في SQL Server: أمثلة على الربط الداخلي، والربط الأيسر، والربط الأيمن، والربط الخارجي الكامل

ما هي عمليات الربط (Joins) في SQL Server؟

يمكن استرجاع البيانات من أكثر من جدول واحد باستخدام عبارة JOIN في ملقم SQLتجمع عملية الربط (JOIN) صفوفًا من جدولين أو أكثر بناءً على عمود مرتبط بينهما، وغالبًا ما يكون ذلك المفتاح الأساسي مطابق لـ المفتاح الخارجيتوجد أربعة أنواع رئيسية من عمليات الربط (JOIN) في SQL Server:

  • الربط الداخلي / الربط البسيط
  • الربط الخارجي الأيسر / الربط الأيسر
  • وصلة خارجية يمنى / وصلة يمنى
  • كامل في الخارج الانضمام

يلخص الجدول أدناه عدد الصفوف التي يُرجعها كل نوع من أنواع JOIN:

نوع الانضمام صفوف العودة
INNER JOIN الصفوف التي تتطابق فيها شروط الربط في كلا الجدولين فقط.
ترك صلة خارجية جميع الصفوف من الجدول الأيسر، بالإضافة إلى صفوف الجدول الأيمن المطابقة (قيم فارغة حيث لا يوجد تطابق).
حق الانضمام الخارجي جميع الصفوف من الجدول الأيمن، بالإضافة إلى صفوف الجدول الأيسر المطابقة (قيم فارغة حيث لا يوجد تطابق).
كامل في الخارج الانضمام جميع الصفوف من كلا الجدولين، مع قيم فارغة (NULL) حيثما لم يتم استيفاء الشرط.

تستخدم الأمثلة أدناه اثنين الجداوليتم ربط جدولي الطلاب والرسوم الدراسية بناءً على عمود القبول المشترك. يشرح كل قسم نوع واحد من أنواع الربط (JOIN) مع صيغته، واستعلام مُطبق، والنتيجة.

INNER JOIN

هذا النوع من ملقم SQL تُعيد دالة JOIN صفوفًا من جميع الجداول التي يكون فيها شرط الربط صحيحًا. وتأخذ الصيغة التالية:

SELECT columns
FROM table_1 
INNER JOIN table_2
ON table_1.column = table_2.column;

سنستخدم الجدولين التاليين لتوضيح ذلك. يسرد جدول الطلاب أدناه كل طالب ورقم قبوله:

جدول الطلاب الذي يسرد أعمدة القبول والاسم الأول والاسم الأخير

يوضح الجدول أدناه الرسوم التي دفعها كل رقم دخول:

جدول الرسوم الذي يسرد أرقام القبول وعمود المبلغ المدفوع

يوضح الأمر التالي عملية الربط الداخلي (INNER JOIN) في SQL Server مع مثال توضيحي:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
INNER JOIN Fee
ON Students.admission = Fee.admission

يُظهر الأمر النتيجة التالية، والتي تعرض فقط أرقام القبول الموجودة في كلا الجدولين:

نتيجة INNER JOIN تُظهر فقط الطلاب الذين يظهر قبولهم في كلا الجدولين

يمكننا تحديد الطلاب الذين سددوا رسومهم. استخدمنا العمود الذي يحتوي على القيم المشتركة في كلا الجدولين، وهو عمود القبول.

ترك صلة خارجية

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

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
LEFT OUTER JOIN Fee
ON Students.admission = Fee.admission

يُعيد الكود النتيجة التالية، احتفظping كل طالب حتى عندما لا تتطابق سجلات الرسوم:

LEFT OUTER JOIN result keeping كل صف من صفوف الطلاب يحتوي على قيمة فارغة (NULL) للرسوم غير المتطابقة

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

حق الانضمام الخارجي

يقوم هذا النوع من الربط بإرجاع كافة الصفوف من الجدول الأيمن وفقط تلك التي تحتوي على قيم متطابقة في الجدول الأيسر. على سبيل المثال:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
RIGHT OUTER JOIN Fee
ON Students.admission = Fee.admission

تُرجع عبارة OUTER JOINS في SQL Server النتيجة التالية:

RIGHT OUTER JOIN result keeping كل صف من صفوف الرسوم وصفوف الطلاب المطابقة

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

كامل في الخارج الانضمام

يُعيد هذا النوع من الربط جميع الصفوف من كلا الجدولين، مع قيم فارغة (NULL) حيثما لا يكون شرط الربط صحيحًا. على سبيل المثال:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
FULL OUTER JOIN Fee
ON Students.admission = Fee.admission

يُعيد الكود النتيجة التالية لاستعلامات الربط الخارجي الكامل في SQL، بدمج كل صف من كلا الجدولين:

نتيجة عملية الربط الخارجي الكامل (FULL OUTER JOIN) تجمع جميع صفوف الطلاب والرسوم الدراسية مع قيم فارغة (NULL) لسد الفجوات.

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

تُعيد عملية الربط المتقاطع (CROSS JOIN) حاصل الضرب الديكارتي لجدولين، حيث تُقرن كل صف من الجدول الأول بكل صف من الجدول الثاني. ولا تحتوي هذه العملية على شرط ON، لذا فإن جدولًا مكونًا من 10 صفوف وآخر مكونًا من 5 صفوف ينتج عنه 50 صفًا.

تستخدم عملية الربط الذاتي (SELF JOIN): حيث يتم إدراج الجدول مرتين بأسماء مستعارة مختلفة، ثم يتم الربط بينهما بناءً على عمود ذي صلة لمقارنة الصفوف داخل الجدول نفسه. وهي شائعة في البيانات الهرمية، مثل مطابقة كل موظف بمديره.

تجمع عملية الربط (JOIN) أعمدة من جداول مرتبطة جنبًا إلى جنب، وتطابق الصفوف بناءً على شرط معين. أما عملية الاتحاد (UNION) فتُرصّ نتائج استعلامي تحديد (SELECT) عموديًا، مضيفةً صفوفًا. تُوسّع عملية الربط (JOIN) نطاق النتيجة، بينما تُطيلها عملية الاتحاد (UNION).

نعم. يمكن لشرط ON اختبار عدة أعمدة مرتبطة باستخدام AND، على سبيل المثال ON a.col1 = b.col1 AND a.col2 = b.col2. تُستخدم الشروط المركبة عادةً عندما لا يُحدد عمود واحد صفًا بشكل فريد.

تُحدد عبارة ON كيفية مطابقة الجداول وتُطبق أثناء تنفيذ عملية الربط. أما عبارة WHERE فتُصفّي النتيجة المُجمّعة لاحقًا. في عمليات الربط الخارجي (OUTER JOIN)، يُمكن أن يؤدي تغيير الشرط بينهما إلى تغيير الصفوف المُسترجعة.

نعم. كتابة JOIN بدون بادئة تعني افتراضياً INNER JOIN، لذا فهي تُرجع فقط الصفوف المتطابقة. إضافة LEFT أو RIGHT أو FULL قبل OUTER JOIN تُغير الصفوف غير المتطابقة التي يتم الاحتفاظ بها في النتيجة.

نعم. مساعد الطيار جيثب يمكنك صياغة استعلامات INNER وLEFT وRIGHT وFULL OUTER JOIN من خلال إدخال نص بلغة طبيعية. راجع دائمًا شرط ON ونوع الربط للتأكد من أن مجموعة النتائج تتطابق مع ما تريده.

يقترح مساعدو الذكاء الاصطناعي والتعلم الآلي نوع الربط الصحيح، ويُنشئون شروط الربط بين الجداول المتعددة، ويُشيرون إلى المفاتيح المفقودة أو عمليات الضرب الديكارتية غير المقصودة. كما يُمكنهم التوصية بفهارس لأعمدة الربط. ويتحقق المطور من كل اقتراح قبل تنفيذه.

تلخيص هذه التدوينة بـ: