JOIN עצמי
חלק מהיחידה יסודות במסלול ה-SQL של Coddy. שיעור 46 מתוך 72.
צירופים עצמיים הם סוגים שונים של צירופים. עד עכשיו דיברנו על צירופים של כמה טבלאות, אבל בצירופים עצמיים מצרפים טבלה לעצמה. דוגמה קלאסית לכך היא טבלה של עובדים.
| employee_id | employee_name | manager_id |
| 1 | Minke | 2 |
| 2 | Temur | 3 |
| 3 | Tatjana | 4 |
| 4 | Marinela |
לכל עובד יש מנהל, פרט למנהל הבכיר ביותר, וכל מנהל הוא גם עובד.
הבעיה: עבור כל עובד אנחנו רוצים לדעת את שם המנהל.
SELECT e2.employee_id, e2.employee_name, e1.employee_name as manager_name
FROM employees as e1
JOIN employees as e2 ON e1.employee_id = e2.manager_idאנחנו מבצעים צירוף בין אותה טבלה, אלא שפעם אחת אנחנו קוראים לה e1 ובפעם השנייה e2. הצירוף מתבצע בין השדות employee_id ו־manager_id.
התוצאה:
| employee_id | employee_name | manager_name |
|---|---|---|
| 1 | Minke | Temur |
| 2 | Temur | Tatjana |
| 3 | Tatjana | Marinela |
אתגר
בינוניהטבלאות והעמודות הזמינות:
friends:id,name,friend_id
מצאו זוגות של חברים שהם חברים הדדיים (חברות הדדית מתקיימת כאשר friend_id של אדם א׳ מצביע על אדם ב׳ וגם friend_id של אדם ב׳ מצביע על אדם א׳). הציגו את שמות שני החברים בשורה אחת. תנו לעמודות את השמות friend1 ו-friend2.
הערה: כללו בסעיף WHERE את התנאי f1.id < f2.id (f1 ו-f2 הם הכינויים של שני העותקים של הטבלה), כדי שלא ייכללו זוגות כפולים
נסו בעצמכם
-- חברו את הטבלה לעצמה כדי ששורה אחת תוכל להציג שני אנשים שונים
SELECT ____ AS friend1, ____ AS friend2
FROM friends f1
JOIN friends f2 ON ____
-- השאירו רק את הזוגות שמפנים זה לזה
WHERE ____ AND f1.id < f2.id;השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
2תנאים
יסודות התנאיםמילת המפתח ANDמילת המפתח ORמילת המפתח NOTשילוב של תנאים מרוביםסוגרייםערכים בוליאניים3פורמט החזרה ספציפי
ערכי Nullמיון תוצאות – חלק 1מיון תוצאות – חלק 2סיכום – חברת אבטחת סייברהגבלת מספר הרשומותסיכום – מפעל כלי רכב6אתגרי מבוא
חזרה – בחירות לפרלמנטחזרה – מעצר חשוד בידי המשטרהחזרה – כלי משקה בברחזרה – מהנדסים עמודות חדשותתרגלו בעצמכם: SQL אונליין