מדריך SQL זה מתמקד בפקודת ה Outer Join. מדריך זה הינו חלק מרשימת פוסטים הנוגעים לפקודת ה JOIN
ב SQL SERVER. כדי להגיע לפוסטים הנוספים ניתן להעזר בקישורים הבאים :

  • שילוב טבלאות באמצעות Inner Join – בשילוב נתונים מטבלאות על סמך ערכים משותפים לשתי הטבלאות
  • שילוב טבלאות באמצעות Outer Join – מתמקד בשילוב נתונים מטבלאות תוך הצגת כל הנתונים מהטבלה האחת ללא קשר לנתונים המוצגים בטבלה האחרת.
  • שילוב טבלאות באמצעות Self Join – שילוב נתונים מאותה טבלה לעצמה.

 

OUTER 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 שורות סה"כ):

פקודת RIGHT OUTER JOIN

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 שורות סה"כ):

פקודת LEFT OUTER JOIN

!         כדי להציג את כל הנתונים משתי הטבלאות (גם את כל העובדים אשר לא שייכים לאף מחלקה וגם את כל המחלקות אשר אין בהן עובדים), נשתמש בביטוי FULL OUTER JOIN.

 

נערך ע”י אלעד פלג