MySQL SubQueries
Introduction to MySQL Subqueries
एक subquery वह query होती है जो किसी दूसरी query के अंदर होती है। इन्हें inner queries भी कहा जाता है। जिन queries के अंदर subquery होती है वे queries outer queries कहलाती है।
एक subquery किसी SELECT, INSERT, UPDATE और DELETE statements में हो सकती है। ज्यादातर Subqueries को WHERE और FROM clause के बाद लिखा जाता है।
Subqueries SQL में dynamic execution का concept लाती है। जो result subquery द्वारा execution time पर return किया जाता है उसे outer query खुद के execution के लिए यूज़ करती है। Subquery का result dynamically outer query को pass किया जाता है।
यदि आप subquery का इस्तेमाल ना करें तो आपको inner query को पहले execute करना होगा। इसके बाद उसके result को outer query में use करते हुए उसे execute करना होगा। ये काफी lengthy task होगा और इसके लिए आपको एक से ज्यादा बार query fire करनी होगी। ऐसी situations में subqueries आपके काम को आसान बना देती है।
एक subquery में आप दूसरी subquery भी define कर सकते है। Subqueries को हमेशा brackets () में लिखा जाता है। आइये अब subqueries को यूज़ करने की advantages के बारे में जानने का प्रयास करते है।
Advantages of Subqueries
निचे subqueries की कुछ advantages दी जा रही है।
- दूसरी queries जैसे की joins और unions बहुत complex होती है जो ज्यादातर लोगों को समझ नहीं आती है। जबकि subqueries एक structured format में होती है।
- Subqueries एक बड़ी query को अलग अलग parts में divide कर देती है।
- दूसरी queries की अपेक्षा subqueries ज्यादा readable होती है और आसानी से समझ आ जाती है।
- Subqueries के results को आपको views की तरह memory में store करने की आवश्यकता नहीं होती है।
- Subqueries में आप comparison operators भी यूज़ कर सकते है।
Types of Subqueries
Subqueries को उनके result के अनुसार 3 categories में divide किया गया है।
- Scalar subquery – जब कोई subquery एक single value return करती है तो वह scalar subquery कहलाती है।
- Row subquery – जब कोई subquery एक row return करती है तो उसे row subquery कहा जाता है।
- Column subquery – ऐसी subquery जो एक column return करती है वह column subquery कहलाती है।
- Table subquery – एक table subquery वह subquery होती है जो एक table return करती है।
Defining MySQL Subqueries
MySQL में subqueries define करने का general syntax निचे दिया जा रहा है।
mysql > <statement> (SELECT, INSERT, UPDATE, DELETE) …. <table-name> (FROM/WHERE) <expression/operator> (<subquery>);
जैसा की मैने आपको पहले बताया subqueries को SELECT, INSERT, UPDATE और DELETE statements में define किया जा सकता है।
इन statements और दूसरे clauses को define करने के बाद आप table का नाम देते है और उसके बाद FROM या WHERE clause लगाते है। इसके बाद आप brackets में subquery को define करते है। इसे निचे एक उदाहरण के माध्यम से समझाया जा रहा है।
Subquery Example with WHERE Clause
मान लीजिये आपने निचे दी हुई Employee table create की हुई है।
अब आप उन employees के नाम show करना चाहते है जिनकी salary average से कम है। इस task को पूरा करने के लिए आपको 2 steps लेने होंगे।
सबसे पहले आप salary column का average calculate करेंगे। ऐसा आप इस प्रकार कर सकते है।
mysql > select avg(Salary) from Employee;
मान लीजिये average salary 25000 है। इसके बाद आप इस result को यूज़ करते हुए उन employees के नाम retrieve करेंगे जिनकी salary 25000 से कम है। ऐसा इस प्रकार किया जा सकता है।
mysql > select Name from Employee where Salary < 25000;
जब आप ऊपर दी गयी query को execute करेंगे तो आपको एक employee का नाम show होगा जिसकी salary average से कम है।
आइये अब देखते है की इस task को कैसे subqueries की मदद से सिर्फ एक single statement में ही आसानी से complete किया जा सकता है।
mysql > select Name from Employee where Salary < (select avg(Salary) from Employee);
ऊपर दी गयी query में सबसे पहले brackets के अंदर define की गयी subquery MySQL द्वारा execute की जाएगी। यह एक scalar subquery है। इसके बाद subquery को उसके result द्वारा replace कर दिया जायेगा। ऐसा होने पर एक single query बचेगी जिसे execute करके MySQL result show करेगी।
जैसा की आप देख सकते है दोनों ही तरीकों में result same आता है लेकिन subquery use करने से आपका काम आसान और automated हो जाता है।
Subquery Example with FROM Clause
अब तक आपने देखा की आप subquery को WHERE clause के साथ किस प्रकार यूज़ कर सकते है। आइये अब देखते है की subquery को आप FROM clause के साथ किस प्रकार यूज़ कर सकते है।
मान लीजिये आप ऊपर show की गयी Employee table में से maximum salary show करना चाहते है। ऐसा आप subquery की मदद से इस प्रकार कर सकते है।
mysql > select max(TopSalary) from (select Salary from Employee as TopSalary);
ऊपर दी गयी query में inner query Employee table के Salary column को return करेगी। यह एक column subquery है। ये column TopSalary के नाम से return किया जायेगा ताकि outer query को execute होने में कोई problem न हो।
इसके लिए AS clause का प्रयोग किया गया है। इसके बाद outer query इस column में से maximum salary result के रूप में return करेगी।