מדריך SQL – איחוד טבלאות (JOIN)
פקודת JOIN מאפשרת לנו לבצע שליפות נתונים המגיעים מיותר מטבלה אחת.
לפני שממשיכים האלה, יש לוודא שעברתם על המדריכים הבאים:
- מדריך SQL – יצירת טבלה חדשה
- מדריך SQL – פקודת SELECT
- מדריך SQL – פסוקית WHERE
- מדריך SQL – קשרים בין טבלאות, מפתח ראשי ומפתח זר
פרק זה מתבסס על הפרקים הקודמים בהם יצרנו את טבלת המוצרים, ביצענו מספר שאילתות פשוטות וכן יצרנו את טבלת ההזמנות וקישרנו בין שתי הטבלאות.
טבלת המוצרים:
טבלת ההזמנות:
דוגמא: שליפת רשימת ההזמנות, כאשר לכל פריט נציג גם את השם והמחיר:
SELECT Orders.OrderID, Orders.ProductID, Products.ProductName, Products.Price
FROM Orders
JOIN Products ON (Orders.ProductID = Products.ProductID)
התוצאה:
נסביר את השליפה הזאת שלב אחרי שלב.
ראשית, בשורת ה- SELECT אנחנו רואים שאנחנו מביאים נתונים משתי טבלאות. עבור כל שדה, ציינו מאיזו טבלה הוא מגיע ע”י כך שכתבנו את שם הטבלה לפני שם העמודה. למשל Orders.OrderID מציין שאת הערך של השדה OrderID אנחנו מביאים מהטבלה Orders.
שנית, אנחנו רואים שהשליפה מבוצעת מטבלת Orders, כאשר יש איחוד לטבלת Products ע”י הביטוי JOIN Products. כך אנחנו אומרים שהשליפה תבוצע על יותר מטבלה אחת.
לבסוף אנחנו רואים את ביטוי ה- ON שמגדיר כיצד לאחד את הטבלאות. במקרה שלנו אנחנו רוצים לאחד את הטבלאות ע”י השדה ProductID שקיים בשתי הטבלאות ולכן מגדירים את השיווון ביניהם.
כתיב מקוצר:
ניתן היה לתת לכל טבלה כינוי מקוצר ע”י שימוש במילה AS:
SELECT o.OrderID, o.ProductID, p.ProductName, p.Price
FROM Orders AS o
JOIN Products AS p ON (o.ProductID = p.ProductID)
לכל טבלה הגדרנו שם מקוצר (o לטבלת Orders ו- p לטבלת Products), ואז השליפה הופכת להיות טיפה יותר קריאה.
דוגמא: שליפת ההזמנות ומחיריהן, ע”י הוספת חישוב של כמות היחידות כפול המחיר:
SELECT o.OrderID, p.ProductName, p.Price, o.Units, p.Price * o.Units AS Cost
FROM Orders AS o
JOIN Products AS p ON (o.ProductID = p.ProductID)
התוצאה:
שימו לב ליצירת שם לעמודת החישוב ע”י השימוש בביטוי AS בשורת ה- SELECT.
כמובן שלשאילתות העושות שימוש ב- JOIN ניתן להוסיף שימוש בפסוקית WHERE וב- ORDER BY. לדוגמא:
שליפת ההזמנות של הפריטים מקטגוריה מספר 2, ומחיריהן, במיון לפי סכום ההזמנה בסדר יורד.
SELECT o.OrderID, p.ProductName, p.Price, o.Units, p.Price * o.Units AS Cost
FROM Orders AS o
JOIN Products AS p ON (o.ProductID = p.ProductID)
WHERE p.Category = 2
ORDER BY Cost DESC
התוצאה:
שימו לב שהמיון נעשה ע”פ העמודה Cost, שהיא עמודה חדשה שיצרנו רק לצורך השליפה והיא תוצאה של חישוב בגוף השאילתה. כיוון שנתנו לעמודה הזאת שם ע”י שימוש בביטוי AS יכולנו להשתמש בו בפסוקיות אחרות כמו פסוקית ה- ORDER BY.
תגובות בפייסבוק