שיעורי מודול (1/4)
צירוף שני שולחנות: INNER JOIN
עד עכשיו קראנו טבלה אחת בכל פעם. בעולם האמיתי, לעומת זאת, נתונים כן
מפוזר על פני טבלאות קשורות מרובות: במערך הנתונים שלנו, לדוגמה, כל אחת מהן
לעובד יש department_id שמפנה לטבלה departments. לראות
את שם המחלקה (ולא רק id שלה) אנחנו צריכים להצטרף ל-
שני שולחנות. האופרטור שעושה זאת נקרא JOIN.
התחביר הבסיסי
SELECT columns
FROM table_a
JOIN table_b ON table_a.x = table_b.y;קרא באנגלית: "קח table_a, צרף אליו table_b על ידי התאמה של כל
שורה שבה table_a.x שווה ל-table_b.y". התוצאה היא ווירטואלי חדש
טבלה עם העמודות של שניהם.
-- For each employee, also show the name of their department:
SELECT employees.first_name,
employees.last_name,
departments.name AS dipartimento
FROM employees
JOIN departments ON employees.department_id = departments.id;החלק שאחרי ON נקרא תנאי החיבור: זה מה שאומר את
מנוע "שתי השורות האלה הן בערך אותו הדבר, יש להתאים אותן". ב-
רוב המכריע של המקרים זה שוויון בין מפתח ראשי לזר
מפתח (כאן departments.id וemployees.department_id).
INNER JOIN, בפירוט
מילת המפתח המלאה היא INNER JOIN, אבל JOIN בפני עצמו הוא הסטנדרט
מילה נרדפת. "פנימי" פירושו שרק השורות שיש להן התאמה בשתי
טבלאות מוחזרות:
- אם לעובד יש
department_id = NULL, הם לא יופיעו ב- תוצאה; - אם למחלקה אין עובדים, זה לא יופיע בתוצאה.
שמות עמודות מתאימים
כאשר לשתי טבלאות יש עמודות עם אותו שם (כאן לשתיהן יש id, וכן
לשניהם יש name אם אתה חושב על זה), אתה צריך לציין איזו טבלה
עמודה מגיעה מכתיבת table.column. כדי להימנע מלחזור על שמות ארוכים,
לעתים קרובות נעשה שימוש בכינויים (ראית אותם במודול 2):
SELECT e.first_name, e.last_name, d.name AS dipartimento
FROM employees AS e
JOIN departments AS d ON e.department_id = d.id;AS הוא אופציונלי גם כאן: FROM employees e פועל אותו הדבר.
נסה את זה
עבור כל עובד במחלקת אינג'נריה, הצג שם פרטי (שם_שם), שם משפחה (שם_משפחה) ועיר המחלקה (מחלקות.עיר). שלוש עמודות, שורה אחת לעובד.
הצג רמז
השלם את תנאי ה-ON עם השוויון בין e.department_id ל-d.id, ולאחר מכן בחר d.city בתור העמודה השלישית.
הפתרון זמין לאחר 3 ניסיונות
סקירת התרגיל
רשימת שם פרטי (שם_שם) ושם משפחה (שם_משפחה) של כל העובדים שעובדים במחלקה שבסיסה במילאנו. סנן על departements.city, לא על שם המחלקה.
הצג רמז
אותו JOIN כמו התרגיל הקודם, אבל סנן על d.city = 'Milano' במקום על שם המחלקה.
הפתרון זמין לאחר 3 ניסיונות