What is SQL Subquery in Hindi - SQL Subquery क्या है?

  • SQL subquery,  एक query के अंदर दूसरी query होती है। 
  • यह जटिल कार्यों को छोटे भागों में तोड़ता हैं ताकि कार्यों को आसानी से किया जा सके।
  • एक subquery चलाने पर यह एक मान (value) या कई मानों (values) की लिस्ट देती है।
  • मुख्य query, subquery से मिले values का उपयोग तुलना (comparison) या फ़िल्टर करने (filtering) के लिए करती है।
  • subqueries, को ब्रैकेट्स (parentheses) के अंदर लिखा जाता है और इसका उपयोग SQL statement के हिस्सों जैसे SELECT, WHERE, या FROM में होता है।
  • Subqueries, का उपयोग करने से SQL ज्यादा लचीला और शक्तिशाली हो जाता है जो आपको data प्राप्त करने और उसके साथ उन्नत तरीके से काम करने के अनुमति देता है।

Types of Subqueries in Hindi - Subqueries के प्रकार

सबक्वेरीज के निम्न प्रकार होते हैं।

नीचे के प्रकारों को अच्छे से समझने के लिए हम दो tables लेते हैं।

1) employees table

2) departments table

Single-Row Subquery

इस subquery में result के रूप में केवल एक ही row मिलता है यदि subquery एक से ज्यादा देता है तो error आ जाता है।

इसे comparison operators जैसे `=`, `>`, `<`, आदि के साथ प्रयोग किया जाता है। 

आप इसका प्रयोग उन समय में कर सकते हैं जब आप एक value की तुलना अन्य query के एक ही value से करना चाहते हैं।

Example:
मान लीजिए हम employees table से उन employees के नाम देखना चाहते हैं जिसकी salary सबसे ज्यादा है।

ऊपर के example में जिस employee की salary सबसे ज्यादा है उसे ढूंढ कर result देता है।

Multi-Row Subquery

Single-Row Subquery के विपरीत Multi-Row Subquery के कई values result के रूप में देता है।

इसे `IN`, `ANY`, `ALL`, आदि के साथ प्रयोग किया जाता है। आप इसका प्रयोग उन समयों में कर सकते हैं जब एक value की तुलना कई values से करना चाहते हैं।

Example
उन employees को ढूंढे जो `RAIPUR` city के departments में कार्य करते हैं।

ऊपर के query को समझने के के लिए हमें दोनों Tables, employees और departments को देखना होगा जिसे ऊपर मे दिया गया है। 

1) (SELECT dname FROM departments WHERE city = 'RAIPUR');
सबसे पहले यह सब subquery departments table से ऐसे employees का dname दिखाया जो ' RAIPUR' City में है। जैसे ये department 'HR' है। आप चाहें तो ऊपर के departments table से देख सकते है।

2) SELECT ename, department
FROM employees
WHERE department IN(...)
अब यह query employees table से केवल 'HR' department वाले employees को ename के साथ दिखायेगा 

जैसे Jay और Atul आप चाहें तो employees table यह जांच कर सकते हैं कि केवल यह दो employees ही से 'HR' department से संबंधित है।

Correlated Subquery

correlated subquery, एक subquery है जो अपने मानो के लिए outer query पर निर्भर होता है।

इसी कारण यह कई बार चलता है अर्थात outer query में प्रत्येक row के लिए एक बार। यह अकेले कार्य नही कर सकता  
 
Example
employees table से उन employees को ढूंढे जिसकी salary, खुद के department में average salary से ज्यादा है। 

नीचे निम्न प्रकार से Correlated Subquery बनाए है 


यह क्वेरी उन कर्मचारियों (employees) का नाम (ename), सैलरी (salary), और डिपार्टमेंट (department) निकालती है, जिनकी सैलरी उनके खुद के department की average salary  से ज्यादा है।

जैसे तीनो departments का अलग अलग Average salary निकालते है 

SALES: 
SUMIT (35000), TARUN (40000). Avg = (35000 + 40000) / 2 = 37500 

SALES departments की Average salary 37500 है जिसमें TARUN की salary(40000) Average salary (37500) से ज्यादा है।अतः TARUN का 
चयन होगा वैसे अन्य departments का भी निकाला गया है👇।

HR: 
JAY (50000), ATUL (56000). Avg = (50000 + 56000) / 2 = 53000
अतः ATUL का चयन होगा

MARKETING:
RAHUL (25000), ANIL (30000). Avg = (25000 + 30000) / 2 = 27500
अतः ANIL का चयन होगा.

Final results 
TARUN (40000, SALES)
ATUL (56000, HR)
ANIL (30000, MARKETING)


Non-Correlated Subquery

एक Non-correlated subquery, outer query पर निर्भर नहीं करता है। 
यह केवल एक बार चलता है और result देता है। 

उस result का उपयोग outer query करता है। यह outer query के कोई भी column का उपयोग नहीं करता। यह सरल और correlated subquery से तेज है।

Example:
उन employees को ढूंढे जो `SALES` department में कार्य करते है।

ऊपर के query को समझने के लिए आपको पुन: ऊपर में दिए employees और departments table को देखना होगा।

