ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 5 · 4లో పాఠం 1కోర్సులో 17/57~12 min
మాడ్యూల్ పాఠాలు (1/4)

మూడు లేదా అంతకంటే ఎక్కువ పట్టికలలో చేరారు

మాడ్యూల్ 3లో మీరు రెండు పట్టికలను చేరారు. వాస్తవ ప్రపంచంలో డేటా దాదాపు విదేశీ కీల ద్వారా లింక్ చేయబడిన మూడు లేదా అంతకంటే ఎక్కువ పట్టికలలో ఎల్లప్పుడూ చెల్లాచెదురుగా ఉంటుంది: కు మీరు సంబంధాల గొలుసును దాటవలసిన వ్యాపార ప్రశ్నకు సమాధానం ఇవ్వండి. బహుళ-పట్టిక JOIN సరిగ్గా అదే చేస్తుంది.

ఈ మాడ్యూల్ నుండి మేము ecommerce డేటాసెట్‌ని ఉపయోగిస్తాము (కస్టమర్‌లు, వర్గాలు, ఉత్పత్తులు, ఆర్డర్‌లు, ఆర్డర్ అంశాలు, సమీక్షలు). మీరు దీని నుండి అన్వేషించవచ్చు డేటాసెట్ నుండి ecommerceని ఎంచుకోవడం ద్వారా ప్లేగ్రౌండ్ పికర్.

వాక్యనిర్మాణం: JOINల గొలుసు

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;

మూడు JOINలు, నాలుగు పట్టికలు. ఫలితం order_itemsకి ఒక అడ్డు వరుసను కలిగి ఉంది — ఒక్కొక్కటి ప్రతి క్రమంలో ఉత్పత్తి — కస్టమర్ ఇమెయిల్ మరియు ఉత్పత్తి పేరుతో సుసంపన్నం.

తార్కిక క్రమం

ఇంజిన్ పట్టికలను ఎడమ నుండి కుడికి కలుస్తుంది. ఒక JOIN పరిస్థితి చేయవచ్చు పైన ఇప్పటికే ప్రవేశపెట్టిన ఏదైనా పట్టికను సూచించండి. చదవడానికి:

  • ప్రశ్న యొక్క "ప్రధాన పట్టిక"ని ముందుగా ఉంచండి (ఇక్కడ orders);
  • అనుసరించడం ద్వారా మీరు వాటిని సందర్శించే క్రమంలో ఇతరులను జోడించండి సంబంధాలు.

JOIN గొలుసుల ద్వారా సంకలనాలు

Multi JOINలు 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లోడ్ అవుతోంది...

ప్రతి ogni riga d'ordine degli ordini consegnati (స్టేటస్ = 'డెలివరీ'), మోస్ట్రా ఇమెయిల్ డెల్ క్లయింట్, నోమ్ డెల్ ప్రోడోట్టో మరియు క్వాంటిటా. ట్రె కొలోన్. ఆర్డినా పర్ ఐడి ఆర్డిన్ క్రెసెంట్ ఇ ఐడి ప్రోడోట్టో క్రెసెంట్.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

మూడు చేరికలు: ఆర్డర్‌లు→ customer_idలో కస్టమర్‌లు, ఆర్డర్‌లు→order_items on order_id, order_items→product_idలో ఉత్పత్తులు.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం సమీక్షించండి

వ్యాయామం#sql.m5.l1.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

ప్రతి స్పెసా టోటల్‌కి టాప్ 3 క్లయింటీలు (సొమ్మ డి పరిమాణం * యూనిట్_ధర) సుయి సోలి ఆర్డిని కన్సెగ్నటీ. డ్యూ కాలన్: ఇమెయిల్ మరియు మొత్తం. మొత్తం తగ్గుదలకు ఆర్డినా, పరిమితి a 3.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

నాన్ టి సర్వ్ JOIN ప్రోడక్ట్‌లు: ఆర్డర్_ఐటెమ్‌లలో పరిమాణం మరియు యూనిట్_ధర సోనో గిà.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది