في قواعد البيانات العلاقية مثل SQL Server، يُستخدم عبارة الانضمام SQL JOIN للاستعلام والاتصال واسترجاع البيانات من جداول متعددة استنادًا إلى العلاقات بين تلك الجداول. يمكنك استخدام عبارة الانضمام SQL JOIN مع جدولين أو أكثر، وتُعيد بشكل أساسي السجلات التي تحتوي على قيم متطابقة في الجداول المختلفة. في هذا البرنامج التعليمي، سأشرح كيفية استخدام أنواع انضمام SQL الأكثر شيوعًا بما في ذلك انضمام SQL INNER JOIN، وانضمام SQL LEFT JOIN، وانضمام SQL RIGHT JOIN، وانضمام SQL OUTER JOIN.
انضمامات SQL هي ميزة أساسية للاستخدام عند العمل مع قواعد البيانات العلاقية. يتم تنفيذها بشكل رئيسي باستخدام عبارة الاختيار SQL SELECT. يمكنك معرفة المزيد حول البدء باستخدام عبارة اختيار T-SQL SELECT في مقالي السابق حول خوادم SQL: استخدام SQL SELECT و WHERE و HAVING Clauses لاسترجاع البيانات.
انضمام SQL INNER
تنشئ عملية انضمام SQL INNER مجموعة نتائج عن طريق دمج الصفوف التي تحتوي على قيم متطابقة في جدولين أو أكثر. هذه ربما تكون العملية الانضمامية الأكثر استخدامًا في T-SQL. يُعيد انضمام SQL INNER فقط الصفوف التي تحتوي على قيم متطابقة، ويُستخدم لاسترجاع البيانات التي تظهر في جميع الجداول.
توضح الرسم البياني التالي كيفية عمل عملية الانضمام الداخلي SQL مع جدولين.

بناء العبارة للانضمام الداخلي بسيط جدًا. كجزء من عبارتك SELECT، تحدد الجدولين للانضمام والأعمدة المستخدمة لمطابقة الصفوف.
لنلقِ نظرة أقرب على جدولين من قاعدة بيانات عينة AdventureWorksLT2019. إذا استخدمنا جدولي SalesLT.Customer و SalesLT.SalesOrderHeader، يمكننا استخدام SQL INNER JOIN لاسترجاع الطلبات للعملاء في جدول SalesLT.Customer عن طريق الانضمام بين الجدولين على عمود CustomerID، وهو عمود مشترك في كلا الجدولين.
إليك الاستعلام T-SQL الذي يمكنك استخدامه لتحقيق ذلك:
USE AdventureWorksLT2019 SELECT c.CustomerID, c.FirstName, c.LastName, soh.SalesOrderID, soh.OrderDate FROM SalesLT.Customer c INNER JOIN SalesLT.SalesOrderHeader soh ON c.CustomerID = soh.CustomerID
إليك كيف يعمل بناء العبارة للانضمام الداخلي SQL:
- هنا، يمكنك أن ترى أننا نختار أعمدة ‘CustomerID’ و ‘FirstName’ و ‘LastName’ من جدول SalesLT.Customer، وأعمدة ‘SalesOrderID’ و ‘OrderDate’ من جدول SalesLT.SalesOrderHeader.
- الأحرف ‘c’ و ‘soh’ هي اختصارات للاسماء المختصرة للجدول تحل محل الحاجة إلى استخدام الاسم الكامل للجدول دائمًا عند الإشارة إلى الأعمدة.
- نحن نستخدم كلمة الاستعلام INNER JOIN للانضمام بين الجدولين. كلمة الاستعلام ON تحدد العمود المستخدم للانضمام. هنا يكون عمود ‘CustomerID’.
هذا التحقق سيعود بمجموعة نتائج تشمل عناوين الـ ‘CustomerID’, ‘FirstName’, ‘LastName’, ‘SalesOrderID’, و ‘OrderDate’ لكل عميل قام بالحجز لأنك ترون في الرسم البياني التالي.

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

