Subqueries
Sub query – ஐப் பற்றிக் கற்பதற்கு முன்னர் முதலில் அதன் அவசியத்தைத் தெரிந்து கொள்வோம். பின்வரும் உதாரணத்தில், ஒரு் அலுவலகத்திலுள்ள ஒவ்வொரு துறைக்கும் குறைந்தபட்ச சம்பளம் எவ்வளவு தரப்படுகிறது என்பதைக் கண்டுபிடிக்க பின்வரும் query-யைப் பயன்படுத்தலாம்.
பின்னர் IT_Finance-துறைக்கு அளிக்கப்படும் குறைந்தபட்ச சம்பளத்தைவிட அதிகமாக வாங்கும் துறைகளின் குறைந்த சம்பளத்தைக் கணக்கிட பின்வரும் query-யைப் பயன்படுத்தலாம்.
select department,min(salary) as sal from organisation group by department having sal>8500;
ஆனால் முதலில் IT_Finance-துறையின் குறைந்தபட்ச சம்பளத்தைத் தெரிந்து கொண்டு, பின்னர் அந்த மதிப்பினை condition-ல் கொடுப்பதற்கு பதிலாக, “IT_Finance-துறையின் குறைந்தபட்ச சம்பளத்தைத் தெரிந்து கொள்ளும் query-யையே” condition-ல் கொடுக்கலாம். இதுவே sub-query எனப்படும்.
Query-55
select department,min(salary) as sal from organisation group by department having sal>(select min(salary) from organisation where department=’IT_Finance’);
இதனை correlated மற்றும் non-correlated என்று இருவகையாகப் பிரிக்கலாம்.
Non-correlated Subquery
sub query-யில் உள்ள table-ம், வெளியில் இருக்கும் main query-யில் உள்ள table-ம் எந்த ஒரு condition-ஆலும் இணைக்கப்படாமல் இரண்டும் தனித்தனியாக அமைந்தால் அது non-correlated subquery எனப்படும்.
அதாவது வெறும் subquery-ஐ மட்டும் தனியாக எடுத்து execute செய்தால் கூட ஏதேனும் ஒரு் result கிடைக்கும். மேற்கண்ட உதாரணத்தில் நாம் பயன்படுத்தியிருப்பது non-correlated subquery வகையைச் சேர்ந்தது.
Correlated Subquery
sub query-யில் உள்ள table-ம், வெளியில் இருக்கும் main query-யில் உள்ள table-ம் ஏதேனும் ஒரு் condition-ஆல் இணைக்கப்பட்டிருந்தால் அது correlated subquery எனப்படும்.
அதாவது இத்தகைய sub query-ஆல் தனியாக இயங்க இயலாது. வெளியில் இருக்கும் query-உடன் சேர்த்து இயக்கினால் மட்டுமே அது result-ஐக் கொடுக்கும்.
Query-56
SELECT * FROM organisation org
WHERE exists (SELECT * FROM ITDepartment itd WHERE org.department = itd.dept_name);
Correlated Subquery – main query-யில் உள்ள table- உள்ள for each record it will execute and condition match it will give results. Non Correlate Subquery will execute only once for the Main Query and filter the data based on result.