PracticU

פקודת Select עם Join

בלי כתוביותעם כתוביות
PracticU › קורס DBA אפליקטיבי - שפת SQL למתחילים › פקודת Select עם Join
מילון מושגים:
Join - פעולת SQL שמשלבת שורות משתי טבלאות או יותר על בסיס קשר ביניהן.
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.
עמודה - שדה בטבלת מסד נתונים שמחזיק ערך מסוג מסוים עבור כל שורה, למשל שם או תאריך.

פקודת Select עם Join
JOIN מחבר שורות משתי טבלאות או יותר לפי שדה משותף, כך שמקבלים טבלה אחת עם נתונים מכמה מקורות. השיעור עובר על ארבעה סוגי JOIN ב-SQL.
השלבים העיקריים
1. הבעיה: המוצרים נמצאים בטבלת Products, ושם הקטגוריה נמצא בטבלת Categories. כדי להציג מוצר יחד עם שם הקטגוריה, מחברים את הטבלאות לפי השדה המשותף CategoryID.
2. כינויים: נותנים לטבלה כינוי קצר, כמו Products p, וכותבים את שם העמודה עם הכינוי, במיוחד כשאותו שם מופיע בשתי הטבלאות.
3. INNER JOIN: מחזיר רק שורות שיש להן התאמה בשני הצדדים. הכתיבה JOIN לבד שקולה, אבל מקובל לכתוב INNER JOIN.
4. החיסרון של INNER: מוצר שאין לו קטגוריה נעלם מהתוצאה. בהרצאה הוסף מוצר בשם כיסא בלי קטגוריה, כדי להראות את זה.
5. LEFT JOIN: מציג את כל השורות של הטבלה שמשמאל ל-JOIN, גם אם אין להן התאמה. בעמודות החסרות מופיע NULL, ולבדיקה שלהן משתמשים ב-IS NULL.
6. RIGHT JOIN: ההפך, מציג את כל השורות של הטבלה שמימין.
7. חשיבות הסדר: LEFT ו-RIGHT תלויים בסדר הטבלאות בפקודה. כשמתחילים מטבלת הקטגוריות ומצרפים אליה מוצרים, התוצאה נשמרת לפי הקטגוריות.
8. CROSS JOIN: מכפלה קרטזית, כל שורה בטבלה אחת מתחברת לכל שורה בטבלה השנייה. 78 מוצרים כפול 8 קטגוריות נותנים 624 שורות, בלי משמעות. אפשר לכתוב אותו גם עם פסיק בין הטבלאות, ובדרך כלל לא משתמשים בו.
9. עמודות: העמודות נבחרות ב-SELECT, ולא לפי סדר הטבלאות ב-FROM, אלא אם כוללים כוכבית.
פקודות והגדרות
SELECT p.ProductName, c.CategoryName FROM Products p INNER JOIN Categories c ON p.CategoryID = c.CategoryID, LEFT JOIN, RIGHT JOIN, WHERE c.CategoryID IS NULL.
שימו לב
לא כותבים = NULL כדי לבדוק ערך ריק, כי NULL אינו שווה לשום דבר. משתמשים ב-IS NULL.
השיעור מסתיים ביכולת לחבר שתי טבלאות עם INNER, LEFT, RIGHT ו-CROSS JOIN, ולדעת איזה מהם משמר שורות בלי התאמה.
השיעור הבא בקורס: פקודת Select עם Self-Join

פרקי ההרצאה: פקודת Select עם Join

  1. 00:00

    מבוא: סוגי JOIN ושאילתת SELECT

  2. 03:32

    מהו JOIN: חיבור טבלאות לתוצאה אחת

  3. 04:51

    כתיבת INNER JOIN לפי CategoryID

  4. 06:04

    הגדרת השדה המשותף בתנאי ON

  5. 08:35

    בחירת העמודות שהבוס ביקש

  6. 10:33

    סוג נוסף: OUTER JOIN

  7. 11:54

    למה INNER JOIN מעלים שורות

  8. 13:10

    LEFT JOIN ששומר את כל המוצרים