النموذج للمقاربة الخارجية الأيسكية أيضًا بسيط. وفي جزء الSELECT التعريفي، تحدد الجدولين التي تجمع، الأعمدة التي تستخدم لتطابق السجلات، والشرط الLEFT JOIN.
دعونا ننظر بعينة أقرب إلى جدولين من قاعدة البيانات AdventureWorksLT2019. على سبيل المثال، للحصول على جميع العملاء وأي أوامر يمتلكونها، يمكنك استخدام جداول SalesLT.Customer و SalesLT.SalesOrderHeader والقيام بالمقاربة الخارجية الأيسكية كما ترون في القائمة التالية:
USE AdventureWorksLT2019 SELECT c.CustomerID, c.FirstName, c.LastName, soh.SalesOrderID, soh.OrderDate FROM SalesLT.Customer c LEFT JOIN SalesLT.SalesOrderHeader soh ON c.CustomerID = soh.CustomerID
- في هذا المثال، نحن نقوم بإختيار العناوين ‘
- نحن نستخدم كلمة LEFT JOIN للانضمام بين الجدولين وكلمة ON التي سنستخدمها في عمود ‘CustomerID’ للانضمام بين الجدولين.
يمكنك رؤية نتائج هذا الاستعلام LEFT JOIN SQL في الشكل أدناه.

سيعيد هذا الاستعلام مجموعة نتائج تتضمن جميع العملاء في جدول SalesLT.Customer، جنبًا إلى جنب مع أي معلومات طلب مقابلة من جدول SalesLT.SalesOrderHeader. إذا كان لدى عميل أي طلبات في جدول SalesLT.SalesOrderHeader، فسيكون الأعمدة من هذا الجدول فارغة. يمكنك رؤية العديد من القيم الفارغة في الشكل السابق.
SQL RIGHT JOIN
كما قد تخمن، عملية RIGHT OUTER JOIN في SQL هي في الأساس عكس LEFT OUTER JOIN. يختار RIGHT OUTER JOIN البيانات من الجدول الأيمن (الجدول 2) ويطابق هذه البيانات مع الصفوف من الجدول الأيسر (الجدول 1).
يعيد RIGHT JOIN مجموعة نتائج تتضمن جميع الصفوف في الجدول الأيمن، حتى إذا لم تكن لديها صفوف مطابقة من الجدول الأيسر. إذا لم يكن لصف في الجدول الأيمن صف مطابق في الجدول الأيسر، ستكون مجموعة النتائج للأعمدة من الجدول الأيسر فارغة.
الشكل التالي يوضح كيفية عمل الانضمام الأيمن مع جدولين:

يمكننا إظهار ذلك مع SalesLT.Customer و SalesLT.SalesOrderHeader من قاعدة بيانات AdventuresLT2019. لاسترداد جميع الطلبات ومعلومات العملاء المقابلة بها، يمكنك استخدام استعلام RIGHT JOIN كما ترون في المثال التالي:
USE AdventureWorksLT2019 SELECT c.CustomerID, c.FirstName, c.LastName, soh.SalesOrderID, soh.OrderDate FROM SalesLT.Customer c RIGHT JOIN SalesLT.SalesOrderHeader soh ON c.CustomerID = soh.CustomerID
- في هذا المثال، نحن نختار أعمدة ‘CustomerID’ و ‘FirstName’ و ‘LastName’ و ‘SalesOrderID’ و ‘OrderDate’ من جداول SalesLT.Customer و SalesLT.SalesOrderHeader.
- تُستخدم الكلمة الرئيسية RIGHT JOIN لربط الجدولين، وتوضح الكلمة الرئيسية ON أننا نقوم بربط الجدولين على أساس عمود ‘CustomerID’.
سيُرجع هذا الاستعلام مجموعة نتائج تتضمن جميع الطلبات في جدول SalesLT.SalesOrderHeader، جنبًا إلى جنب مع معلومات العملاء المقابلة من جدول SalesLT.Customer إذا كانت متاحة. إذا كان للطلب عميل مقابل في جدول SalesLT.Customer، فإن أعمدة العميل في مجموعة النتائج ستكون خالية من القيم.
قد تلاحظ أن هذا الاستعلام يشبه إلى حد كبير الاستعلام السابق. ومع ذلك، أدى الLEFT JOIN إلى العديد من الصفوف من جدول SaleOrderHeader التي كانت تحتوي على قيم فارغة. ومع ذلك، فإن استعلامنا الأخير لا يحتوي على قيم فارغة في الصفوف من جدول SaleOrderHeader.
تُظهر نتائج عملية SQL RIGHT OUTER JOIN لدينا في الشكل التالي.

