एक सबक्वेरी अर्को क्वेरीको भित्रमा नेस्टेड गरिएको क्वेरी हो — WHERE, FROM, SELECT, वा EXISTS सँग प्रयोग गरिन्छ। यसले एक क्वेरीको परिणाम अर्को क्वेरीको भित्रमा प्रयोग गर्न दिन्छ, जटिल फिल्टरिङ र गणनाहरूलाई सक्षम बनाउँदछ।
एक सबक्वेरी अर्को क्वेरीको भित्रमा नेस्टेड गरिएको क्वेरी हो — WHERE, FROM, SELECT, वा EXISTS सँग प्रयोग गरिन्छ। यसले एक क्वेरीको परिणाम अर्को क्वेरीको भित्रमा प्रयोग गर्न दिन्छ, जटिल फिल्टरिङ र गणनाहरूलाई सक्षम बनाउँदछ।
-- find users who have placed an order (their id is in the orders table)
SELECT name FROM users
WHERE id IN (SELECT user_id FROM orders); -- the subquery returns a list of user_ids
-- find products more expensive than the average
SELECT name, price FROM products
WHERE price > (SELECT AVG(price) FROM products); -- subquery returns a single value
WHERE मा सबक्वेरीले फिल्टर गर्नको लागि मानहरू प्रदान गर्छ — सूची (IN सँग) वा एकल मान (तुलना अपरेटरहरू सँग)।
-- for each user, find those with above-average orders FOR THEIR COUNTRY
SELECT name FROM users u
WHERE order_count > (
SELECT AVG(order_count) FROM users
WHERE country = u.country -- references the OUTER query's row (correlated)
);
एक सम्बद्ध सबक्वेरीले बाहिरी क्वेरीलाई सन्दर्भ गर्छ — यो प्रत्येक बाहिरी पङ्क्तिको लागि एकपल चल्छ (सम्भवतः सुस्त)। एक असम्बद्ध सबक्वेरी एकपल चल्छ।
-- users who have at least one order (often more efficient than IN)
SELECT name FROM users u
WHERE EXISTS (
SELECT 1 FROM orders o WHERE o.user_id = u.id -- just checks existence
);
EXISTS जाँच गर्छ कि सबक्वेरीले कुनै पङ्क्तिहरू फर्काउँछ वा होइन — प्रायः अस्तित्व जाँचको लागि IN भन्दा अधिक प्रभावकारी (यो पहिलो म्याचमा रोक्न सक्छ)।
-- use a subquery result as a table
SELECT country, avg_age FROM (
SELECT country, AVG(age) AS avg_age FROM users GROUP BY country
) AS country_stats
WHERE avg_age > 30;
Many subqueries can be rewritten as JOINs (often more efficient/readable).
WHERE id IN (SELECT ...) → can often be a JOIN
Use subqueries for clarity in filtering/aggregation; JOINs for combining data.
CTEs (WITH) are often a cleaner alternative to complex nested subqueries.
सबक्वेरीहरू जटिल क्वेरीिङको लागि एक महत्त्वपूर्ण SQL प्रविधि हो — एक क्वेरीको परिणाम अर्को क्वेरीको भित्रमा प्रयोग गर्नुले फिल्टरिङ र गणनाहरूलाई सक्षम बनाउँछ जुन साधारण क्वेरीहरूले व्यक्त गर्न सक्दैनन्, त्यसैले तिनीलाई बुझ्नु वास्तविक-विश्वको क्वेरीहरू लेख्नको लागि मूल्यवान छ।
फारमहरू जान्नु — WHERE मा सबक्वेरीहरू (सूची (IN सँग) वा एकल मान (तुलनाहरू सँग) द्वारा फिल्टर गर्नु), सम्बद्ध सबक्वेरीहरू (बाहिरी क्वेरीलाई सन्दर्भ गर्दै, प्रति पङ्क्ति चलिरहेको), EXISTS (प्रभावकारी अस्तित्व जाँचहरू), र FROM मा सबक्वेरीहरू (व्युत्पन्न तालिकाहरू) — जटिल तर्क व्यक्त गर्नको लागि सामान्य ढाँचाहरूलाई कभर गर्छ।
सम्बद्ध र असम्बद्ध सबक्वेरीहरू बीचको भेद बुझ्नु कार्यक्षमताको लागि महत्त्वपूर्ण छ (सम्बद्ध सबक्वेरीहरू प्रत्येक बाहिरी पङ्क्तिको लागि एकपल चल्छन् र सुस्त हुन सक्छन्)।
JOINहरू र CTEहरूसँगको सम्बन्ध जान्नु समान रूपमा मूल्यवान छ: धेरै सबक्वेरीहरूलाई JOINहरूको रूपमा पुनःलेख्न सक्छ (प्रायः अधिक प्रभावकारी र पठनीय) वा CTEहरू (जटिल केसहरूको लागि स्वच्छ), त्यसैले प्रत्येकलाई कहिले प्रयोग गर्ने भनी बुझ्नु — फिल्टरिङ/aggregation स्पष्टताको लागि सबक्वेरीहरू, डेटा संयोजनको लागि JOINहरू — एक व्यावहारिक कौशल हो।
वास्तविक-विश्वको क्वेरीहरू प्रायः नेस्टिङ आवश्यक हुन्छ (aggregated परिणामहरू द्वारा फिल्टर गर्नु, अस्तित्व जाँचहरू, गणना गरिएका मानहरूसँग तुलना गर्नु), र सबक्वेरीहरू, तिनीहरूको कार्यक्षमता विशेषताहरू (विशेष गरी सम्बद्ध वाहरू) बुझ्नु, र JOINहरू/CTEहरूसँगको सम्बन्ध प्रभावकारी, कुशल जटिल क्वेरीहरू लेख्नको लागि महत्त्वपूर्ण हुन्छ, सबक्वेरीहरूमा विशेषज्ञता हासिल गरेको आधारभूत प्रश्नोत्तर अगाडिको मूल्यवान, बारम्बार प्रयोग गरिएको ज्ञान हो र एक सामान्य अन्तरवार्ता विषय हो जसले जटिल डेटा आवश्यकताहरू व्यक्त गर्ने क्षमता प्रदर्शन गर्छ।