कोडिंग साक्षात्कार की तैयारी · पाठ

JOIN का विस्तार और ROW की वृद्धि

जानें कि JOIN दोनों तालिकाओं से अधिक ROW क्यों लौटा सकता है और साक्षात्कारकर्ता इसका परीक्षण कैसे करते हैं

पाठ 3, कुल 4 में से13 चरण

JOIN का विस्तार और ROW की वृद्धि, CoddyKit पर कोडिंग साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह कोडिंग साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

जब JOIN बहुत अधिक पंक्तियाँ लौटाता है

साक्षात्कार के सबसे revealing प्रश्नों में से एक सरल लगता है: “क्या JOIN बड़ी तालिका से भी अधिक पंक्तियाँ लौटा सकता है?” उत्तर हाँ है, और इस घटना को पंक्ति-विस्तार या पंक्ति-गुणन कहा जाता है।

जो उम्मीदवार कहते हैं कि “JOIN केवल तालिकाओं को मिलाता है”, वे इस बात को चूक जाते हैं। जो उम्मीदवार सटीक पंक्ति-संख्या का अनुमान लगा सकते हैं, उनका चयन हो जाता है। यह पाठ वह अनुमान लगाने का कौशल विकसित करता है।

कारण: एक-से-अनेक मिलान

पंक्ति-विस्तार तब होता है जब बाईं ओर की एक पंक्ति दाईं ओर की अनेक पंक्तियों से मेल खाती है। प्रत्येक मिलान एक अलग परिणाम-पंक्ति बनाता है।

ग्राहकों और ऑर्डरों में Ada (एक ग्राहक) के दो ऑर्डर हैं। JOIN प्रति ऑर्डर एक पंक्ति उत्पन्न करता है, इसलिए Ada दो बार दिखाई देती है। ग्राहक के स्तंभ दोहरते हैं; केवल ऑर्डर के स्तंभ अलग होते हैं।

SELECT c.name, o.amount
FROM customers c
JOIN orders o ON o.customer_id = c.id;
-- Ada appears twice (she has 2 orders)
-- name | amount
-- Ada  | 50
-- Ada  | 20
-- Bob  | 99

परिणाम-पंक्तियों की गिनती

परिणाम-पंक्तियों की संख्या ग्राहकों की संख्या के बजाय बाईं ओर की प्रत्येक पंक्ति के मिलानों के योग के बराबर होती है।

  • Ada -> 2 ऑर्डर -> 2 पंक्तियाँ
  • Bob -> 1 ऑर्डर -> 1 पंक्ति
  • Cleo -> 0 ऑर्डर -> 0 पंक्तियाँ (INNER JOIN से हट जाती है)

कुल = 3 पंक्तियाँ, भले ही ग्राहकों में भी 3 पंक्तियाँ हों। Ada के ऑर्डर 10 कर दें, तो परिणाम बढ़कर 11 पंक्तियों का हो जाएगा।

अनेक-से-अनेक में विस्फोट

जब एक ही कुंजी के लिए दोनों ओर कई मिलान हों, तो पंक्ति-विस्तार और बढ़ जाता है। यदि कुंजी K बाईं ओर 3 बार और दाईं ओर 4 बार आती है, तो उस कुंजी के लिए JOIN 3 x 4 = 12 पंक्तियाँ उत्पन्न करता है।

इसी तरह दिखने में छोटा JOIN लाखों पंक्तियों तक फैल जाता है। साक्षात्कारकर्ता दोनों ओर दोहराई गई कुंजियाँ देकर यह देखना पसंद करते हैं कि आप इस गुणन को पहचानते हैं या नहीं।

-- left has 3 rows with tag 'A', right has 4 rows with tag 'A'
SELECT l.id, r.id
FROM left_t l
JOIN right_t r ON r.tag = l.tag;
-- tag 'A' alone yields 3 * 4 = 12 output rows

एकत्रीकरण का जाल