SQL OUTER JOIN
الـSQL OUTER JOIN ليست نوعية عملية الانضمام الأكثر شيوعًا. يُطلق عليها أحيانًا FULL JOIN، ولا يقوم الاستعلام OUTER JOIN فقط بإحضار الصفوف المتطابقة بل يحضر أيضًا الصفوف غير المتطابقة. بمعنى آخر، يُرجع البيانات من الجدول المنضم عندما يكون هناك تطابق في الجداول اليسرى أو اليمنى.
كما قد تتخيل، يتم إنتاج مجموعات نتائج أكبر من الأنواع الأخرى من الانضمام. يوضح الرسم البياني التالي كيفية عمل SQL OUTER JOIN مع جدولين.

I’ll give you an example of an SQL OUTER JOIN operation using the SalesLT.SalesOrderHeader and SalesLT.SalesOrderDetail tables. Here, we want to retrieve all sales orders and their associated details, including orders that don’t have any details records.
للقيام بذلك، يمكننا استخدام FULL OUTER JOIN. سيعيد هذا أيضًا أي صفوف SalesOrderDetail التي لم يكن لها صف SalesOrderHeader مقابل. في معظم الحالات العادية، يجب أن يكون لجميع صفوف SalesOrderDetails صف SalesOrderHearder مقابل ولكن قد لا يكون هذا هو الحال إذا كان هناك خطأ في التطبيق أو النظام الذي يمكن أن يساعد في اكتشافه.
إليك استعلام T-SQL يظهر مثالًا على FULL OUTER JOIN:
USE AdventureWorksLT2019 SELECT soh.SalesOrderID, soh.OrderDate, sod.ProductID, sod.OrderQty, sod.UnitPrice FROM SalesLT.SalesOrderHeader soh FULL OUTER JOIN SalesLT.SalesOrderDetail sod ON soh.SalesOrderID = sod.SalesOrderID
- في هذا المثال، نحن نختار أعمدة ‘SalesOrderID’، ‘OrderDate’، ‘ProductID’، ‘Quantity’، و ‘UnitPrice’ من كلا الجدولين SalesLT.SalesOrderHeader و SalesLT.SalesOrderDetail.
- نحن نستخدم كلمة FULL OUTER JOIN لربط الجدولين، وكلمة ON لتحديد أن العمود SalesOrderID سيتم استخدامه لربط الجدولين.
- سوف يعيد هذا الاستعلام مجموعة نتائج تشمل جميع أوامر البيع في الجدول SalesLT.SalesOrderHeader، بالإضافة إلى معلومات التفاصيل المقابلة من الجدول SalesLT.SalesOrderDetail. سوف يتضمن أيضًا جميع التفاصيل في الجدول SalesLT.SalesOrderDetail، بالإضافة إلى معلومات الأمر الرأسي المقابلة إذا كانت متاحة.
- إذا لم يكن لأمر البيع أي تفاصيل في الجدول SalesLT.SalesOrderDetail، فسوف تكون الأعمدة NULL. إذا لم يكن للتفاصيل أمر بيع مقابل في الجدول SalesLT.SalesOrderHeader، فسوف تكون أعمدة أوامر البيع NULL.
تظهر نتائج هذه العملية FULL OUTER JOIN في الشكل التالي.

تعلم أساسيات الانضمام SQL
في هذا البرنامج التعليمي، قمت بشرح أكثر أنواع الانضمامات SQL شيوعًا المختلفة. أظهرت كيفية استخدام الانضمام الداخلي، الانضمام الأيسر، الانضمام الأيمن، والانضمام الخارجي، وشرحت أيضًا كيفية اختلافها ومتى يمكن استخدامها. في مقال قادم، سأقوم بشرح بعض الانضمامات الأقل شيوعًا مثل الانضمام المتقاطع والانضمام الذاتي، لذا تابع موقع Petri للمزيد من المعلومات!
المقال ذات الصلة:
Source:
https://petri.com/sql-join/