SQL SELF JOIN

בניגוד לכל הפרקים הקודמים שעסקו ב - Joins למיניהם ובהם הדגש היה על כך ש - Join היא פעולה שעושים בין שתי טבלאות, הרעיון שמאחורי SELF JOIN שונה מבחינה זו שמדובר ב - Join בין טבלה לבין עצמה. כל סוגי ה - JOIN שעליהם למדנו ניתנים בעצם למימוש במקום על שתי טבלאות נפרדות על טבלה אחת. נשמע מוזר? למה בכלל צריך לחבר בין טבלה לבין עצמה? אפשר הרי להשתמש ישירות בטבלה לא? אז זהו, שלא. לפעמים, לעתים רחוקות, אנחנו צריכים לעשות פעולות על טבלה ש - SELF JOIN פשוט יהפוך את החיים שלנו לקלים יותר, אם נרצה לממש אותם.

על מנת להמחיש זאת טוב יותר הבה נשתמש בטבלה הבאה ששמה בבסיס הנתונים יהיה Ovdim ואשר תכיל את שמות כל העובדים, את ה - ID שלהם ואת ה - ID של המנהל של כל אחד מהם. גם המנהלים וגם העובדים יהיו באותה טבלה. הטבלה שלנו תיראה כך:

M_ID Name ID
פזית לוי 11
14 אשר גולד 12
11 שלמה דגני 13
12 יוסי דהן 14

עתה, נניח שאנו מתבקשים לשלוף רשימה של שמות כל העובדים בחברה ושל שמות המנהלים הישירים שלהם. הבעיה היא ששמות המנהלים והעובדים נמצאים באותה טבלה ובאותה שורה לא נמצאים שמות המנהלים אלא רק מספר ה - ID שלהם, כיצד אם כן נוכל לשלוף את הרשימה?

דוגמה לשאילתה הפותרת את הבעיה באמצעות SELF JOIN:

SELECT O.Name as Oved, e.Name as Menahel FROM Ovdim as O SELF JOIN Ovdim as e ON o.ID = e.M_ID;

תוצאות השאילתה שבדוגמה תהיינה:

Menahel Oved
Null פזית לוי
יוסי דהן אשר גולד
פזית לוי שלמה דגני
אשר גולד יוסי דהן

הערה: שימו לב לתא המסומן בירוק. לפזית לוי אין מנהל ולכן השאילתה החזירה NULL.


 
© 2010-2013  www.Devschool.co.il | מדיניות פרטיות | תנאי שימוש