מדריך SQL זה מתמקד בפקודת ה Outer Join. מדריך זה הינו חלק מרשימת פוסטים הנוגעים לפקודת ה JOIN
ב SQL SERVER. כדי להגיע לפוסטים הנוספים ניתן להעזר בקישורים הבאים :
- שילוב טבלאות באמצעות Inner Join – בשילוב נתונים מטבלאות על סמך ערכים משותפים לשתי הטבלאות
- שילוב טבלאות באמצעות Outer Join – מתמקד בשילוב נתונים מטבלאות תוך הצגת כל הנתונים מהטבלה האחת ללא קשר לנתונים המוצגים בטבלה האחרת.
- שילוב טבלאות באמצעות Self Join – שילוב נתונים מאותה טבלה לעצמה.
OUTER JOIN
OUTER JOIN מאפשר לנו לשלב נתונים משתי טבלאות (או יותר) כאשר חלק מהנתונים אינם משותפים לשתי הטבלאות.
נשים לב כי יובל לא מופיע ומחלקת יחסי ציבור לא מופיעה, הסיבה לכך נעוצה בצורת ההשוואה בין הטבלאות. הרי כדי להשוות בין שתי טבלאות אלו אנו נכתוב :
ON dep.department_id = emp.department_id
כלומר, כל עוד יש שיוויון בין הערכים של עמודת מספר מחלקה בטבלת עובדים לערכים של עמודת מספר מחלקה בטבלת מחלקות יש להציג את הנתונים.
v יובל לא מופיע כי מספר מחלקתו היא NULL ולא ניתן להשוות NULL לאף ערך בעמודת מספר מחלקה בטבלת מחלקות.
v מחלקת יחסי ציבור לא מופיעה משום שמספרה הוא 30 ולא ניתן להשוות את ערך זה לאף ערך מעמודת מספר מחלקה בטבלת עובדים.
כדי להציג את כל הנתונים מצד אחד (שמאל או ימין) של הטבלה כולל אלו שאין להם נתונים להשוואה מהצד השני, נשתמש ב–Right OUTER JOIN או Left OUTER JOIN
Right OUTER JOIN
טבלת עובדים לפי ההדגמה שלנו מופיעה בצד הימני של משפט ה–JOIN :
FROM departments dep RIGHT OUTER JOIN employees emp (left) (right)
אם נרצה להציג את כל העובדים אשר קיימים בטבלה כולל אלו אשר אין להם מחלקה
נשתמש בביטוי Right OUTER JOIN :
SELECT emp.last_name , emp.salary , dep.department_name FROM departments dep RIGHT OUTER JOIN employees emp ON dep.department_id = emp.department_id
שילוב זה בין הטבלאות יוביל להצגת כל העובדים, כולל אלו אשר אין להם מחלקה (6 שורות סה"כ):
Left OUTER JOIN
טבלת מחלקות לפי ההדגמה שלנו מופיעה בצד השמאלי של משפט ה–JOIN:
FROM departments dep RIGHT OUTER JOIN employees emp (left) (right)
אם נרצה להציג את כל המחלקות אשר קיימות בטבלה כולל אלו אשר אין להן עובדים נשתמש בביטוי Left OUTER JOIN:
SELECT emp.last_name , emp.salary , dep.department_name FROM departments dep LEFT OUTER JOIN employees emp ON dep.department_id = emp.department_id
שילוב זה בין הטבלאות אלו יוביל להצגת כל המחלקות, כולל אלו אשר אין בהן עובדים (6 שורות סה"כ):
! כדי להציג את כל הנתונים משתי הטבלאות (גם את כל העובדים אשר לא שייכים לאף מחלקה וגם את כל המחלקות אשר אין בהן עובדים), נשתמש בביטוי FULL OUTER JOIN.
נערך ע”י אלעד פלג