SQL Outer Join

Sql Outer Join



מובן מאליו שהצטרפות היא אחת התכונות המזוהות ביותר של מסדי נתונים יחסיים. הצטרפות מאפשרות לנו לשלב את הנתונים מטבלה אחת או יותר בהתבסס על תנאי קשור ליצירת פעולת נתונים קוהרנטית.

ישנם סוגים שונים של חיבורים ב-SQL, כל אחד עם דרך ייחודית כיצד הוא מטפל בנתונים מהטבלאות המשתתפות או מהסט שנוצר. אחד מסוגי הצטרפות הנפוצים ביותר ב-SQL הוא OUTER JOIN.







OUTER JOIN ב-SQL מאחזר את כל השורות התואמות מהטבלאות המעורבות, כמו גם את השורות הלא תואמות מטבלאות אחת או שתיהן. זה שימושי כאשר אתה מתמודד עם טבלאות המכילות ערכי NULL או סטים חסרים.



תן לנו לחקור עוד מה החיבורים האלה עושים, איך הם עובדים ואיך אנחנו יכולים להשתמש בהם במסד נתונים של SQL.



דרישות:

עבור הדרכה זו, נעבוד עם MySQL 8.0 ונשתמש במסד הנתונים לדוגמה של Sakila. עם זאת, אל תהסס להשתמש בכל מערך נתונים אחר שנראה לך מתאים.





סוגי חיבורים חיצוניים

ישנם שלושה סוגים עיקריים של OUTER JOINS ב-SQL. סוגים אלו של OUTTER JOINS כוללים:

  1. שמאל OUTTER JOINS

  2. במקרה של LEFT OUTER JOINS, ה-Join שואב את כל השורות מהטבלה השמאלית ורק את השורות התואמות מהטבלה הימנית. אם אין שורות תואמות מהטבלה הימנית, ה-join מחזיר את ערכי NULL עבור העמודות בטבלה הימנית.



  3. OUTTER JOINS מימין

  4. זה דומה ל- RIGHT OUTER JOIN. עם זאת, הוא מאחזר את כל השורות מהטבלה הימנית אך רק את השורות התואמות מהטבלה השמאלית. אם אין שורות תואמות מהטבלה השמאלית, ה-join כולל את ערכי NULL עבור העמודות בטבלה השמאלית.

  5. מצטרפים חיצוניים מלאים

  6. לבסוף, יש לנו את החיבורים החיצוניים המלאים. סוג זה של חיבור משלב גם את החיבורים החיצוניים מימין וגם משמאל. כתוצאה מכך, החיבור מאחזר את כל השורות כאשר יש התאמה בטבלה השמאלית או הימנית. אם אין התאמה, ה-join מחזיר את ערכי NULL עבור העמודות מהטבלה ללא התאמה.

תחביר של SQL OUTER JOIN

להלן מבטא את התחביר של SQL OUTER JOIN. עם זאת, כדאי לזכור שהתחביר עשוי להשתנות מעט בהתאם למנוע מסד הנתונים היעד.

להלן מבנה כללי:

בחר עמודות
מטבלה 1
[שמאל | ימינה | FULL] OUTTER JOIN טבלה2
ON table1.column_name = table2.column_name;

התחביר של OUTER JOIN ב-SQL הוא די מובן מאליו.

דוגמאות:

הבה נסתכל על שימוש לדוגמה כיצד אנו יכולים ליישם את הסוגים השונים של OUTER JOINS ב-SQL.

כפי שציינו, נשתמש במסד הנתונים לדוגמה של Sakila להדגמה. במקרה זה, אנו משתמשים בטבלאות 'לקוח' ו'תשלום'.

דוגמה 1: JOIN OUTTER JOIN

בואו נתחיל עם OUTTER JOIN. נניח שאנו רוצים לאחזר את כל פרטי הלקוח יחד עם פרטי התשלום שלהם, אם קיים.

זה הופך את ההצטרפות ל-LEFT OUTER JOIN לישימה מכיוון שאנו רוצים את כל פרטי הלקוח (בצד שמאל) ופרטי תשלום אם זמינים (מימין).

אם הלקוח לא ביצע כל תשלום, ההצטרפות תציג את ערכי ה-NULL עבור העמודות הקשורות לתשלום.

דוגמה היא כדלקמן:

בחר
c.customer_id,
c.first_name,
c.last_name,
p.amount,
p.payment_date
מ
לקוח ג
LEFT OUTER JOIN תשלום עמ'
עַל
c.customer_id = p.customer_id;

בשאילתה הנתונה, אנו כוללים את העמודות 'מזהה לקוח', 'שם_שם' ו'שם_משפחה' מטבלת 'לקוח'. אנו כוללים גם את הסכום ואת 'תאריך_תשלום' מטבלת 'תשלום'.

לאחר מכן אנו מבצעים JOIN LEFT OUTER JOIN בין טבלאות 'לקוח' ו'תשלום' על סמך 'מזהה_לקוח'.

אלו הם כל הלקוחות (בין אם התשלום בוצע ובין אם לאו) יחד עם פרטי התשלום שלהם (אם יש).

פלט לדוגמה הוא כדלקמן:

דוגמה 2: JOIN OUTER JOIN

עכשיו, בואו נעבור ל-RIGHT OUTER JOIN. נניח שברצוננו לכלול את כל פרטי התשלום ואת הלקוח המשויך במקרה זה, אם בכלל.

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

בחר
c.customer_id,
c.first_name,
c.last_name,
p.amount,
p.payment_date
מ
לקוח ג
תשלום של RIGHT OUTER JOIN עמ'
עַל
c.customer_id = p.customer_id;

הסט המתקבל הוא כדלקמן:

דוגמה 3: חיבור חיצוני מלא

FULL OUTER JOIN, לעומת זאת, מאחזר את כל פרטי הלקוח והתשלום. זה כולל את כל הלקוחות ואת כל התשלומים ומציג את ערכי NULL כאשר אין התאמה בין הטבלאות.

בחר
c.customer_id,
c.first_name,
c.last_name,
p.amount,
p.payment_date
מ
לקוח ג
תשלום FULL OUTER JOIN עמ'
עַל
c.customer_id = p.customer_id;

כדאי לזכור ש-MySQL אינו תומך באופן מקורי ב-FULL OUTER JOIN. אתה צריך לעשות קצת קסם ג'יוג'יטסו עם ה-LEFT JOIN, UNION ו-RIGHT JOIN. די מעצבן, אפשר להוסיף.

סיכום

במדריך זה, למדנו הכל על OUTER JOINS. למדנו מהו OUTER JOIN ב-SQL, את סוגי ה-OUTER JOINS ואת הדוגמאות לשימוש בסוגים אלו של OUTER JOINS.