فهم عمليات الانضمام في SQL: INNER JOIN, LEFT JOIN، ,RIGHT JOIN

March 27, 2024

العمل مع جداول متعددة

 

فهم عمليات الانضمام بين الجداول (INNER JOIN، LEFT JOIN، RIGHT JOIN)

 

في SQL، يمكن للمستخدمين الانضمام إلى جداول متعددة معًا لاستعادة البيانات من مصادر متعددة. يعد فهم عمليات الانضمام والتقنيات ذات الصلة أمرًا مهمًا لتحليل واستعادة البيانات بفعالية. هنا نلقي نظرة على العمل مع جداول متعددة:

 

1. فهم عمليات الانضمام بين الجداول:

   - الانضمام الداخلي ((INNER JOIN  يعيد الصفوف التي تتطابق في الجدول الأول والثاني وفقًا لشرط الانضمام.

   - الانضمام الأيسر (LEFT JOIN) يعيد جميع الصفوف من الجدول الأيسر مع تطابق الصفوف في الجدول الأيمن.

   - الانضمام الأيمن ( (RIGHT JOIN يعيد جميع الصفوف من الجدول الأيمن مع تطابق الصفوف في الجدول الأيسر.

2. تنفيذ الانضمامات العرضية والانضمامات الذاتية:

الانضمام العرضي (CROSS JOIN ) ينشئ الانضمامات العرضية مجموعة ناتجة تحتوي على كل صف في الجدول الأول يتم دمجه مع كل صف في الجدول الثاني.

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

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

 

مثال :-فرضاً أن لدينا جدولان: "المستخدمون" و "الطلبات". يمكننا استخدام الانضمام الداخلي للعثور على المستخدمين الذين قاموا بإجراء طلبات معينة.

من جدول معين

Table: Users +-------------+--------------+-----------+-------------+ | UserID | Username | Email | Role | +-------------+--------------+-----------+-------------+ | 1 | john_doe | john@email.com | admin | | 2 | jane_smith | jane@email.com | user | | 3 | ahmed_ali | ahmed@email.com| moderator | +-------------+--------------+-----------+-------------+ Table: Orders +-------------+-------------+-----------+ | OrderID | UserID | Amount | +-------------+-------------+-----------+ | 1 | 1 | 100.00 | | 2 | 2 | 50.00 | | 3 | 1 | 200.00 | +-------------+-------------+-----------+



هذه هي جداول المستخدمين والطلبات، وتظهر العلاقة بينهما. يتم ربط الجدولين باستخدام عمود UserID  

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

  

 


SELECT Users.Username, Orders.Amount FROM Users INNER JOIN Orders ON Users.UserID = Orders.UserID;

النتيجة :-

--هذا الاستعلام يعيد المستخدمين الذين قاموا بإجراء طلبات ومبالغ هذه الطلبات.--
| Username | Amount | |-----------|---------| | john_doe | 100.00 | | john_doe | 200.00 | | jane_smith| 50.00 |


. الانضمام الأيسر ((LEFT JOIN):

فرضاً أن لدينا نفس الجدولين: "المستخدمون" و "الطلبات". يمكننا استخدام الانضمام الأيسر لاسترداد جميع المستخدمين بغض النظر عما إذا كان لديهم طلبات أو لا.


SELECT Users.Username, Orders.Amount FROM Users LEFT JOIN Orders ON Users.UserID = Orders.UserID;

 النتيجة:- 

هذا الاستعلام يعيد جميع المستخدمين ومبالغ طلباتهم إذا كانت لديهم، ولكن يظهر قيمة NULL للمستخدمين الذين لم يقموا بأي طلبات

| Username | Amount | |------------|---------| | john_doe | 100.00 | | john_doe | 200.00 | | jane_smith | 50.00 | | ahmed_ali | NULL |

. الانضمام العرضي(CROSS JOIN):)

فرضاً أن لدينا جدولان: "المنتجات" و "العملاء". يمكننا استخدام الانضمام العرضي لإنشاء توزيع كل المنتجات مع كل العملاء.


Table: Products +-------------+ | ProductName | +-------------+ | Product A | | Product B | | Product C | +-------------+ Table: Customers +--------------+ | CustomerName | +--------------+ | Customer 1 | | Customer 2 | | Customer 3 | +--------------+


SELECT Products.ProductName, Customers.CustomerName FROM Products CROSS JOIN Customers;

 النتيجة:- هذا الاستعلام يعيد جميع التوزيعات المحتملة للمنتجات بين العملاء.

| ProductName | CustomerName | |-------------|--------------| | Product A | Customer 1 | | Product A | Customer 2 | | Product A | Customer 3 | | Product B | Customer 1 | | Product B | Customer 2 | | Product B | Customer 3 | | Product C | Customer 1 | | Product C | Customer 2 | | Product C | Customer 3 |

 

4. الانضمام الذاتي ((SELF JOIN

فرضاً أن لدينا جدول يحتوي على بيانات الموظفين وبيانات مشرفيهم. يمكننا استخدام الانضمام الذاتي لربط بيانات الموظف ببيانات مشرفيهم في الجدول نفسه.

Table: Employees +-------------+--------------+--------------+ | EmployeeID | EmployeeName | ManagerID | +-------------+--------------+--------------+ | 1 | John Doe | 1 | | 2 | Jane Smith | NULL | | 3 | Ahmed Ali | 1 | +-------------+--------------+--------------+
Table: Managers +-------------+-------------+ | ManagerID | ManagerName | +-------------+-------------+ | 1 | Sarah Jones | | 2 | Michael Lee | | 3 | Emily Wang | +-------------+-------------+

SELECT E.EmployeeName, M.EmployeeName AS ManagerName FROM Employees AS E LEFT JOIN Employees AS M ON E.ManagerID = M.EmployeeID;

 النتيجة:-  هذا الناتج يعرض أسماء الموظفين مع أسماء مشرفيهم إذا كان لديهم مشرفين، أما إذا لم يكن لديهم مشرف فستكون قيمة NULL.

| EmployeeName | ManagerName | |--------------|-------------| | John Doe | Sarah Jones | | Jane Smith | NULL | | Ahmed Ali | Sarah Jones |


comments 0

See all"ON"
Name is required.
Valid email is required.