Correlated बनाम Non-Correlated Subqueries
बाहरी row को reference करने वाली correlated subqueries, उनकी performance characteristics और EXISTS के IN से बेहतर होने की स्थितियाँ समझिए।
Correlated बनाम Non-Correlated Subqueries, CoddyKit पर SQL Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
गैर-सहसंबद्ध उपक्वेरी
गैर-सहसंबद्ध उपक्वेरी बाहरी पंक्ति का संदर्भ नहीं देती। यह एक बार चलती है और इसके परिणाम का फिर से उपयोग किया जाता है:
SELECT * FROM users
WHERE id IN (
SELECT user_id FROM orders WHERE status = 'paid'
);सहसंबद्ध उपक्वेरी
सहसंबद्ध उपक्वेरी बाहरी पंक्ति का संदर्भ देती है — तार्किक रूप से यह हर बाहरी पंक्ति के लिए फिर से चलती है:
SELECT u.id, u.email
FROM users u
WHERE EXISTS (
SELECT 1 FROM orders o
WHERE o.user_id = u.id
AND o.total > 1000
);अंतर कैसे पहचानें
यदि अंदर का SELECT बाहरी FROM के किसी कॉलम का संदर्भ देता है, तो वह सहसंबद्ध है।
प्रदर्शन संबंधी प्रभाव
एक सरल सहसंबद्ध उपक्वेरी O(बाहरी × आंतरिक) होती है। आधुनिक प्लानर अक्सर इसे semi-join या hash join में बदल देते हैं — फिर भी जहाँ संभव हो, आपको सरल रूप ही लिखना चाहिए।
EXISTS बनाम IN
"कम-से-कम एक मिलान" के लिए:
-- IN with non-correlated subquery (often the planner's favourite):
SELECT u.* FROM users u
WHERE u.id IN (SELECT user_id FROM orders);
-- EXISTS with correlated subquery (NULL-safe alternative):
SELECT u.* FROM users u
WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);NOT EXISTS हमेशा NOT IN से बेहतर है
जब अंदर के समूह में NULL हो, तो NOT IN सही ढंग से काम नहीं करता। NOT EXISTS ऐसा नहीं करता। anti-join के लिए हमेशा NOT EXISTS को प्राथमिकता दें:
-- BUG-prone:
SELECT u.* FROM users u
WHERE u.id NOT IN (SELECT excluded_id FROM blocklist);
-- Safe:
SELECT u.* FROM users u
WHERE NOT EXISTS (SELECT 1 FROM blocklist b WHERE b.excluded_id = u.id);SELECT में सहसंबद्ध उपक्वेरी
"हर पंक्ति के लिए खोज" पैटर्न:
SELECT u.id, u.email,
(SELECT MAX(created_at) FROM orders o WHERE o.user_id = u.id) AS last_order_at
FROM users u;
-- Often readable, but consider a LEFT JOIN + GROUP BY.UPDATE में सहसंबद्ध उपक्वेरी
हर पंक्ति के लिए व्युत्पन्न मान प्राप्त करें:
UPDATE products p
SET review_count = (
SELECT COUNT(*) FROM reviews r WHERE r.product_id = p.id
);LATERAL JOIN: अधिक साफ़ सहसंबद्ध पैटर्न
"हर बाहरी पंक्ति के लिए कुछ पंक्तियाँ ढूँढ़ने" के लिए LATERAL अक्सर अधिक स्पष्ट और तेज़ होता है — इसका विवरण उन्नत JOIN पैटर्न में है।
उपक्वेरी कैशिंग
PostgreSQL डिफ़ॉल्ट रूप से पंक्तियों के बीच उपक्वेरी के परिणामों को कैश नहीं करता। यदि एक ही आंतरिक परिणाम की कई बार आवश्यकता हो, तो CTE का उपयोग करें।
सहसंबंध वाले कॉलम पर अनुक्रमणिका बनाएँ
आंतरिक उपक्वेरी बाहरी पंक्ति की कुंजी पर फ़िल्टर करती है। उस कुंजी पर अनुक्रमणिका न होने पर हर बाहरी पंक्ति के लिए पूरा स्कैन करना पड़ता है।
-- For the orders example, this is essential:
CREATE INDEX orders_user_id_idx ON orders(user_id);पुनरावलोकन
सहसंबद्ध उपक्वेरी बाहरी पंक्ति का संदर्भ देती हैं।
- EXISTS इसका मानक सहसंबद्ध रूप है
- NOT IN के बजाय NOT EXISTS को प्राथमिकता दें
- सहसंबंध वाले कॉलम पर अनुक्रमणिका बनाएँ
- कई स्थितियों में LATERAL अधिक साफ़ विकल्प है
त्वरित जाँच
जब आंतरिक समुच्चय में NULL हो सकता है, तब NOT EXISTS, NOT IN से अधिक सुरक्षित क्यों है?
एआई शिक्षक के साथ SQL सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 46
- पाठ
- 183
अक्सर पूछे जाने वाले प्रश्न
क्या “Correlated बनाम Non-Correlated Subqueries” पाठ निःशुल्क है?
हाँ—“Correlated बनाम Non-Correlated Subqueries” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Correlated बनाम Non-Correlated Subqueries” में मैं क्या सीखूँगा?
बाहरी row को reference करने वाली correlated subqueries, उनकी performance characteristics और EXISTS के IN से बेहतर होने की स्थितियाँ समझिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या SQL Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“Correlated बनाम Non-Correlated Subqueries” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस SQL Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर SQL Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Scalar, Row और Table Subqueries
- Correlated बनाम Non-Correlated Subqueries
- Common Table Expressions (WITH)
- Hierarchies के लिए Recursive CTEs