बिना मिलान वाली ROW खोजना (Anti-Join)
अनाथ और अनुपलब्ध डेटा खोजने के लिए LEFT JOIN / IS NULL पैटर्न सीखें
बिना मिलान वाली ROW खोजना (Anti-Join), CoddyKit पर कोडिंग साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह कोडिंग साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
एंटी-जॉइन वाला प्रश्न
बाहरी JOIN से जुड़े सबसे अधिक पूछे जाने वाले प्रश्नों में से एक है: "ऐसे ग्राहकों को खोजिए जिन्होंने कभी कोई ऑर्डर नहीं दिया।" या: "वे उत्पाद सूचीबद्ध कीजिए जो कभी बेचे नहीं गए," अथवा "ऐसे ऑर्डर खोजिए जिनका कोई मेल खाता ग्राहक नहीं है।"
इन सभी का ढाँचा एक जैसा है: एक तालिका की वे पंक्तियाँ जिनका दूसरी तालिका में कोई मिलान नहीं है। इसका साफ़ तरीका एंटी-जॉइन है, जिसे LEFT JOIN और IS NULL की शर्त से बनाया जाता है।
मुख्य विचार
LEFT JOIN से शुरू कीजिए: यह बाईं ओर की हर पंक्ति रखता है, और बिना-मिलान वाली बाईं पंक्तियों के लिए दाईं तालिका के स्तंभों में NULL रखता है।
इसलिए बिना-मिलान वाली पंक्तियाँ ठीक वही होती हैं जिनमें दाईं तालिका का कोई स्तंभ NULL होता है। उसी आधार पर छँटाई कीजिए और केवल बिना-मिलान वाली पंक्तियाँ अलग कर लीजिए। पूरी तरकीब यही है।
ढाँचा तैयार करना
यह बिना ऑर्डर वाले ग्राहकों को खोजने वाला मानक एंटी-जॉइन है। इसे दो चरणों में समझिए: LEFT JOIN सभी ग्राहकों को रखता है, फिर WHERE o.customer_id IS NULL केवल बिना-मिलान वाले ग्राहकों को रखता है।
SELECT c.id, c.name
FROM customers c
LEFT JOIN orders o
ON o.customer_id = c.id
WHERE o.customer_id IS NULL;
-- only customers with zero ordersयह चरण-दर-चरण कैसे काम करता है
हमारे डेटा में, जहाँ Carol का कोई ऑर्डर नहीं है, इसे इस तरह समझिए:
- LEFT JOIN से Alice (x2), Bob (x1) और Carol मिलते हैं, जिनके दाईं ओर के स्तंभ NULL होते हैं।
WHERE o.customer_id IS NULLAlice और Bob को हटा देता है (उनके दाईं ओर के स्तंभों में वास्तविक मान हैं)।- केवल Carol की पंक्ति, यानी NULL से बनाई गई पंक्ति, बचती है।
छँटाई JOIN के बाद लागू होती है, इसलिए उसे वे NULL दिखाई देते हैं और वह ठीक अनाथ पंक्तियों को चुनती है।
परीक्षण के लिए सही स्तंभ चुनना
दाईं तालिका के ऐसे स्तंभ का परीक्षण कीजिए जो वास्तविक मिलान में वैध रूप से कभी NULL नहीं हो सकता—आदर्श रूप से JOIN कुंजी या प्राथमिक कुंजी का।
यदि आप o.shipped_at जैसे NULL हो सकने वाले दाईं तालिका के स्तंभ का परीक्षण करेंगे, तो ऐसे ऑर्डर भी मिल जाएँगे जो मौजूद हैं लेकिन भेजे नहीं गए हैं; यह गलत उत्तर होगा। o.customer_id (JOIN कुंजी) या o.id (उसकी प्राथमिक कुंजी) का परीक्षण करने से यह सुनिश्चित होता है कि NULL का अर्थ "कोई पंक्ति मेल नहीं खाई" है।
-- SAFE: join key / primary key
WHERE o.id IS NULL
-- RISKY: a nullable data column
WHERE o.shipped_at IS NULL -- catches unshipped too!एंटी-जॉइन और NOT IN
साक्षात्कारकर्ता एंटी-जॉइन की तुलना NOT IN से करते हैं। दोनों समान दिखते हैं, लेकिन NULL के मामले में अलग तरह से काम करते हैं।
यदि उप-क्वेरी कोई भी NULL लौटाती है, तो NOT IN एक भी पंक्ति नहीं लौटाता—यह एक प्रसिद्ध और चुपचाप होने वाली त्रुटि है। LEFT JOIN / IS NULL एंटी-जॉइन इससे प्रभावित नहीं होता।
-- DANGEROUS if any customer_id is NULL
SELECT id, name FROM customers
WHERE id NOT IN (SELECT customer_id FROM orders);
-- SAFE anti-join, same intent
SELECT c.id, c.name FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.id IS NULL;एंटी-जॉइन और NOT EXISTS
दूसरा समतुल्य तरीका संबंधित उप-क्वेरी के साथ NOT EXISTS है। यह भी NULL को सही ढंग से संभालता है और अक्सर उतना ही तेज़ होता है।
ये तीनों (LEFT JOIN/IS NULL, NOT EXISTS, NOT IN) एंटी-जॉइन व्यक्त कर सकते हैं, लेकिन साक्षात्कार में NULL-सुरक्षा के लिए LEFT JOIN/IS NULL या NOT EXISTS को प्राथमिकता दीजिए। NOT IN की समस्या का उल्लेख करने पर आपको अतिरिक्त अंक मिलते हैं।
SELECT c.id, c.name
FROM customers c
WHERE NOT EXISTS (
SELECT 1 FROM orders o
WHERE o.customer_id = c.id
);एक सामान्य गलती
एक आम त्रुटि है: बिना-मिलान की शर्त को WHERE के बजाय ON खंड में रखना।
... ON o.customer_id = c.id AND o.id IS NULL लिखने से परिणाम की छँटाई नहीं होती; इससे केवल यह बदलता है कि किसे मिलान माना जाए, और LEFT JOIN के कारण हर ग्राहक फिर भी बना रहता है। IS NULL की शर्त WHERE में होनी चाहिए और JOIN के बाद लागू होनी चाहिए। अगले पाठ में हम इस समस्या को पूरी तरह समझाएँगे।
अनाथ बाल-पंक्तियाँ खोजना
यह तरीका उल्टी दिशा में भी काम करता है। ऐसे ऑर्डर खोजने के लिए जो अनुपस्थित ग्राहक का संदर्भ देते हैं (अनाथ पंक्तियाँ, डेटा-अखंडता की जाँच), orders को संरक्षित रखिए और ग्राहक वाले पक्ष में NULL का परीक्षण कीजिए।
SELECT o.id AS order_id, o.customer_id
FROM orders o
LEFT JOIN customers c
ON c.id = o.customer_id
WHERE c.id IS NULL;
-- orders pointing to a non-existent customerअनाथ पंक्तियों की गिनती
अक्सर माँग केवल गिनती की होती है: "ऐसे कितने ग्राहक हैं जिन्होंने कभी ऑर्डर नहीं दिया?" एंटी-जॉइन को बाहरी क्वेरी में रखिए या सीधे गिनती कीजिए।
क्योंकि एंटी-जॉइन पहले ही हर अनाथ पंक्ति के लिए एक पंक्ति लौटाता है, इसलिए यहाँ उस पर साधारण COUNT(*) सही है—हर बिना-मिलान वाले ग्राहक के लिए ठीक एक पंक्ति होती है।
SELECT COUNT(*) AS never_ordered
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.id IS NULL;दोबारा इस्तेमाल करने योग्य ढाँचा
इस तीन-पंक्ति वाले ढाँचे को याद कर लीजिए; इससे साक्षात्कार के बहुत-से प्रश्न हल हो जाते हैं:
FROM keep_table kLEFT JOIN other o ON o.fk = k.idWHERE o.id IS NULL
तालिकाओं और कुंजियों को बदलकर बिना बिके उत्पाद, बिना असाइन किए गए टिकट, बिना लॉग-इन वाले उपयोगकर्ता और "ऐसे X जिनका कोई मेल खाता Y नहीं है" जैसी किसी भी स्थिति को खोजा जा सकता है।
त्वरित जाँच
आपको ऐसे उत्पाद चाहिए जो कभी भी ऑर्डर आइटम्स में दिखाई नहीं दिए हों।
पुनरावृत्ति
एंटी-जॉइन उन पंक्तियों को खोजता है जिनका कोई मिलान नहीं है: LEFT JOIN, फिर WHERE right_key IS NULL।
- JOIN कुंजी या प्राथमिक कुंजी का परीक्षण कीजिए, NULL हो सकने वाले डेटा स्तंभ का कभी नहीं।
IS NULLकी शर्तWHEREमें होनी चाहिए,ONमें नहीं।- यह
NOT EXISTSके समतुल्य है; इसेNOT INपर प्राथमिकता दीजिए, क्योंकि NULL होने परNOT INगलत परिणाम देता है। - अनाथ बाल-पंक्तियाँ खोजने के लिए तालिकाओं का क्रम उलट दीजिए।
एक ही ढाँचा, अनेक प्रश्न: "ऐसे X जिनका कोई मेल खाता Y नहीं है।"
एआई शिक्षक के साथ कोडिंग साक्षात्कार की तैयारी सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 90
- पाठ
- 360
अक्सर पूछे जाने वाले प्रश्न
क्या “बिना मिलान वाली ROW खोजना (Anti-Join)” पाठ निःशुल्क है?
हाँ—“बिना मिलान वाली ROW खोजना (Anti-Join)” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“बिना मिलान वाली ROW खोजना (Anti-Join)” में मैं क्या सीखूँगा?
अनाथ और अनुपलब्ध डेटा खोजने के लिए LEFT JOIN / IS NULL पैटर्न सीखें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ कोडिंग साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या कोडिंग साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर कोडिंग साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“बिना मिलान वाली ROW खोजना (Anti-Join)” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस कोडिंग साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर कोडिंग साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- LEFT JOIN और बिना-मिलान वाली ROW को बनाए रखना
- RIGHT और FULL OUTER JOIN का व्यवहार
- बिना मिलान वाली ROW खोजना (Anti-Join)
- बाहरी JOIN पर WHERE का जाल