मुख्य सामग्री पर जाएं
मॉड्यूल 5 · पाठ 1 का 4पाठ्यक्रम में 17/57~12 min
मॉड्यूल पाठ (1/4)

तीन या अधिक टेबलों पर जुड़ता है

मॉड्यूल 3 में आप दो तालिकाओं में शामिल हुए। वास्तविक दुनिया में डेटा लगभग है हमेशा विदेशी कुंजियों से जुड़ी तीन या अधिक तालिकाओं में बिखरा हुआ: से एक व्यावसायिक प्रश्न का उत्तर देने के लिए आपको रिश्तों की श्रृंखला को पार करना होगा। मल्टी-टेबल JOIN बिल्कुल यही करती है।

इस मॉड्यूल से हम ecommerce डेटासेट का उपयोग करेंगे (ग्राहक, श्रेणियां, उत्पाद, ऑर्डर, ऑर्डर आइटम, समीक्षाएं)। आप इसे यहां से एक्सप्लोर कर सकते हैं डेटासेट से ecommerce का चयन करके प्लेग्राउंड बीननेवाला.

वाक्यविन्यास: जोड़ों की एक श्रृंखला

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 श्रृंखला में एक "लिंक" जोड़ता है: इंजन मध्यवर्ती लेता है पिछले जॉइन का परिणाम और इसके साथ अगली तालिका संलग्न करता है।

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);
  • दूसरों को उसी क्रम में जोड़ें जिस क्रम में आप उनसे मिलने जाते हैं रिश्ते.

जॉइन श्रृंखलाओं पर समुच्चय

मल्टी 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लोड हो रहा है...

किसी अन्य कंपनी की सहमति (स्थिति = 'वितरित'), अधिकांश ईमेल क्लाइंट, नोम डेल प्रोडोटो और क्वांटिटा। ट्रे कोलन. ऑर्डिना प्रति आईडी ऑर्डिन क्रिसेंट और आईडी प्रोडोट्टो क्रिसेंट।

संपादक लोड हो रहा है...
संकेत दिखाएँ

तीन जॉइन: ऑर्डर→customer_id पर ग्राहक, ऑर्डर→order_id पर ऑर्डर_आइटम, product_id पर ऑर्डर_आइटम→उत्पाद।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम की समीक्षा करें

व्यायाम#sql.m5.l1.e2
प्रयास: 0लोड हो रहा है...

कुल मिलाकर शीर्ष 3 ग्राहक (मात्रा * इकाई_मूल्य के अनुसार) केवल एक ही राशि में। देय कॉलम: ईमेल और कुल। ऑर्डिना प्रति टोटल डिक्रीसेंट, लिमिटा ए 3.

संपादक लोड हो रहा है...
संकेत दिखाएँ

JOIN उत्पादों की सेवा न करें: मात्रा और इकाई_कीमत ऑर्डर_आइटम में दी गई है।

3 प्रयासों के बाद समाधान उपलब्ध है