בשפת SQL, באמצעות JOIN ניתן להשתמש על מנת לשלב שורות מטבלאות שונות על ידי שימוש בעמודה אשר מקשרת ביניהם. במאמר זה נעבור על סוגי ה-JOIN הקיימים, ונראה כיצד ניתן להשתמש בכל אחד מהם.
בשפת SQL קיימים סוגי ה-JOIN הבאים:
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- FULL JOIN
- CROSS JOIN
INNER JOIN
ב-INNER JOIN נוכל להשתמש על מנת שיחזיר לנו רשומות בעלות ערכים זהים מטבלאות שונות.
שימו לב לשתי הטבלאות שלפניכם:
Student
StudentCourse
אם נרצה לאחד בין הטבלאות כך שנוכל לראות את ה-CourseID של כל קורס שבו לומד כל תלמיד, נוכל להשתמש ב-INNER JOIN על מנת לקשר בין הטבלאות על ידי עמודת ה-StudentID:
SELECT StudentCourse.CourseId, StudentCourse.CourseName, Student.FirstName, Student.LastName, Student.Age FROM Student INNER JOIN StudentCourse ON Student.StudentId = StudentCourse.StudentId
INNER JOIN Output
LEFT JOIN
ב-LEFT JOIN נוכל להשתמש כאשר נרצה להוסיף את כל השורות של הטבלה השמאלית שתואמות לשורות מהטבלה הימנית.
* שורות אשר אין להם שורה תואמת יחזירו לנו Null
* LEFT JOIN יכול להיקרא גם RIGHT OUTER JOIN
SELECT Student.FirstName, StudentCourse.CourseId FROM Student LEFT JOIN StudentCourse --OUTER RIGHT JOIN-- ON StudentCourse.StudentId = Student.StudentId
LEFT JOIN Output
RIGHT JOIN
בדיוק כפי שעשינו LEFT JOIN כך נוכל לבצע גם RIGHT JOIN שהיא בדיוק אותה פעולה אבל ההיפך.
ב-RIGHT JOIN נוכל להשתמש כאשר נרצה להוסיף את כל השורות של הטבלה הימנית שתואמות לשורות מהטבלה השמאלית.
* שורות אשר אין להם שורה תואמת יחזירו לנו Null
* RIGHT JOIN יכול להיקרא גם LEFT OUTER JOIN
SELECT Student.FirstName, StudentCourse.CourseId FROM Student RIGHT JOIN StudentCourse --OUTER LEFT JOIN-- ON StudentCourse.StudentId = Student.StudentId
RIGHT JOIN Output
FULL JOIN
FULL JOIN מחזיר לנו את התוצאה על ידי שילוב תוצאות LEFT JOIN ו-RIGHT JOIN, גם כאן, שורות אשר אין להן שורה תואמת יחזירו לנו Null.
שימו לב ל-Code Snippet הבא:
SELECT Student.StudentId, Student.FirstName, StudentCourse.CourseId, StudentCourse.CourseName FROM Student FULL JOIN StudentCourse ON StudentCourse.StudentId = Student.StudentId
FULL JOIN Output
CROSS JOIN
ב-CROSS JOIN נוכל להשתמש אם נרצה להחזיר את כל השורות משני הטבלאות.
SELECT Student.StudentId, Student.FirstName, StudentCourse.CourseId, StudentCourse.CourseName FROM Student CROSS JOIN StudentCourse
כפי שניתן לראות, תוצאת השאילתה היא שהוצלבו הטבלאות כך שעבור כל תלמיד נוספו שיעורים, לפי מספר השיעורים שלומד כל תלמיד…
אך אם היינו רוצים לקבל החזר דומה לזה שקיבלנו מה-FULL JOIN, נוכל להוסיף תנאי WHERE:
SELECT Student.StudentId, Student.FirstName, StudentCourse.CourseId, StudentCourse.CourseName FROM Student CROSS JOIN StudentCourse WHERE student.StudentId = StudentCourse.StudentId
CROSS JOIN WHERE Output
לקריאה מורחבת על JOIN באתר של מייקרוסופט יש ללחוץ כאן
להורדת והתקנת Microsoft SQL Server יש ללחוץ כאן