اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر
بتاريخ 1 دقيقة مضت قال Ail Ahmed:

السلام عليكم

اي هي JOIN  في استعلامات SQL ؟

و عليكم السلام
ال JOIN: هي عملية تستخدم لربط الجداول مع بعضها البعض بناءً على علاقة مشتركة.

و غالبًا ما تُستخدم عندما يكون لديك بيانات موزعة في جداول متعددة وترغب في جلبها معًا في استعلام واحد لتقديم نتائج مفيدة.
و هناك عدة انواع له:

  • INNER JOIN:

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

إذا لم يكن هناك تطابق، فلن يتم عرض السجل في النتيجة.

  • LEFT JOIN (LEFT OUTER JOIN):

يتم إرجاع جميع السجلات من الجدول الأيسر (Left Table)، مع السجلات المطابقة من الجدول الأيمن (Right Table).

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

  • RIGHT JOIN (RIGHT OUTER JOIN):

يعمل بشكل مشابه لـ LEFT JOIN، لكن يتم إرجاع جميع السجلات من الجدول الأيمن، مع السجلات المطابقة من الجدول الأيسر.

إذا لم يكن هناك تطابق، ستكون القيم من الجدول الأيسر هي NULL.

  • FULL JOIN (FULL OUTER JOIN):

يجمع نتائج كل من LEFT JOIN و RIGHT JOIN، حيث يتم إرجاع جميع السجلات من كلا الجدولين.

إذا لم يكن هناك تطابق، فسيتم ملء القيم غير الموجودة بـ NULL.

types_joins.thumb.webp.d21faf5ce09e1dfbd3ea0b1225450d9c.webp

  • 0
نشر

دمج البيانات مثل ربط قطع البازل، أي لدينا مجموعة من قطع البازل، كل قطعة تمثل جدولًا في قاعدة البيانات،  لكي تُكمل الصورة الكاملة، تحتاج إلى ربط هذه القطع معًا. هنا يأتي دور JOIN في SQL.

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

ويوجد أنواع لـ JOIN، أولها INNER JOIN مثل ربط قطعتين من البازل تتناسبان تمامًا معًا، ويعرض فقط الصفوف التي تتطابق قيمها في مفتاح الربط في كلا الجدولين.

  • مثل جدول الطلاب يحتوي على معلومات عن الطلاب (اسم الطالب، رقم الطالب).
  • جدول الدرجات يحتوي على معلومات عن درجات الطلاب (رقم الطالب، اسم المادة، الدرجة).
SELECT Students.Name, Grades.Subject, Grades.Grade
FROM Students
INNER JOIN Grades ON Students.StudentID = Grades.StudentID;

سيُظهر الاستعلام أسماء الطلاب والمواد التي درسها كل طالب والدرجات التي حصل عليها.

النوع الثاني هو LEFT JOIN مثل ربط قطعة من البازل مع قطعة أخرى وقد تكون هناك فراغات Null،  ويعرض جميع صفوف الجدول الأيسر، مع إمكانية عرض البيانات المتوافقة من الجدول الأيمن.

  • مثل جدول الطلاب يحتوي على معلومات عن الطلاب (اسم الطالب، رقم الطالب).
  • وجدول الأنشطة يحتوي على معلومات عن الأنشطة التي يشارك فيها الطلاب (رقم الطالب، اسم النشاط).
SELECT Students.Name, Activities.ActivityName
FROM Students
LEFT JOIN Activities ON Students.StudentID = Activities.StudentID;

النتيجة هي أسماء جميع الطلاب، مع عرض أسماء الأنشطة التي يشارك فيها كل طالب إن وجدت، وإن لم يشارك طالب في أي أنشطة، ستُظهر قيمًا فارغة (NULL) في عمود "اسم النشاط".

