الفرق بين المراجعتين لصفحة: «SQL/inner join»
لا ملخص تعديل |
ط استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{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 |
---|---|---|---|---|
نعم | نعم | نعم | نعم | نعم |