Join (SQL)

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

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

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

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

דוגמאות

עבור הטבלאות:

Employee
LastNameDepartmentID
Rafferty31
Jones33
Steinberg33
Robinson34
Smith34
JohnNULL
Department
DepartmentIDDepartmentName
31Sales
33Engineering
34Clerical
35Marketing

בדוגמאות הללו פרדיקט האיחוד ידרוש תמיד שוויון בין שדה DepartmentID של הטבלה הראשונה לזה של הטבלה השנייה, אחרת נקבל גם רשומות שלא מעניינות אותנו, כגון:

Employee.LastNameEmployee.DepartmentIDDepartment.DepartmentNameDepartment.DepartmentID
Robinson34Engineering33

Inner join

SELECT *
FROM   employee 
       INNER JOIN department 
          USING (DepartmentID);
Employee.LastNameEmployee.DepartmentIDDepartment.DepartmentNameDepartment.DepartmentID
Robinson34Clerical34
Jones33Engineering33
Smith34Clerical34
Steinberg33Engineering33
Rafferty31Sales31

Left outer join

התוצאה של איחוד עם left outer join (או בקיצור left join) עבור טבלאות A ו-B תכיל תמיד את כל הרשומות מהטבלה ה"שמאלית", אף אם תנאי האיחוד לא מוצא כל רשומה מתאימה בטבלה ה"ימנית" (B).

SELECT *  
FROM   employee  LEFT OUTER JOIN department  
          ON employee.DepartmentID = department.DepartmentID;
Employee.LastNameEmployee.DepartmentIDDepartment.DepartmentNameDepartment.DepartmentID
Jones33Engineering33
Rafferty31Sales31
Robinson34Clerical34
Smith34Clerical34
JohnNULLNULLNULL
Steinberg33Engineering33

Right outer join

דומה לLeft outer join אך בכיוון ההפוך.

SELECT * 
FROM   employee RIGHT OUTER JOIN department 
          ON employee.DepartmentID = department.DepartmentID;
Employee.LastNameEmployee.DepartmentIDDepartment.DepartmentNameDepartment.DepartmentID
Smith34Clerical34
Jones33Engineering33
Robinson34Clerical34
Steinberg33Engineering33
Rafferty31Sales31
NULLNULLMarketing35

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

This article is issued from Hamichlol. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.