ON Clause
- ON Clause : بند الربط في استعلامات SQL
مقدمة
في عالم قواعد البيانات العلائقية، غالباً ما نحتاج إلى جمع معلومات من جداول متعددة. هذا هو المكان الذي تلعب فيه استعلامات الربط (JOIN queries) دوراً حيوياً. وبينما تحدد استعلامات الربط الجداول التي نريد دمجها، فإن ON Clause (بند الربط) هو الجزء الذي يحدد *كيف* يتم دمجها. هذا المقال موجه للمبتدئين ويهدف إلى تقديم شرح شامل لبند ON Clause في لغة SQL، مع أمثلة عملية وتوضيحات مفصلة. سنغطي أنواع الربط المختلفة وكيفية استخدام ON Clause في كل منها. كما سنستعرض بعض السيناريوهات الشائعة التي تتطلب استخدام ON Clause بكفاءة. سيساعدك فهم هذا المفهوم على كتابة استعلامات SQL أكثر تعقيداً وفعالية، مما يتيح لك استخلاص رؤى قيمة من بياناتك. بالإضافة إلى ذلك، سنربط هذا المفهوم بمفاهيم ذات صلة في تحليل البيانات، مما يتيح لك تطبيق هذه المعرفة في مجالات مثل الخيارات الثنائية والتحليل الفني.
ما هو بند ON Clause؟
ببساطة، ON Clause هو جزء من جملة SQL JOIN التي تحدد الشرط الذي يجب أن يتحقق لربط صفوف من جدولين أو أكثر. بعبارة أخرى، يحدد ON Clause العلاقة بين الجداول. بدون ON Clause، قد تحصل على نتائج غير صحيحة أو غير متوقعة، أو حتى خطأ في الاستعلام. يتم استخدام ON Clause لتحديد الأعمدة التي يجب مقارنتها بين الجداول. عادةً ما تكون هذه الأعمدة هي المفاتيح الأساسية (Primary Keys) والمفاتيح الخارجية (Foreign Keys)، ولكن يمكن أن تكون أي أعمدة أخرى ذات صلة.
أنواع الربط (JOIN Types) وكيفية استخدام ON Clause معها
هناك عدة أنواع من الربط في SQL، ولكل منها طريقة مختلفة للتعامل مع الصفوف التي لا تتطابق مع شرط الربط. سنستعرض الأنواع الرئيسية وكيفية استخدام ON Clause مع كل منها:
- INNER JOIN: هذا هو النوع الأكثر شيوعاً من الربط. يقوم INNER JOIN بإرجاع الصفوف التي تتطابق في كلا الجدولين بناءً على الشرط المحدد في ON Clause.
مثال:
```sql SELECT Orders.OrderID, Customers.CustomerName FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID; ```
في هذا المثال، يتم ربط جدول Orders بجدول Customers بناءً على تطابق قيمتي CustomerID في كلا الجدولين. سيتم إرجاع فقط الطلبات التي لها عملاء مطابقون في جدول Customers.
- LEFT (OUTER) JOIN: يقوم LEFT JOIN بإرجاع جميع الصفوف من الجدول الأيسر (الجدول الذي يظهر قبل LEFT JOIN) والصفوف المطابقة من الجدول الأيمن. إذا لم يكن هناك تطابق في الجدول الأيمن، فسيتم إرجاع قيم NULL للأعمدة من الجدول الأيمن.
مثال:
```sql SELECT Customers.CustomerName, Orders.OrderID FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID; ```
في هذا المثال، سيتم إرجاع جميع العملاء من جدول Customers، حتى لو لم يكن لديهم أي طلبات في جدول Orders. بالنسبة للعملاء الذين ليس لديهم طلبات، سيتم عرض قيمة NULL لـ OrderID.
- RIGHT (OUTER) JOIN: يعمل RIGHT JOIN بشكل مشابه لـ LEFT JOIN، ولكن يتم إرجاع جميع الصفوف من الجدول الأيمن والصفوف المطابقة من الجدول الأيسر.
مثال:
```sql SELECT Customers.CustomerName, Orders.OrderID FROM Customers RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID; ```
في هذا المثال، سيتم إرجاع جميع الطلبات من جدول Orders، حتى لو لم يكن لها عملاء مطابقون في جدول Customers.
- FULL (OUTER) JOIN: يقوم FULL JOIN بإرجاع جميع الصفوف من كلا الجدولين. إذا لم يكن هناك تطابق في أحد الجداول، فسيتم إرجاع قيم NULL للأعمدة من الجدول الآخر. (ملاحظة: قد لا يدعم بعض أنظمة قواعد البيانات FULL JOIN.)
مثال:
```sql SELECT Customers.CustomerName, Orders.OrderID FROM Customers FULL JOIN Orders ON Customers.CustomerID = Orders.CustomerID; ```
بناء الجملة (Syntax) لبند ON Clause
بشكل عام، يكون بناء الجملة لـ ON Clause كما يلي:
```sql ON table1.column1 = table2.column2 ```
حيث:
- `table1` و `table2` هما اسما الجدولين اللذين يتم ربطهما.
- `column1` و `column2` هما اسما العمودين اللذين يتم استخدامهما للمقارنة.
يمكن أيضاً استخدام عوامل مقارنة أخرى غير (=) في ON Clause، مثل:
- `>` (أكبر من)
- `<` (أصغر من)
- `>=` (أكبر من أو يساوي)
- `<=` (أصغر من أو يساوي)
- `<>` أو `!=` (لا يساوي)
- `LIKE` (للمطابقة النمطية)
أمثلة عملية
لنفترض أن لدينا جدولين: `Products` و `Categories`.
ProductName | CategoryID | Price | | Laptop | 1 | 1200 | | Mouse | 2 | 25 | | Keyboard | 2 | 75 | | Monitor | 1 | 300 | | Printer | 3 | 150 | |
|