النوع الثالث هو RIGHT JOIN مثل ربط قطعة من البازل مع قطعة أخرى وقد تكون هناك فراغات Null،  ويعرض جميع صفوف الجدول الأيمن، مع إمكانية عرض البيانات المتوافقة من الجدول الأيسر.

  • مثل جدول الأنشطة يحتوي على معلومات عن الأنشطة التي يشارك فيها الطلاب (رقم الطالب، اسم النشاط).
  • وجدول الطلاب يحتوي على معلومات عن الطلاب (اسم الطالب، رقم الطالب).
SELECT Activities.ActivityName, Students.Name
FROM Activities
RIGHT JOIN Students ON Activities.StudentID = Students.StudentID;

نتيجة الاستعلام هي أسماء جميع الأنشطة، مع عرض أسماء الطلاب الذين يشاركون فيها إن وجدت، وفي حال لم يكن هناك طالب مرتبط بنشاط معين، ستُظهر قيمًا فارغة (NULL) في عمود "اسم الطالب".

النوع الأخير هو FULL JOIN مثل ربط جميع قطع البازل معًا، بغض النظر عن وجود فراغات، ويعرض جميع صفوف كلا الجدولين، سواء كانت متوافقة أم لا.

  • مثل جدول الطلاب يحتوي على معلومات عن الطلاب (اسم الطالب، رقم الطالب).
  • وجدول المعلمين يحتوي على معلومات عن المعلمين (اسم المعلم، رقم المعلم).
SELECT Activities.ActivityName, Students.Name
FROM Activities
RIGHT JOIN Students ON Activities.StudentID = Students.StudentID;

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

 

  • 0
نشر

لنفترض أن لدينا جدولين جدول للموظفين وآخر للأقسام كالتالي:

  • جدول الموظفين: لعرض معلومات كل موظف.
CREATE TABLE Employees (
    EmpID int,
    EmpName varchar(50),
    DeptID int
);
  • جدول الأقسام: لعرض الموظفين وأقسامهم.
SELECT Employees.EmpName, Departments.DeptName
FROM Employees
INNER JOIN Departments
ON Employees.DeptID = Departments.DeptID;

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

لاحظ RIGHT JOIN فهو يأخذ كل البيانات من الجدول الأيمن + البيانات المتطابقة من الجدول الأيسر ونستعمله عندما نريد معرفة كل الأقسام حتى لو لم يكن فيها موظفين بينما FULL JOIN فهو يأخذ كل البيانات من كلا الجدولين إضافة أنه يظهر NULL للقيم غير المتطابقة.

وهذا مثال لكود كيفية استعمال كل نوع كما شرحنا الآن لنبدأ ب INNER JOIN:

SELECT * FROM Table1 
INNER JOIN Table2 
ON Table1.id = Table2.id;
  • LEFT JOIN  أو (LEFT OUTER JOIN):
SELECT * FROM Table1 
LEFT JOIN Table2 
ON Table1.id = Table2.id;
  • RIGHT JOIN أو (RIGHT OUTER JOIN):
SELECT * FROM Table1 
RIGHT JOIN Table2 
ON Table1.id = Table2.id;
  • FULL JOIN أو (FULL OUTER JOIN):
SELECT * FROM Table1 
FULL OUTER JOIN Table2 
ON Table1.id = Table2.id;
  • ال CROSS JOIN: وهو يقوم بعمل ضرب ديكارتي (Cartesian product) بين الجدولين فيربط كل صف في الجدول الأول مع كل صف في الجدول الثاني كالتالي:
SELECT * FROM Table1 
CROSS JOIN Table2;

أي أننا يمكننا استخدام كل من:

  •  INNER JOIN عندما نريد فقط البيانات المتطابقة
  •  LEFT JOIN عندما نريد جميع البيانات من الجدول الأول حتى لو لم يكن لها تطابق
  •  RIGHT JOIN عندما نريد جميع البيانات من الجدول الثاني
  •  FULL JOIN للحصول على جميع البيانات من كلا الجدولين

لكن يجب أن نتجنب استخدام CROSS JOIN إلا في حالات خاصة لأنه ينتج عددا كبيرا من السجلات.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...