الفرق بين المراجعتين لصفحة: «SQL/inner join»

من موسوعة حسوب
< SQL
لا ملخص تعديل
 
ط استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}'
سطر 299: سطر 299:
* [https://www.sqlite.org/syntax/join-operator.html توثيق INNER JOIN في محرك SQLite]
* [https://www.sqlite.org/syntax/join-operator.html توثيق INNER JOIN في محرك SQLite]
* [https://msdn.microsoft.com/en-us/library/zt8wzxy4.aspx?f=255&MSPPError=-2147217396 توثيق INNER JOIN في محرك SQLServer]
* [https://msdn.microsoft.com/en-us/library/zt8wzxy4.aspx?f=255&MSPPError=-2147217396 توثيق INNER JOIN في محرك SQLServer]
[[تصنيف:SQL]]
[[تصنيف:SQL|{{SUBPAGENAME}}]]
[[تصنيف:SQL Join]]
[[تصنيف:SQL Join|{{SUBPAGENAME}}]]

مراجعة 15:38، 28 يناير 2018

يُستخدم هذا النوع من الربط ما بين جدولين (أو أكثر) وذلك لتحديد بعض السجلات من الجدول اليساري والجدول اليميني بحيث تحقق شرط الربط، وتكون له البنية العامّة الآتية:

SELECT column-names
FROM table-name1 
[INNER] JOIN table-name2 
ON column-name1 = column-name2

وكما يُلاحظ أن وجود كلمة INNER اختياريّ لأن الربط الداخلي هو الحالة الافتراضية في الربط.

مثال

إن كانت قاعدة بيانات أحد المراكز التعليمية تحتوي على الجداول الآتية:

الجدول الأول: جدول الطلاب students

(المفتاح الأولي فيه هو عمود StudentID والمفتاح الثانوي هو عمود CourseID للربط مع جدول الدورات التدريبية)

RegDate CourseID LastName FirstName StudentID
‎07-JUL-2017 0206 Najjar Rama 1147
‎08-NOV-2017 0604 Kordi Jenan 1148
‎07-JUL-2017 0206 Bitar Rahaf 1149
‎20-AUG-2017 0607 Taweel Farah 1150
‎08-NOV-2017 0610 Arab Rami 1151
‎24-OCT-2017 0803 Akkad Aya 1152
‎08-NOV-2017 0504 Haddad Abed 1153
‎20-AUG-2017 0801 Fares Tasneem 1154
‎24-OCT-2017 0607 Hamsho Monther 1155
‎30-SEP-2017 0607 Abd Allah Hiba 1156
‎07-JUL-2017 0509 Khatib Mohammad 1157
‎20-AUG-2017 0801 Sharif Ibrahim 1158
‎24-OCT-2017 0802 Fehmi Hanin 1159
‎20-AUG-2017 0204 Zein Loujain 1160
‎08-NOV-2017 0503 Helali Ammar 1161

الجدول الثاني: جدول الدورات التدريبية courses

(المفتاح الأولي فيه هو عمود CourseID والمفتاح الثانوي هو عمود DepartmentID للربط مع جدول الأقسام)

CourseID Course Lecturer DepartmentID
0204 English (Adv)‎ Dr. Reem Hadi EN01
0206 English (Int)‎ Dr. Shadi Balid EN01
0211 English (TOEFL)‎ Dr. Firas Abd EN02
0604 Artificial Intelligence Eng. Nasser Sharif IT01
0607 Networks Eng. Amal Safi IT01
0610 ICDL Eng. Salem Najm IT01
0703 SQL Programming Eng. Nasser Sharif IT02
0704 FrontEnd Programming Eng. Amal Safi IT02
0801 Photoshop Design Mr. Maher Siraj IT03
0802 Illustrator Design Ms. Nadia Taleb IT03
0803 UI Design Mr. Maher Siraj IT03

الجدول الثالث: جدول الأقسام departments

(المفتاح الأولي فيه هو DepartmentID)

Head DepatementName DepartmentID
Dr. Firas Abd General English EN01
Dr. Saer Raslan Advanced English EN02
Dr. Osama Najjar Information Technology IT01
Eng. Amal Safi Programming IT02
Eng. Fares Ahmad Graphic Design IT03

فإن تنفيذ الاستعلام الآتي:

SELECT StudentID, FirstName, Course, Lecturer
FROM students st
INNER JOIN courses co
ON st.CourseID = co.CourseID;

سيُظهر السجلات من الجدول students (والذي سُمي باسم st ضمن الشيفرة) والجدول courses (والذي سُمي باسم co ضمن الشيفرة) بالربط بينهما داخليًا عبر العمود CourseID لتظهر النتائج الآتية:

Lecturer Course FirstName StudentID
Dr. Shadi Balid English (Int)‎ Rama 1147
Eng. Nasser Sharif Artificial Intelligence Jenan 1148
Dr. Shadi Balid English (Int)‎ Rahaf 1149
Eng. Amal Safi Networks Farah 1150
Eng. Salem Najm ICDL Rami 1151
Mr. Maher Siraj UI Design Aya 1152
Mr. Maher Siraj Photoshop Design Tasneem 1154
Eng. Amal Safi Networks Monther 1155
Eng. Amal Safi Networks Hiba 1156
Mr. Maher Siraj Photoshop Design Ibrahim 1158
Ms. Nadia Taleb Illustrator Design Hanin 1159
Dr. Reem Hadi English (Adv)‎ Loujain 1160

ويُلاحظ أنه لم تظهر كافة سجلات الطلاب إذ استُثني الطلاب الذين لديهم دورات تدريبية غير موجودة في جدول الدورات التدريبية (مثل الطالب Abed Haddad)، وكذلك لم تظهر الدورات التدريبية التي لا يوجد فيها أي طلاب مسجلين (مثل دورة SQL Programming).

التوافقية

SQLServer SQLite Oracle PostgreSQL MySQL
نعم نعم نعم نعم نعم

مصادر