A self join in SQL Server is a useful statement to use for demonstrating relationships within a single SQL Server table database. In this tutorial, I’ll show you when and how to use an SQL self join. To do that, I’ll be detailing an sql self join example where I’ll list the supervisors for all employees in the Northwind Employees sample table.
מה למעשה החיבור עצמי בSQL עבור?
החיבור עצמיהוא סוג מיוחד ודי נדיר שלחיבור בSQL. בעוד שחיבורים רבים כמו INNER JOIN מקשרים בין שתי עוד טבלות בעזרת עמודות משותפות, חיבור עצמי קושר טבלה לעצמה. בניגוד לפעולות החיבור הרגילות, אותה טבלה משמשת כטבלה שמימינית וכטבלה שמאחורית באות הפעולה החיבורית.
לדוגמה, אתה אולי תשתמש בחיבור עצמי כדי למצוא את כל העובדים שיש אותם המנהל. פה אתה אולי תואיל את מספר המנהל עם מספר עובד. אולי תשתמש בחיבור עצמי כדי למצוא את כל הלקוחות שיש להם הזמנים עבור אותם המוצרים.
דוגמה לחיבור עצמי בSQL
השאלה הבאה מראה דוגמה לקוד SQL עבור חיבור עצמי בעזרת הבסיס הדמות הנורתווינד. השם הטבלה הוא 'עובדים' וכפי שאתה יכול לחשוב, היא מכילה מידע על העובדים.
USE Northwind SELECT e1.EmployeeID, e1.FirstName, e1.LastName, e1.ReportsTo, e2.FirstName as ManagerFirstName, e2.LastName as ManagerLastName FROM Employees e1 LEFT OUTER JOIN Employees e2 on e1.ReportsTo = e2.EmployeeID
דוגמה זו לחיבור עצמי בSQL תראה את שמות המנהלים עבור כל עובד.
- כאן, אנו מצטרפים את הטבלה Employees אל עצמה באמצעות עמודת 'ReportsTo' ועמודת 'EmployeeID'. מאחר שהמנהלים הם גם עובדים, הם מופיעים באותה טבלת Employees.
- במקרה זה, הערכים בעמודת 'ReportsTo' חייבים להתאים לערכים בעמודת 'EmployeeID'.
- בקבוצת התוצאות, עמודות 'FirstName' ו-'LastName' של הטבלה שנצמדה לעצמה תועברו לשמות 'ManagerFirstName' ו 'ManagerLastName'.
- טבלת EmployeeID משתמשת בכינוי טבלה 'e1' בעוד שהטבלה שנצמדה לעצמה משתמשת בכינוי טבלה 'e2'.
- תחביר ה- SQL הממשי לשימור עצמי הוא LEFT OUTER JOIN. ה- ON clause מציין את העמודות שישמשו בשימור עצמי.
ניתן לראות את תוצאות השאילתת שימור העצמי בתמונה הבאה:

שאילתת זו תחזיר קבוצת תוצאות הכוללת את EmployeeID, FirstName, LastName, ReportsTo (EmployeeID), ManagerFirstName ו- ManagerLastName. אם תבחנו בקבוצת התוצאות, תוכלו לראות כי אנדרו פולר מספר עבודה 2 וכי הוא גם המפקח על עובדים עם מספרי עובדים 1, 3, 4, 5 ו- 8. אנדרו פולר לא מדווח לאף אחד אחר, לכן הערכים שלו ב- ReportTo וב- ManagerFirstName ו- ManagerLastName הם כולם NULL.
מתי עליך להשתמש בשימור עצמי של SQL?
אתה צריך באמת להשתמש ב-Join עצמי כאשר טבלת SQL מפנה לנתונים בתוכה. כפי שהסברתי במאמר זה, מקרה שימוש נהדר עבור Join עצמי ב-SQL יכול להיות טבלה עם נתוני עובדים שבכל שורה מכילה מידע על עובדים ועל מנהליהם. במקרה כזה, Join עצמי מאפשר לך לחשוף בקלות מידע רלוונטי על אופן פעולת הארגון.
Source:
https://petri.com/sql-self-join/