דילוג לתוכן המרכזי
מודול 5 · שיעור 1 מתוך 417/57 בקורס~12 min
שיעורי מודול (1/4)

מצטרפים בשלושה שולחנות או יותר

במודול 3 הצטרפת ל-שני טבלאות. בעולם האמיתי הנתונים כמעט תמיד מפוזרים על פני שלושה או יותר טבלאות המקושרות באמצעות מפתחות זרים: to תענה על שאלה עסקית שאתה צריך כדי לעבור את שרשרת היחסים. זה בדיוק מה שעושה JOIN מרובה שולחנות.

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

התחביר: שרשרת של JOINs

SQL
SELECT colonne
FROM   tabella_a
JOIN   tabella_b ON tabella_a.x = tabella_b.y
JOIN   tabella_c ON tabella_b.z = tabella_c.w
[JOIN  tabella_d ON …]
…;

כל JOIN מוסיף "קישור" לשרשרת: המנוע לוקח את הביניים תוצאה של ה-JOIN הקודמים ומצרף אליו את הטבלה הבאה.

SQL
-- Per ogni riga d'ordine: cliente, prodotto e quantità.
SELECT c.email,
       p.name AS prodotto,
       oi.quantity
FROM   orders      AS o
JOIN   customers   AS c  ON o.customer_id = c.id
JOIN   order_items AS oi ON oi.order_id   = o.id
JOIN   products    AS p  ON oi.product_id = p.id;

שלושה JOINs, ארבעה טבלאות. לתוצאה יש שורה אחת לכל order_items - כל אחת מוצר בכל הזמנה - מועשר באימייל הלקוח ובשם המוצר.

הסדר ההגיוני

המנוע מצטרף לטבלאות משמאל לימין. מצב JOIN יכול עיין בכל טבלה שכבר הוצגה לעיל. לקריאות:

  • שים את "הטבלה הראשית" של השאלה תחילה (כאן orders);
  • הוסף את האחרים לפי הסדר שבו אתה מבקר אותם על ידי ביצוע ה- מערכות יחסים.

מצטברים על פני רשתות JOIN

ריבוי JOINs משתלבים עם GROUP BY כדי להפיק דוחות:

SQL
-- Spesa totale per cliente (solo ordini consegnati):
SELECT c.email,
       SUM(oi.quantity * oi.unit_price) AS total
FROM   customers   AS c
JOIN   orders      AS o  ON o.customer_id = c.id
JOIN   order_items AS oi ON oi.order_id   = o.id
WHERE  o.status = 'delivered'
GROUP BY c.email
ORDER BY total DESC;

אתה לא צריך JOIN products כאן: כל מה שאתה צריך (quantity, unit_price) כבר נמצא ב-order_items. כלל אצבע: אל תוסיף טבלאות אתה לא משתמש - הם פוגעים בביצועים ובקריאות.

נסה זאת בעצמך

פעילות גופנית#sql.m5.l1.e1
ניסיונות: 0טוען...

Per ogni riga d'ordine degli ordini consegnati (סטטוס = 'נמסר'), דוא"ל לקוחות, שם מוצר וכמות. טרה קולון. Ordina per id ordine crescente e id prodotto crescente.

טוען עורך...
הצג רמז

שלושה מצטרפים: הזמנות →לקוחות במזהה_לקוח, הזמנות→פריטים_הזמנה במזהה_הזמנה, הזמנה_פריטים →מוצרים במזהה_מוצר.

הפתרון זמין לאחר 3 ניסיונות

סקירת התרגיל

פעילות גופנית#sql.m5.l1.e2
ניסיונות: 0טוען...

3 הלקוחות הטובים ביותר לכל סכום כולל (כמות גדולה * מחיר יחידה) סוי יחיד רגיל. Due colonne: דוא"ל e total. סדנה לכל ירידה, מוגבלת ל-3.

טוען עורך...
הצג רמז

מוצרים שאינם משרתים JOIN: כמות ומחיר_יחידה סונו בהזמנה_פריטים.

הפתרון זמין לאחר 3 ניסיונות