פקודת Join מאפשרת לנו לשלב אינפורמציה ממספר טבלאות. במדריך SQL זה הראשון בסדרה, אנו נעסוק בטכניקות השונות לשילוב נתונים ממספר טבלאות לכדי הצגתם בטבלה אחת, במדריך SQL זה נבין לעומק את הלוגיקה העומדת מאחורי שילוב הטבלאות ואת טכניקת השילוב הבסיסית ביותר – .Equi Join

הדוגמאות הבאות מתבססות על תחביר ה JOIN ה NOT ANSI, ניתן להשתמש בפוסט הבא כדי לעמוד על ההבדלים בינו לבין התחביר ה ANSI

לעתים, הנתונים אותם נרצה להציג נמצאים בשתי טבלאות או יותר, לדוגמא :

 

פקודת JOIN - מדריך SQL

שני עקרונות חשובים לשילוב בין טבלאות:

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 טבלאות או יותר

פקודת JOIN - מדריך SQL

כעת נרצה לשלב נתונים משלוש טבלאות: הצגת שם העובד מטבלת עובדים, את שם המחלקה שלו מטבלת מחלקות ואת העיר שלו מטבלת איזורים.

כדי שנוכל לשלב טבלה נוספת לשתי הטבלאות המקושרות שלנו, יש :

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 מתקדמות