1) `(SELECT dname FROM departments WHERE dname = 'SALES')` 
सबसे पहले departments table से उन employees को ढूंढा जाता है जिसका dname `SALES` है।

2) 
SELECT ename, salary
FROM employees
WHERE department उन employees का ename, salary दिखाता है जिसका department(dname) `SALES`  है।
अतः निम्न प्रकार से result प्राप्त होता हैं। 
SUMIT (35000)
TARUN (40000)


Subqueries को अच्छे से और समझने के लिए कुछ अन्य Examples देखे

Example 1:
WHERE clause में Subquery का उपयोग करके data निकालना (Fetch करना)


इसका मतलब है कि outer query की rows को चुनने (filter करने) के लिए हम WHERE clause में subquery का इस्तेमाल करते हैं।

Question
उन employees के data को प्रदर्शित करें जो DURG city के departments में कार्य करते हैं।

ऊपर के query को समझने के लिए आपको पुन: ऊपर में दिए employees और departments table को देखना होगा।

1) (SELECT dname FROM departments WHERE city = 'DURG')

सबसे पहले ऊपर का subquery departments table से उन employees के departments को ढूंढता है जो `DURG` City में है। जैसे 'SALES' और 'MARKETING' दोनों departments `DURG` City में है।

2) SELECT ename, department
FROM employees
WHERE department IN(..)

यह query, employees table से उन employees का ename, department दिखाता है जो SALES' और 'MARKETING' में है। जैसे नीचे दिखाया गया है।

SUMIT (SALES)
RAHUL (MARKETING)
ANIL (MARKETING)
TARUN (SALES)

Example 2: 
Subquery के साथ INSERT का उपयोग

इस Subquery, का उपयोग अन्य query के result का उपयोग करके एक table में data, insert करने के लिए किया जाता है।

मान लीजिए हमारे पास एक नया table high_earners है जिसमे उच्च salaries पाने वाली employees का data संग्रहित है।

CREATE TABLE high_earners (
    eid INT,
    ename VARCHAR(50),
    salary INT
);


Question
high_earners नामक नए table में ऐसे employees को शामिल करें जिनकी salary RAIPUR में स्थित departments के employees के average salary से अधिक है।

INSERT INTO high_earners (eid, ename, salary)
SELECT eid, ename, salary
FROM employees
WHERE salary > (
    SELECT AVG(e.salary)
    FROM employees e
    WHERE e.department IN (SELECT dname FROM departments WHERE city = 'RAIPUR')
);

1) (
    SELECT AVG(e.salary)
    FROM employees e
    WHERE e.department IN (SELECT dname FROM departments WHERE city = 'RAIPUR')

सबसे पहले यह Raipur के departments, को ढूंढता है और उन departments में कार्य करने वाले employees की average salary की गणना करता है। 

जैसे JAY (50000), ATUL (56000) = (50000 + 56000)/2 = 53000

2) 
SELECT eid, ename, salary
FROM employees
WHERE salary > ( ... )

यह उस average salary( 53000) से ज्यादा salary वाले employees को चुनता है। जैसे average salary( 53000) से ज्यादा पाने वाले employee केवल ATUL (56000) है।

3) 
INSERT INTO high_earners (eid, ename, salary)

जो employee average salary से ज्यादा पाए है , जो कि ATUL (56000)  हैं, उन्हें high_earners टेबल में insert कर दिया जाता है।

Example 3: 
Subquery के साथ DELETE का उपयोग 

subquery, अन्य table से condition की जांच करने के द्वारा वह एक table से rows को delete करता है।

यह match होने वाले data को अन्य table में ढूंढता है उसके बाद उस match के आधार पर मुख्य टेबल के rows को delete कर देता है।

Question
employees table से उन employees को delete करे जो BALOD में उपस्थित department में कार्य करते हैं।

DELETE FROM employees
WHERE department IN (SELECT dname FROM departments WHERE city = 'BALOD');

1)
(SELECT dname FROM departments WHERE city = 'BALOD');

यह सबसे पहले `departments` टेबल से उन department(dname) के नाम ढूंढता है जो BALOD शहर में हैं। जैसे वह department(dname), 'SALES', और 'MARKETING' हैं।

2) DELETE FROM employees
WHERE department IN(...)

फिर यह `employees` टेबल से उन employees को हटा देता है जिनका department, 'SALES', और 'MARKETING' हैं। 

सरल शब्दों में 
BALOD शहर वाले departments ढूंढो → फिर उन्हीं departments में काम करने वाले employees को हटा दो।

SUMIT  (SALES) 
RAHUL (MARKETING)
ANIL     (MARKETING)
TARUN (SALES)

Example 4: 
Subquery के साथ UPDATE का उपयोग 

जब एक table में बदलाव करना हो,
लेकिन वो बदलाव दूसरे table की जानकारी पर निर्भर हो,
तो हम UPDATE में subquery का इस्तेमाल करते हैं।

Question:
RAIPUR स्थित departments में काम करने वाले employees के वेतन में 10% की वृद्धि करे 

UPDATE employees
SET salary = salary * 1.10
WHERE department IN (SE
LECT dname FROM departments WHERE city = 'BALOD');

यह SQL command, उन employees की salary में 10% बढ़ाता है जो BALOD' city के departments में कार्य करते है।