यह वह दोष है जिसे साक्षात्कारकर्ता सबसे अधिक बार छिपाकर रखते हैं। आप आइटम का विवरण पाने के लिए ऑर्डरों को ऑर्डर-आइटम के साथ JOIN करते हैं, फिर ऑर्डर की राशि का SUM करते हैं। क्योंकि प्रत्येक ऑर्डर कई आइटम-पंक्तियों में फैल जाता है, ऑर्डर की राशि प्रत्येक आइटम के लिए एक बार गिनी जाती है।

अब SUM बहुत अधिक बढ़ जाता है। क्वेरी सही दिखती है और चल भी जाती है, इसलिए यह दोष खतरनाक है।

-- BUG: order.amount duplicated across items
SELECT SUM(o.amount) AS total
FROM orders o
JOIN order_items i ON i.order_id = o.id;
-- a 3-item order counts o.amount 3 times

बढ़ी हुई राशि को देखना

मान लीजिए किसी एक ऑर्डर की राशि 100 है और उसमें तीन आइटम-पंक्तियाँ हैं। JOIN तीन पंक्तियाँ बनाता है और हर पंक्ति में राशि 100 होती है। SUM(o.amount) का परिणाम 100 के बजाय 300 आता है।

सुधार यह है कि सही स्तर पर एकत्रीकरण करें: आइटमों का योग करें या अलग-अलग ऑर्डरों का योग अलग से करें। पंक्ति-विस्तार वाले अधीन JOIN में किसी मुख्य रिकॉर्ड के मान पर कभी SUM न लगाएँ।

o.id | o.amount | i.id
7    | 100      | 71
7    | 100      | 72
7    | 100      | 73
-- SUM(o.amount) = 300  (WRONG, should be 100)

सुधार 1: अधीन तालिका को पहले एकत्र करें

सबसे साफ़ सुधार यह है कि उप-प्रश्न या CTE में अनेक वाली ओर को पहले से एकत्र कर लें, ताकि प्रत्येक मुख्य रिकॉर्ड का मिलान ठीक एक सारांशित पंक्ति से हो। न पंक्ति-विस्तार होगा, न राशि बढ़ेगी।

यहाँ JOIN करने से पहले आइटमों को प्रति ऑर्डर एक पंक्ति में समेट दिया जाता है, इसलिए मुख्य रिकॉर्ड की राशि कभी दोहराई नहीं जाती।

SELECT o.id, o.amount, i.item_count
FROM orders o
JOIN (
  SELECT order_id, COUNT(*) AS item_count
  FROM order_items
  GROUP BY order_id
) i ON i.order_id = o.id;

सुधार 2: COUNT(DISTINCT) और सशर्त योग

यदि पंक्ति-विस्तार वाले JOIN के बाद ही एकत्रीकरण करना आवश्यक हो, तो सही स्तर पर गिनती या योग कीजिए। आइटम-पंक्तियों के बजाय ऑर्डरों की गिनती करने के लिए COUNT(DISTINCT o.id) का उपयोग करें।

ध्यान दें: SUM(DISTINCT o.amount) सुरक्षित सुधार नहीं है, क्योंकि दो अलग ऑर्डरों की राशि संयोग से समान हो सकती है और वे एक ही में मिला दिए जाएँगे। पहले से किया गया एकत्रीकरण अधिक विश्वसनीय है।

SELECT COUNT(DISTINCT o.id)   AS num_orders,
       COUNT(i.id)            AS num_items
FROM orders o
JOIN order_items i ON i.order_id = o.id;

पंक्ति-विस्तार का समय रहते पता लगाना

साक्षात्कारकर्ताओं को पसंद आने वाली एक त्वरित जाँच यह है: देखें कि JOIN कुंजी उस ओर अद्वितीय है या नहीं जिसे आप “एक” मान रहे हैं। यदि विशिष्ट कुंजियों की संख्या पंक्तियों की संख्या से कम है, तो उस ओर दोहराव है और वहाँ पंक्ति-विस्तार होगा।

-- if this returns rows, order_id is NOT unique in order_items
SELECT order_id, COUNT(*) AS n
FROM order_items
GROUP BY order_id
HAVING COUNT(*) > 1;

गिनती से अपने स्तर की पुष्टि