תמלול ההרצאה: פקודת Select עם Join

הטקסט המלא של הדקות הראשונות בהרצאה «פקודת Select עם Join» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:00

    שלום וברוכים הבאים להרצאה על פקודת join, למעשה זה Selective join, אנחנו נדבר על ארבע סוגים שונים של join וזה הולך להיות מעניין, מרתק גם למי שמכיר את הנושא.

  2. 00:16

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

  3. 00:30

    אז אנחנו נפתח sql management studio שזה בעצם תוכנה שעוזרת לי לכתוב את הפקודות sql כמובן שאני יכול לכתוב פקודות האלו בנוטפד ולשלוח לשרת אבל אני מעדיף במקום נוטפד להשתמש בכלי כזה יפה שעוזר לי לכתוב פקודות ואני מתחבר לשרת שנמצא בכתובת IP 100895 עם user sa שזה כמו אדמיניסטרטור כל יכול ב sql יפה מתחבר ל-10895. ובתוך השרת הזה יש לנו פה כמה מסדי

  4. 01:09

    נתונים, כמה דאטאבייסים, ואני רוצה Northwind. Northwind דאטאבייס חינמי של מייקרוסופט שאוהבים לעשות עליו דוגמאות, ואנחנו הולכים לראות טבלת Categories.

  5. 01:21

    בואו נעשה New Query, שאילתה חדשה לדאטאבייס Northwind, פה למעלה אני בחרתי Northwind, כל השאילתות ילכו לשם. אז מה אני כותב? אני כותב Select כוכבית From Categories, זאת הטבלה הראשונה ומוצרים פרודקטס סלקט כוכבית פרום פרודקטס אוקיי יפה בואו נראה מה הנתונים שיש לנו אני מריץ את השאילתה עם האקזיקיוט

  6. 01:50

    הזה שזה F5 אני לוחץ F5 או אקזיקיוט מריץ לי הטבלה הראשונה זאת זאת טבלת המוצרים צ'אי לא יודע מה זה צ'יינג לא יודע מה זה סירופ בקיצור כל מיני מוצרים שיש לנו בחברה על כל מוצר בחברה יש לנו בעצם מי הספק ככה מספר הסידורי של המוצר, מוצר מספר 1, מוצר מספר 2, סתם מספר סידורי של המוצר, שם המוצר,

  7. 02:20

    מי הספק שלו, ספק מספר 1. אתם רואים ספק מספר 1 נותן לי שלושה מוצרים האלו. ספק מספר 2 נותן לי שני מוצרים. אני יכול לראות בטבלת הספקים מיהו אותו הספק.

  8. 02:33

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

  9. 03:05

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

  10. 03:34

    שלו זאת אומרת הוא רוצה לקבל צ'אי ועמודה שנייה ביבי רייג' צ'אנג והמערכת צריכה ללכת לפה לקחת את השורה הזאתי מתוך השורה הזאתי לראות שהקטגוריה היא אחת ואת הקטגוריה האחת הזאת ללכת לטבלה הזאת ולשלוף לי את השם שלה יופי וזה נקרא join join זה לחבר טבלאות ביחד לתוצאה אחת גדולה לטבלה אחת גדולה לפי שדה משותף

  11. 04:08

    לחבר כמה טבלאות ביחד לטבלה אחת גדולה לפי שדה משותף מהו השדה המשותף במקרה הזה זה קטגוריה ID פה עם קטגוריה ID פה אתם רואים שתיים הזה זה שתיים הזה וזה בדיוק מה שאני הולך להגיד למחשב אני הולך להגיד לsql תחבר לי אותם לטבלה אחת גדולה בואו נעשה את זה ביחד ונראה איך כותבים את זה בשפת sql

  12. 04:36

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

  13. 05:00

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

  14. 05:13

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

  15. 05:28

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

  16. 05:37

    join, וזאת הפקודה join, טבלת categories. אני אעשה copy-paste, כי אין לי כוח לכתוב. join categories. כמות הרווחים לא משנה, אתם יכולים גם לרדת שורה, זה לא משנה לו.

  17. 05:54

    אז אני אומר ככה, תבחר את כל המוצרים מפרודקטס, צרף אליהם join, טבלת categories, אני אקרא ל-C, שאלה יהיה פחות לכתוב, ועכשיו on, לפי איזה שדה לחבר.

  18. 06:08

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

  19. 06:33

    אז אני צריך להגיד לו שתחבר לי את הפרודקטס עם טבלת הקטגוריות, תעשה לי ביניהם join. לפי מה? ב-P, בטבלת P זה נקרא קטגורי ID. קטגורי ID.

  20. 06:45

    שווה בטבלת C זה גם נקרא קטגורי ID. במקרה זה אותו שם אבל אף אחד לא מבטיח לי שזה יהיה אותו שם. ותראו מה יקרה אני מצפה שתהיה לי טבלה אחת גדולה, טבלה אחת גדולה שכוללת את כולם ביחד.

  21. 07:10

    בואו נראה. בואו, אתם יודעים מה? נראה את כל התוצאות על המסך גם של שתי טבלאות וגם של האיכות שלהם.

  22. 07:21

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

  23. 07:51

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

  24. 08:14

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

  25. 08:35

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

  26. 08:47

    הבוס ביקש רק product, product name, seek category name. זה מה שאני רוצה לראות במסך. במקום כוכבית, כתבת לו בדיוק איזה עמודות אני רוצה לראות. אז בואו נראה מה התוצאה.

  27. 09:04

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

  28. 09:18

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

  29. 09:31

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

  30. 09:48

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

  31. 10:19

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

  32. 10:41

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

  33. 10:42

    הכל תקין הבוס מרוצה איפה שיש 77 שורות ובואו תראו במסג'ס באמת יש 77 שורות אבל בטבלת המוצרים יש 78 שורות איפה נעלם לנו מוצר חברה יש לנו פה מוצר שנעלם הבאנו דוח לבוס מוצרים והקטגוריות וחסר מוצר אתם רואים 77 שורות חסר לנו מוצר אתם רואים שחסר פה מוצר למרות שאני לוקח טבלה מחבר שתי טבלאות ביחד משהו נעלם לי בין הכיסאות יופי למה?

  34. 11:54

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

  35. 12:15

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

  36. 12:34

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

  37. 13:06

    קטגוריה כי היא לא הבינה מה זה קטגוריה ונוצר מצב שאני מקבל join דפוק ג'וין שנעלם לי המוצר אני רוצה לקבל ג'וין עם כל המוצרים מה שלא יהיה תראה לי את כל המוצרים ואם אין לך קטגוריה עבור מוצר כלשהו אין לך קטגוריה תראה לי את זה שאין לך קטגוריה אל תעלים לי אותו תראה לי שאין לך קטגוריה והדבר הזה נקרא בדיוק

  38. 13:37

    left or right join רגע רגע הנה ככה אני שכפלתי את השורה הזאת ולפני הג'וין אני אומר לו left left פה אומר מה שלא יהיה את מה שבצד שמאל שזה products אתה מראה לי בכל מקרה אם אין לך איך להדביק אותו עם הקטגוריות אתה מראה לי אותו בכל מקרה בואו תראו מה קורה תוצאה קיבלנו 78 שורות ובאמת בשורה האחרונה כיסא יצא עם נעל כי לא היה איך להדביק אותו אז הוא כתב לי נעל אבל

  39. 14:06

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

  40. 14:42

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

לקורס המלא: קורס SQL ו‑DBA אפליקטיבי

ההרצאה הקודמת: פקודת Select

ההרצאה הבאה: פקודת Select עם Self-Join

הרצאות קשורות מקורסים אחרים

  • Qlik Join - חלק 1
  • פקודת ls בלינוקס
  • פקודת Foreach
  • המרה של Web Element ל-Select

קורסים נוספים במסלול

  • קורס NoSQL - MongoDB
  • קורס SSIS
  • קורס BI - ניתוח מסדי נתונים - Qlik Sense
  • קורס Power BI