SQL இல் உள்ளமை வினவல்கள்

SQL மொழியானது ஒரு வினவலை மற்றொரு வினவலில் உள்ளமைக்க அனுமதிக்கிறது. குறியீட்டின் வாசிப்புத்திறன் வெகுவாகக் குறைக்கப்பட்டாலும், பெரிய மற்றும் சிக்கலான ஒன்றைச் செய்யும் மிகப் பெரிய வினவலை எழுதுவதை இது சாத்தியமாக்குகிறது.

துணை வினவல்கள் மூலம் எத்தனை மதிப்புகள் வழங்கப்படுகின்றன என்பதைப் பொறுத்து, அவற்றைப் பயன்படுத்தக்கூடிய பகுதி மாறுகிறது. மொத்தம் மூன்று விருப்பங்கள் உள்ளன:

  • துணை வினவல் ஒரு ஒற்றை மதிப்பை (ஒரு நெடுவரிசை மற்றும் ஒரு வரிசை) வழங்குகிறது.
  • துணை வினவல் மதிப்புகளின் பட்டியலை வழங்குகிறது (ஒரு நெடுவரிசை கொண்ட அட்டவணை).
  • துணை வினவல் அட்டவணையை வழங்குகிறது (பல நெடுவரிசைகள், எத்தனை வரிசைகள்).

ஒவ்வொரு வழக்கிற்கும் ஒரு உதாரணத்தைப் பார்ப்போம்.

ஸ்கேலர் முடிவுடன் துணை வினவல்

நிறுவனத்தின் சராசரி சம்பளத்தை விட அதிகமாக இருக்கும் பணியாளர் அட்டவணையில் இருந்து எங்களது அனைத்து ஊழியர்களின் பட்டியலைக் கண்டறியலாம். நாம் எப்படி அதை செய்ய முடியும்?

முன்கூட்டியே தெரிந்தால் ஊழியர்களின் சம்பளத்தை சராசரியுடன் ஒப்பிட்டு நாம் எளிதாக வடிகட்டலாம். அதே நேரத்தில், நிறுவனத்தின் ஊழியர்களின் சராசரி சம்பளத்தை கணக்கிட அனுமதிக்கும் வினவலை நாங்கள் ஏற்கனவே எழுதியுள்ளோம். அதை நினைவில் கொள்வோம்:

SELECT AVG(salary) FROM employee 

பின்னர் MySQL எங்களுக்கு மதிப்பு அளித்தது: 76833.3333 .

சராசரிக்கு மேல் சம்பளம் உள்ள அனைத்து ஊழியர்களின் பட்டியலை இப்போது எப்படி கண்டுபிடிப்பது? இது மிகவும் எளிமையானது:

 SELECT * FROM employee 
   WHERE salary > 76833.3333 

இந்த வினவலின் முடிவு இப்படி இருக்கும்:

ஐடி பெயர் தொழில் சம்பளம்
1 இவனோவ் இவான் புரோகிராமர் 100000
2 பெட்ரோவ் பெட்ர் புரோகிராமர் 80000
4 ரபினோவிச் மொய்ஷா இயக்குனர் 200000

இப்போது 76833 மதிப்புக்கு பதிலாக முதல் கோரிக்கையை மாற்றுவதன் மூலம் இரண்டு கோரிக்கைகளையும் இணைக்கிறோம்:

   SELECT * FROM employee 
   WHERE salary > (SELECT AVG(salary) FROM employee) 

இந்த வினவலின் முடிவு ஒரே மாதிரியாக இருக்கும்:

ஐடி பெயர் தொழில் சம்பளம்
1 இவனோவ் இவான் புரோகிராமர் 100000
2 பெட்ரோவ் பெட்ர் புரோகிராமர் 80000
4 ரபினோவிச் மொய்ஷா இயக்குனர் 200000

மதிப்புகளின் பட்டியலுடன் துணை வினவல்

ஒரு முறை எங்களிடம் ஒரு பணி இருந்தது உங்களுக்கு நினைவிருக்கிறதா - ஒரு அட்டவணையில் இருந்து அனைத்து பதிவுகளையும் கண்டுபிடிக்க வேண்டும், அதற்கான பதிவுகள் எதுவும் இல்லை?

இந்த படமும் இருந்தது:

நான் தவறாக நினைக்கவில்லை என்றால், பணி பின்வருமாறு: பணி அட்டவணையில் எந்த பணிகளும் இல்லாத பணியாளர் அட்டவணையில் இருந்து அனைத்து பணியாளர்களின் பட்டியலைக் காண்பி .

இரண்டு படிகளில் தீர்வு காண்போம்.

முதலில், பணி அட்டவணையில் பணிகளைக் கொண்டிருக்கும் அனைத்து ஊழியர்களின் ஐடியையும் வழங்கும் வினவலை எழுதுவோம். இரண்டு விஷயங்களை மட்டும் நினைவில் கொள்ளுங்கள்:

  • நகல்களை அகற்று - DISTINCT முக்கிய சொல்லைப் பயன்படுத்தவும்.
  • முடிவில் இருந்து NULL மதிப்புகளை அகற்றவும்.
SELECT DISTINCT employee_id FROM task 
   WHERE employee_id IS NOT NULL

அத்தகைய கோரிக்கையின் அழகான முடிவை இங்கே பெற்றுள்ளோம்:

பணியாளர்_ஐடி
1
2
5
4
6

1,2,5,4,6 என்ற வரிசையாக வசதிக்காக தற்காலிகமாக எழுதுவோம். இப்போது இரண்டாவது வினவலை எழுதுவோம் - பணியாளர் அட்டவணைக்கு, இது முதல் பட்டியலில் இல்லாத ஊழியர்களின் பட்டியலைத் தரும்:

SELECT * FROM employee  
WHERE id NOT IN (1,2,5,4,6)

மற்றும் இந்த வினவலின் முடிவு:

ஐடி பெயர் தொழில் சம்பளம் வயது சேரும் நாள்
3 இவனோவ் செர்ஜி சோதனையாளர் 40000 முப்பது 2014-01-01

இப்போது, ​​முந்தைய உதாரணத்தைப் போலவே, ஐடி பட்டியலுக்குப் பதிலாக முதல் கோரிக்கையின் உடலை மாற்றுவதன் மூலம் இரண்டு கோரிக்கைகளையும் இணைக்கலாம்.

 SELECT * FROM employee 
   WHERE id NOT IN ( 
      	SELECT DISTINCT employee_id FROM task 
      	WHERE employee_id IS NOT NULL 
   )