
+ ורווח, ובאותה שורה מוצג גם שם הבוס.E1 ו-E2. הכינויים מתנהגים כאילו מדובר בשתי טבלאות נפרדות, גם אם הן זהות.E1.ReportsTo = E2.EmployeeID. E1 הוא העובד, ו-E2 הוא הבוס שלו, כי מספר הבוס שבשורה של העובד שווה למספר העובד בשורה של הבוס.SELECT * רואים שבכל שורה מופיעים העובד והבוס שלו.FROM Employees E1 JOIN Employees E2 ON E1.ReportsTo = E2.EmployeeID, E1.LastName + ' ' + E1.FirstName.הטקסט המלא של הדקות הראשונות בהרצאה «פקודת Select עם Self-Join» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום וברוכים הבאים להרצאה על ג'ויין מיוחד שנקרא סלף ג'ויין, שזה סוג מיוחד של ג'ויין שאנחנו הולכים לראות אותו.
זה אומר ג'ויין עם עצמך. נפתח sql management studio ונתחבר לשרת שלנו ונראה מקרה מיוחד שבו טבלה צריכה להתחבר לעצמה.
מה זאת אומרת? לדוגמה בטבלת עובדים, עובדים employees, אתם תראו שבטבלה הזאת יש לנו עובד כזה, כזה כזה השם שלו שמשפחה שמשפחה שם פרטי תפקיד שלו כל מיני שטויות מתי הוא נולד מתי לקחו אותו לעבודה כתובת מגורים שלו אבל יש לו גם הבוס שימו לב ריפורטס טור זה מי הבוס שלו והבוס של עובד מספר 6 זה עובד מספר 5 העובד מספר 8 הבוס שלו זה עובד מספר 2 אוקיי הבנתם
אז יש לנו בעצם שתי עמודות שאני רוצה להראות לכם בעצם שם עובד זה לא מעניין אותי ומי הבוס שלו הנה ככה יהיה לנו הכי יפה לראות את זה הכי יפה לראות אז אנחנו רואים פה מספר עובד שם פרטי של משפחה ומי הבוס שלו קודם כל שם פרטי של משפחה אני רוצה שזה יהיה כמו עמודה אחת ולא כמו שתי עמודות אז אני יכול לעשות פלוס ולחבר שתי עמודות
לעמודה אחת בתוך סלקט אתם רואים הוא יעשה לי אותם עכשיו כעמודה אחת רק אני רוצה להוסיף פה רווח אתם רואים הוא הדביק אותם יותר מדי אני עושה אמרת לו העמודה הזאת זה last name ועוד רווח ועוד first name יופי עכשיו אז שם עובד אני רוצה עכשיו לעשות ליד שם כל עובד שם של הבוס שלו עובד הזה הבוס שלו זה עובד מספר 2 זאת אומרת אני רוצה לראות דוד ננסי לידה פה לא
כתוב 2 פה כתוב פיולר אנדרי כי זה עובד מספר 2 השתיים הזה זה השתיים הזה וחמש זה זה זאת אומרת קינג רוברט המנהל שלו זה עובד מספר חמש הוא בוצ'ן סטיבן אוקיי סטיבן זאת אומרת למעשה אני רוצה לצרף את הטבלה הזאת עם עצמה שוב לפי זה שהשדה הזה זהה בקופי של עצמו לשדה הזה אוקיי זה קצת מסובך אבל נראה לי שתבינו
בסוף אז איך אני עושה את זה אני עושה את זה E1 אני נותן לטבלה כינוי E1, אני חייב לתת לה כינוי join.
אותה טבלה, שימו לב, אני עושה join עם עצמו. אני עושה join עם עצמו וקורא לאותה טבלה E2. זאת אומרת, הוא עושה join ואין משכפל בזיכרון את הטבלה הזאת עם פלואי, אבל נותן לה כינוי E2. אז E1 זה המקורי, join עם E2, כאשר שדה ב-E1 שנקרא, איך הוא נקרא השדה המקורי לפני השטויות שכתבתי?
אמפלואי איידי נכון אמפלואי איידי לא בוס איידי רפורטס 2 רפורטס 2 בטבלה המקורית בטבלה המקורית הנה אולי יהיה לכם ככה יותר ברור אני מסדר לכם את זה בטבלה המקורית שדה נקרא זה שווה ל-e2 נקודה איפה שרפורטס 2 פה במקורי שווה למה לאמפלואי איידי בקופי לאמפלואי בקופי למעשה אני עושה join כאילו זה טבלאות שונות לחלוטין אני עושה עם פלואי עם
פלואי אבל זה לא מעניין אותי מבחינתי זה טבלאות שונות אחד נקראת E1 השנייה נקראת E2 זה שהם דומים והשמות שלהם שזה אותם נתונים זה לא מעניין מבחינתי יש לי שני קופיס כאשר אני מחבר ביניהם שזה מתחבר לזה אם זה מסבך אתכם תחשבו אל תחשבו שיש פה טבלה אחת תחשבו שיש פה סלקט כוכבית פרום פעמיים הנה אני מראה לכם את זה פעמיים הנה אני עושה
את זה בכחול F5 כאילו יש לי פה שתי טבלאות כאלו לא משנה שזה שתי טבלאות ואני אומר תקשיב תחבר לאותן ככה איפה שהשתיים פה תחבר עם השתיים פה שתיים פה תחבר עם השתיים פה הטבלה למעלה קראתי לה E1 הטבלה למטה קראתי לה E2 בדיוק כמו ג'וין רגיל זה רק מבלבל אתכם שזה בדיוק אותה טבלה זה מבלבל אתכם וזה בדיוק מה שאני עושה פה אני אומר טבלת אימפלואי נקראת E1
אותה טבלת אימפלואי הקופי שלה נקרא E2 ותחבר אותם לפי שדה ריפורטס 2 שווה לאמפלואי ID. ריפורטס 2, ריפורטס 2 שווה לאמפלואי ID. ואז תראה לי דבר כזה, תראה לי מתוך E2 את ה-First ו-Last name, זה נקרא שם בוס, וב-E1 אותם נתונים זה שם עובד.
זאת אומרת, בטבלת E1, שזה העליונה, זה שם עובד, אתם רואים? שם עובד, ובטבלת E2 זה בעצם השם של הבוס שלו.
אני יודע שזה מה זה מבלבל אבל תסתכלו על זה טוב ואתם תתחילו להבין את זה לאט לאט E2 E2 Join E2 Employee ID Ambiguity זה זה זה לא צריך מה יש לנו פה פסיק מיותר אל תיבהלו אם זה לא עובד אז מתקנים וזה באמת הצליח חבר'ה תראו קיבלתי שם עובד והבוס שלו חבר'ה כשאני עושה Join אני לוקח