Join (SQL)

ב-SQL, Join היא פסקה (חלק משאילתא) לאיחוד שדות בין שתי טבלאות על ידי ערכים המשותפים לשתיהן.

תקן ה-ANSI ל-SQL מגדיר ארבעה סוגים של איחוד: פנימי (Inner), חיצוני (Outer), ימינה (Right) ושמאלה (Left).
על המתכנת לכתוב פרדיקט עבור האיחוד כדי לזהות את הרשומות שיש לאחד. ברשומות בהן הפרדיקט חיובי, הרשומה מתאחדת לטבלת התוצאה בהתאם לפורמט.

איחוד פנימי (Inner Join) הוא האיחוד הנפוץ ביותר ביישומים ומשתמשים בו בדרך כלל בתור איחוד ברירת מחדל. איחוד פנימי יוצר טבלה חדשה על ידי שילוב שדות של שתי טבלאות המבוסס על פרדיקט האיחוד.

פעולת Join מקבילה במידה מסוימת למכפלה קרטזית בתורת הקבוצות - התוצאה היא תת-קבוצה מסוימת של הטבלה של "כל הזוגות הסדורים של שורה מהטבלה הראשונה ושורה מהטבלה השנייה".

 דוגמאות 
עבור הטבלאות:
+Employee  LastName   DepartmentID Rafferty 31 Jones  33 Steinberg  33 Robinson  34  Smith 34 John  NULL+Department   DepartmentID  DepartmentName  31            Sales   33            Engineering  34            Clerical  35            Marketing

בדוגמאות הללו פרדיקט האיחוד ידרוש תמיד שוויון בין שדה DepartmentID של הטבלה הראשונה לזה של הטבלה השנייה, אחרת נקבל גם רשומות שלא מעניינות אותנו, כגון: 
 Employee.LastName   Employee.DepartmentID  Department.DepartmentName  Department.DepartmentID Robinson  34  Engineering  33

 Inner join 

 SELECT *
FROM   employee 
       INNER JOIN department 
          USING (DepartmentID); Employee.LastName   Employee.DepartmentID  Department.DepartmentName  Department.DepartmentID Robinson  34  Clerical  34 Jones  33  Engineering  33 Smith  34  Clerical  34 Steinberg  33  Engineering  33 Rafferty  31  Sales  31
 Left outer join 
התוצאה של איחוד עם left outer join (או בקיצור left join) עבור טבלאות A ו-B תכיל תמיד את כל הרשומות מהטבלה ה"שמאלית", אף אם תנאי האיחוד לא מוצא כל רשומה מתאימה בטבלה ה"ימנית" (B).

 SELECT *  
FROM   employee  LEFT OUTER JOIN department  
          ON employee.DepartmentID = department.DepartmentID; Employee.LastName   Employee.DepartmentID  Department.DepartmentName  Department.DepartmentID Jones  33  Engineering  33 Rafferty  31  Sales  31 Robinson  34  Clerical  34 Smith  34  Clerical  34 John  NULL  NULL  NULL Steinberg  33  Engineering  33

 Right outer join 
דומה ל־Left outer join אך בכיוון ההפוך.
 SELECT * 
FROM   employee RIGHT OUTER JOIN department 
          ON employee.DepartmentID = department.DepartmentID; Employee.LastName   Employee.DepartmentID  Department.DepartmentName  Department.DepartmentID Smith  34  Clerical  34 Jones  33  Engineering  33 Robinson  34  Clerical  34 Steinberg  33  Engineering  33 Rafferty  31  Sales  31 NULL  NULL  Marketing  35

 קישורים חיצוניים 

 מדריך לשפת SQL - רם קדם

קטגוריה:מסדי נתונים