פקודת Join מאפשרת לנו לשלב אינפורמציה ממספר טבלאות. במדריך SQL זה הראשון בסדרה, אנו נעסוק בטכניקות השונות לשילוב נתונים ממספר טבלאות לכדי הצגתם בטבלה אחת, במדריך SQL זה נבין לעומק את הלוגיקה העומדת מאחורי שילוב הטבלאות ואת טכניקת השילוב הבסיסית ביותר – .Equi Join
הדוגמאות הבאות מתבססות על תחביר ה JOIN ה NOT ANSI, ניתן להשתמש בפוסט הבא כדי לעמוד על ההבדלים בינו לבין התחביר ה ANSI
לעתים, הנתונים אותם נרצה להציג נמצאים בשתי טבלאות או יותר, לדוגמא :
שני עקרונות חשובים לשילוב בין טבלאות:
v על מנת לקשר בין שתי טבלאות או יותר יש צורך בערכים משותפים (מספר מחלקה בדוגמא זו) או קשר הגיוני מסויים.
v על מנת לקשר בין שתי טבלאות יש צורך להחליט על תנאי הקישור. בדוגמא שהוצגה הקשר היה על סמך השוואה (אם מספר המחלקה בטבלת מחלקות שווה למספר המחלקה בטבלת עובדים הרי שהעובד שייך למחלקה זו).
Equi Join – שילוב 2 טבלאות
Equi – מלשון Equal, משום שהשילוב נעשה על סמך אופרציית השוואה.
SELECT שם_עמודה.שם_טבלה_א , שם_עמודה.שם_טבלה_ב , שם_עמודה.שם_טבלה_ב … FROM שם_טבלה_א , שם_טבלה_ב WHERE שם_עמודה.שם_טבלה_א = שם_עמודה.שם_טבלה_ב
לדוגמא, אנו רוצים לשלב נתונים מטבלת Employees וטבלת Departments, להציג את שם משפחת העובד ומשכורתו מטבלת Employees ולהציג את שם המחלקה של העובד מטבלת Departments :
SELECT employees.last_name , employees.salary , departments.department_name FROM employees, departments WHERE employees.department_id = departments.department_id
v משפט SELECT מציין את העמודות אותן אנו רוצים להציג לפי הטבלאות השונות. עמודות אלו נכתוב בפורמט של שם_עמודה.שם_טבלה.
v משפט FROM מציין את הטבלאות מהן אנו רוצים למשוך את הנתונים. במשפט זה אנו נציין את הטבלאות השונות מופרדות ע"י פסיק (,).
v משפט WHERE מציין את התנאי על פיו אנו רוצים לבצע את הקישור.
כינויים לטבלאות מייעלים את נוחות הכתיבה ואת הקריאות של שאילתות JOIN. במקום לכתוב אחרי כל עמודה ועמודה שם טבלה מלא (דבר שעלול להיות מאוד ארוך ומסורבל) נשתמש בכינויים.
נבצע שוב את הדוגמא האחרונה תוך הגדרת כינויים :
SELECT emp.last_name , emp.salary , dep.department_name FROM employees emp, departments dep WHERE emp.department_id = dep.department_id
v את הכינויים לטבלאות נגדיר במשפט FROM.
v לאחר כל שם טבלה נכתוב כינוי.
v ניתן לכנות טבלה בכל שם שנבחר (למשל, לכנות את טבלת Employees באות A), אך רצוי שלכינויים תהיה משמעות.
v לאחר שנגדיר כינוי לטבלה, פורמט כתיבת שם העמודה יהיה :
שם_עמודה.כינוי_שם_טבלה
v לאחר שנגדיר את הכינויים לטבלאות, לא יהיה ניתן להשתמש בפורמט העמודה הקודם : שם_עמודה.שם_טבלה
v הצורה המקובלת לכתיבת JOIN בין טבלאות היא תמיד ע"י השימוש בכינויים לטבלאות. מעתה, יתר הדוגמאות תהיינה עם כינויים לטבלאות.
הוספת משפטי SQL שונים לאחר משפט JOIN
לאחר שסיימנו להשתמש בפקודת JOIN על מנת לקשר בין הטבלאות, ניתן להמשיך ולכתוב את משפט ה- SQL בכל צורה שנרצה (להוסיף עוד תנאי, לשנות את סדר המיון וכדומה). רק חשוב להמשיך ולהקפיד על מבנה העמודה : שם_עמודה.כינוי_שם_טבלה.
להלן מספר דוגמאות :
ניתן להוסיף עוד תנאי – להציג את השילוב רק עבור העובדים אשר נמצאים במחלקה מספר 90 :
SELECT emp.last_name , emp.salary , dep.department_name FROM employees emp, departments dep WHERE emp.department_id = dep.department_id AND emp.department_id = 90
ניתן לשנות את סדר המיון – להציג את הנתונים בצורה ממויינת לפי שכר העובד :
SELECT emp.last_name , emp.salary , dep.department_name FROM employees emp, departments dep WHERE emp.department_id = dep.department_id ORDER BY emp.salary DESC
Equi Join – שילוב 3 טבלאות או יותר
כעת נרצה לשלב נתונים משלוש טבלאות: הצגת שם העובד מטבלת עובדים, את שם המחלקה שלו מטבלת מחלקות ואת העיר שלו מטבלת איזורים.
כדי שנוכל לשלב טבלה נוספת לשתי הטבלאות המקושרות שלנו, יש :
v להוסיף את שם הטבלה במשפט FROM.
v למצוא ולכתוב את התנאי המקשר הנוסף במשפט WHERE ע"י AND.
SELECT emp.last_name , emp.salary , dep.department_name , loc.city FROM employees emp, departments dep, locations loc WHERE emp.department_id = dep.department_id AND dep.location_id = loc.location_id
v אותו רעיון חל גם על שילוב ארבע טבלאות או יותר – הוספת שם הטבלה במשפט FROM וכתיבת התנאי המקשר הנוסף במשפט WHERE ע"י AND.
v על כל X טבלאות אנו צריכים X-1 תנאים לקישור.
לפוסט הבא בנושא – טכניקות JOIN מתקדמות