LEFT JOIN और बिना-मिलान वाली ROW को बनाए रखना
जानें कि LEFT JOIN क्या बनाए रखता है और बिना-मिलान वाली ROW के लिए NULL कैसे दिखाई देते हैं
LEFT JOIN और बिना-मिलान वाली ROW को बनाए रखना, CoddyKit पर SQL साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
इंटरव्यू की परिस्थिति
इंटरव्यू लेने वाला कहता है: "हर ग्राहक और उसके ऑर्डर की सूची दिखाइए, उन ग्राहकों को भी शामिल करते हुए जिन्होंने कभी ऑर्डर नहीं किया है।" INNER JOIN बिना ऑर्डर वाले ग्राहकों को हटा देता है, इसलिए वह इस आवश्यकता को पूरा नहीं करता। यहाँ LEFT JOIN का उपयोग करना होगा।
LEFT JOIN बाईं ओर की (पहले लिखी गई) तालिका की हर पंक्ति को रखता है और दाईं तालिका से मेल खाती पंक्तियाँ मौजूद होने पर जोड़ता है। यह पाठ वह सटीक मानसिक मॉडल विकसित करता है जिसकी इंटरव्यू लेने वाले अपेक्षा करते हैं।
LEFT JOIN की गारंटी
मुख्य आश्वासन यह है: बाईं तालिका की प्रत्येक पंक्ति आउटपुट में कम-से-कम एक बार दिखाई देती है, चाहे उसका मेल मिले या नहीं।
- यदि बाईं ओर की पंक्ति को दाईं ओर मेल मिलते हैं, तो प्रत्येक मेल के लिए एक आउटपुट पंक्ति मिलती है।
- यदि बाईं ओर की पंक्ति को कोई मेल नहीं मिलता, तब भी एक आउटपुट पंक्ति मिलती है और दाईं तालिका के सभी कॉलम
NULLहोते हैं।
इसी कारण इंटरव्यू लेने वाले इसे OUTER JOIN कहते हैं: मेल-समुच्चय से बाहर रह जाने वाली पंक्तियों को हटाने के बजाय सुरक्षित रखा जाता है।
दो तालिकाएँ
इस पूरे पाठ में हम दो सरल तालिकाओं का उपयोग करेंगे। customers में प्रत्येक ग्राहक है; orders खरीदारी दर्ज करता है और customer_id के माध्यम से किसी ग्राहक का संदर्भ देता है।
ध्यान दें कि ग्राहक 3 (Carol) की orders में कोई पंक्ति नहीं है। यही बिना मेल वाला ग्राहक है जिसे LEFT JOIN को सुरक्षित रखना चाहिए।
-- customers
-- id | name
-- 1 | Alice
-- 2 | Bob
-- 3 | Carol
-- orders
-- id | customer_id | amount
-- 10 | 1 | 50
-- 11 | 1 | 75
-- 12 | 2 | 20LEFT JOIN लिखना
इसका वाक्य-विन्यास INNER JOIN जैसा ही है; बस INNER की जगह LEFT लिखना होता है (OUTER शब्द वैकल्पिक है: LEFT JOIN और LEFT OUTER JOIN एक जैसे हैं)।
कीवर्ड से पहले लिखी गई तालिका सुरक्षित रखी जाने वाली बाईं ओर होती है। क्रम महत्वपूर्ण है: customers LEFT JOIN orders सभी ग्राहकों को रखता है, सभी ऑर्डर को नहीं।
SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o
ON o.customer_id = c.id;परिणाम पढ़ना
यह उस क्वेरी का आउटपुट है। Alice का मेल दो बार हुआ, इसलिए वह दो बार दिखाई देती है। Bob का मेल एक बार हुआ। Carol का कोई मेल नहीं हुआ, इसलिए वह amount कॉलम में NULL के साथ फिर भी दिखाई देती है।
NULL वाली Carol की यह एकल पंक्ति LEFT JOIN की पहचान है। इंटरव्यू लेने वाला जब आपको बोलकर तर्क करते हुए सुनता है, तो वह यह सुनना चाहता है: "बिना मेल वाली बाईं पंक्तियाँ दाईं ओर NULL मानों के साथ बनी रहती हैं।"
-- name | amount
-- Alice | 50
-- Alice | 75
-- Bob | 20
-- Carol | NULL <-- preserved, no matchNULL मान कहाँ से आते हैं
NULL कहीं संग्रहीत नहीं होता। डेटाबेस इसे स्वयं बनाता है, क्योंकि amount देने वाली दाईं तालिका की कोई पंक्ति नहीं होती।
बिना मेल वाली बाईं पंक्ति के लिए दाईं तालिका से लिए गए प्रत्येक कॉलम का मान NULL हो जाता है: Carol की पंक्ति में o.id, o.customer_id और o.amount सभी NULL हैं। यह महत्वपूर्ण है, क्योंकि o.customer_id का NULL होना यह नहीं बताता कि ग्राहक की कोई id नहीं है; इसका अर्थ है कि कोई मेल खाता ऑर्डर था ही नहीं।
प्रति ग्राहक ऑर्डर गिनना
एक सामान्य अगला प्रश्न होता है: "हर ग्राहक के कितने ऑर्डर हैं, शून्य वाले ग्राहकों को भी शामिल करके?" LEFT JOIN और COUNT इसका सही उत्तर देते हैं, लेकिन आपको * के बजाय दाईं तालिका के कॉलम को गिनना होगा।
COUNT(o.id) NULL मानों को अनदेखा करता है, इसलिए Carol का परिणाम 0 आता है। COUNT(*) Carol के लिए गलत रूप से 1 लौटाता, क्योंकि NULL मानों से बनी पंक्ति फिर भी एक पंक्ति के रूप में गिनी जाती है।
SELECT c.name, COUNT(o.id) AS order_count
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
-- Alice | 2
-- Bob | 1
-- Carol | 0COUNT(*) और COUNT(column) का जाल
इंटरव्यू में यह एक प्रसिद्ध पेचीदा प्रश्न है। LEFT JOIN के बाद बिना मेल वाली बाईं पंक्ति परिणाम में वास्तविक रूप से मौजूद रहती है और दाईं ओर के कॉलम NULL होते हैं।
COUNT(*)उस पंक्ति को गिनता है और बिना ऑर्डर वाले ग्राहक के लिए 1 लौटाता है।COUNT(o.id)NULL को छोड़ देता है और सही रूप से 0 लौटाता है।
जब आपको वास्तविक शून्य चाहिए हों, तो हमेशा उस कॉलम को गिनें जो मेल न मिलने वाली ओर पर NULL होता है।
-- WRONG: Carol shows 1
SELECT c.name, COUNT(*) AS n
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;LEFT JOIN के साथ जोड़ना
COUNT के अलावा अन्य समुच्चय-क्रियाएँ भी स्वयं बनाए गए NULL मानों के साथ सहजता से काम करती हैं। SUM NULL मानों को अनदेखा करता है, इसलिए बिना मेल वाला ग्राहक NULL देता है, कोई error नहीं।
रिपोर्ट के लिए इंटरव्यू लेने वाले अक्सर NULL के बजाय शून्य चाहते हैं। डिफ़ॉल्ट मान रखने के लिए समुच्चय-क्रिया को COALESCE में लपेटें।
SELECT c.name,
COALESCE(SUM(o.amount), 0) AS total_spent
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
-- Alice | 125
-- Bob | 20
-- Carol | 0बाईं और दाईं तालिका को स्पष्ट रूप से समझना
जब इंटरव्यू लेने वाला पूछे, "कौन-सी तालिका सुरक्षित रखी जाती है?", तो आत्मविश्वास से उत्तर दें: JOIN कीवर्ड के बाईं ओर वाली तालिका। इसे बाएँ से दाएँ पढ़ें।
A LEFT JOIN B का अर्थ है A की सभी पंक्तियाँ रखना। इसके बजाय B की सभी पंक्तियाँ रखने के लिए या तो B LEFT JOIN A लिखें या RIGHT JOIN का उपयोग करें। पढ़ने में सरलता के लिए अधिकांश टीमें केवल LEFT JOIN पसंद करती हैं और तालिकाओं का क्रम बदल देती हैं।
एक मानसिक जाँच-सूची
इंटरव्यू में LEFT JOIN दिखे, तो यह जाँच-सूची ज़ोर से दोहराएँ:
- सुरक्षित रखा गया पक्ष? बाईं तालिका, जिसकी सभी पंक्तियाँ रखी जाती हैं।
- बिना मेल वाली पंक्तियाँ? दाईं ओर से आए NULL मानों के साथ एक बार दिखाई देती हैं।
- गिनती करनी है? वास्तविक शून्य के लिए
COUNT(right_col)का उपयोग करें। - योग करना है? यदि NULL के बजाय 0 चाहिए, तो
COALESCEमें लपेटें।
इस जाँच-सूची को शब्दों में बताना वरिष्ठ स्तर की सावधानी का संकेत देता है।
त्वरित जाँच
गिनती के बारे में अपनी LEFT JOIN समझ की जाँच करें।
पुनरावलोकन
LEFT JOIN बाईं तालिका की प्रत्येक पंक्ति को सुरक्षित रखता है। मेल वाली बाईं पंक्तियाँ अपनी दाईं ओर की मेल खाती पंक्तियों के साथ जुड़ती हैं; बिना मेल वाली बाईं पंक्तियाँ दाईं तालिका के सभी कॉलम में NULL के साथ एक बार बनी रहती हैं।
- बाईं तालिका वह है जो
JOINकीवर्ड से पहले लिखी जाती है। - स्वयं बनाए गए NULL मान उन पंक्तियों का संकेत देते हैं जिनका कोई मेल नहीं मिला।
COUNT(right_col)वास्तविक शून्य देता है;COUNT(*)ऐसा नहीं करता।COALESCE(SUM(...), 0)NULL योग को शून्य में बदल देता है।
आगे के पाठों में अनुपस्थित डेटा और एंटी-JOIN खोजने की यही नींव है।
एआई शिक्षक के साथ SQL सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “LEFT JOIN और बिना-मिलान वाली ROW को बनाए रखना” पाठ निःशुल्क है?
हाँ—“LEFT JOIN और बिना-मिलान वाली ROW को बनाए रखना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“LEFT JOIN और बिना-मिलान वाली ROW को बनाए रखना” में मैं क्या सीखूँगा?
जानें कि LEFT JOIN क्या बनाए रखता है और बिना-मिलान वाली ROW के लिए NULL कैसे दिखाई देते हैं आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या SQL साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“LEFT JOIN और बिना-मिलान वाली ROW को बनाए रखना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस SQL साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर SQL साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- LEFT JOIN और बिना-मिलान वाली ROW को बनाए रखना
- RIGHT और FULL OUTER JOIN का व्यवहार
- बिना मिलान वाली ROW खोजना (Anti-Join)
- बाहरी JOIN पर WHERE का जाल