JOIN किए गए परिणाम पर किसी भी एकत्रीकरण पर भरोसा करने से पहले पंक्तियों की संख्या की तर्कसंगतता जाँच लें। एक तेज़ तरीका यह है कि JOIN की पंक्ति-संख्या की तुलना उस तालिका की संख्या से करें जिसे आप वांछित स्तर मानते हैं।

यदि JOIN पर COUNT(*), ऑर्डरों पर COUNT(*) से बड़ा है, तो JOIN में पंक्ति-विस्तार हुआ है और प्रति-ऑर्डर एकत्रीकरण जोखिम में है। इस एक-पंक्ति जाँच ने साक्षात्कारों में कई उत्तर बचाए हैं।

-- joined rows should equal order count if no fan-out
SELECT COUNT(*) AS joined_rows
FROM orders o
JOIN order_items i ON i.order_id = o.id;

SELECT COUNT(*) AS order_rows FROM orders;
-- joined_rows > order_rows  =>  fan-out present

पंक्ति-विस्तार हमेशा दोष नहीं होता

कभी-कभी आप चाहते हैं कि प्रत्येक अधीन पंक्ति के लिए एक पंक्ति हो। हर आइटम-पंक्ति को उसके ऑर्डर-शीर्षक के साथ सूचीबद्ध करना सही पंक्ति-विस्तार है। कौशल यह जानने में है कि आपका लक्ष्य-स्तर क्या है: एक इकाई से कितनी पंक्तियाँ बननी चाहिए?

क्वेरी लिखने से पहले स्तर स्पष्ट कर दीजिए। “मुझे प्रति ऑर्डर आइटम एक पंक्ति चाहिए” बनाम “प्रति ऑर्डर एक पंक्ति चाहिए”—यही तय करता है कि पंक्ति-विस्तार सुविधा है या दोष।

त्वरित जाँच

एक-से-अनेक JOIN के परिणाम का अनुमान लगाइए।

पुनरावलोकन: पंक्ति-विस्तार और पंक्ति-गुणन

याद रखने योग्य बातें:

  • JOIN प्रत्येक मेल खाते युग्म के लिए एक पंक्ति उत्पन्न करता है, इसलिए एक-से-अनेक मिलान “एक” वाली ओर की पंक्तियों को दोहरा देते हैं।
  • अनेक-से-अनेक कुंजियाँ गुणन करती हैं: उस कुंजी के लिए 3 x 4 = 12 पंक्तियाँ।
  • पंक्ति-विस्तार वाले JOIN में मुख्य रिकॉर्ड के मान का एकत्रीकरण योग और गिनती को बढ़ा देता है।
  • अधीन तालिका को पहले से एकत्र करके या सही स्तर पर गिनती/योग करके सुधारें (जैसे COUNT(DISTINCT))।
  • हमेशा पहले इच्छित स्तर स्पष्ट करें; पंक्ति-विस्तार तभी दोष है जब वह उस स्तर का उल्लंघन करे।
शुरुआत निःशुल्क

एआई शिक्षक के साथ कोडिंग साक्षात्कार की तैयारी सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
90
पाठ
360

अक्सर पूछे जाने वाले प्रश्न

क्या “JOIN का विस्तार और ROW की वृद्धि” पाठ निःशुल्क है?

हाँ—“JOIN का विस्तार और ROW की वृद्धि” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“JOIN का विस्तार और ROW की वृद्धि” में मैं क्या सीखूँगा?

जानें कि JOIN दोनों तालिकाओं से अधिक ROW क्यों लौटा सकता है और साक्षात्कारकर्ता इसका परीक्षण कैसे करते हैं आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ कोडिंग साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या कोडिंग साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर कोडिंग साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“JOIN का विस्तार और ROW की वृद्धि” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस कोडिंग साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर कोडिंग साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. INNER JOIN ROW का मिलान कैसे करता है
  2. JOIN में ON बनाम WHERE
  3. JOIN का विस्तार और ROW की वृद्धि
  4. तीन या अधिक तालिकाओं को JOIN करना
← कोडिंग साक्षात्कार की तैयारी पर वापस जाएँ