முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 4 · பாடம் 4 இன் 4பாடத்திட்டத்தில் 16/57~12 min
தொகுதி பாடங்கள் (4/4)

இன்னொன்றின் உள்ளே ஒரு வினவல்: துணை வினவல்கள்

பிரித்தெடுத்தல், வடிகட்டுதல், குழுவாகச் சேர்வது மற்றும் மாற்றுவது எப்படி என்பதை நீங்கள் கற்றுக்கொண்டீர்கள். அங்கு ஒரு கடைசி அடிப்படை யோசனை: ** ஒரு வினவலை இன்னொருவருக்குள் வைப்பது**. இவை துணை வினவல்கள் என்று அழைக்கப்படுகிறது, மேலும் அவை கேள்விகளுக்கு பதிலளிக்க உங்களை அனுமதிக்கும் படியாகும் "சராசரிக்கு மேல் சம்பாதிப்பவர் யார்?" அல்லது "எந்த துறைகளில் ஒருவர் இருக்கிறார் ஒரு திட்டத்திற்கு ஒதுக்கப்பட்டுள்ளதா?".

அடிப்படை தொடரியல்

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

SQL
-- Find who earns MORE THAN THE COMPANY AVERAGE:
SELECT first_name, last_name, salary
FROM   employees
WHERE  salary > (SELECT AVG(salary) FROM employees);

இயந்திரம் முதலில் துணை வினவலை இயக்குகிறது — SELECT AVG(salary) FROM employees ஒற்றை எண்ணை தருகிறது — பின்னர் அந்த எண்ணை வெளியில் WHERE பயன்படுத்துகிறது நீங்கள் கையால் எழுதியது போல். இது துல்லியமாக நன்மை: நீங்கள் செய்கிறீர்கள் சராசரியை முன்கூட்டியே தெரிந்து கொள்ள வேண்டிய அவசியமில்லை, SQL அதை உங்களுக்காக கணக்கிடுகிறது.

மிகவும் பொதுவான மூன்று "வகைகள்"

1. துணை வினவல் ஒற்றை மதிப்பை வழங்கும்

மேலே உள்ள எடுத்துக்காட்டு: துணை வினவல் ஒரு வரிசை, ஒரு நெடுவரிசை (அழைக்கப்படும் ஸ்கேலார்). நீங்கள் அதை =, >, < மற்றும் பலவற்றுடன் பயன்படுத்துகிறீர்கள்.

SQL
-- Employee with the highest salary:
SELECT first_name, last_name
FROM   employees
WHERE  salary = (SELECT MAX(salary) FROM employees);

2. துணை வினவல் ஒரு பட்டியலைத் திருப்பி அனுப்புகிறது

துணை வினவல் ** ஒரு நெடுவரிசை, பல வரிசைகளை** உருவாக்குகிறது. நீங்கள் அதை பயன்படுத்த IN (...):

SQL
-- Departments that have at least one employee:
SELECT name
FROM   departments
WHERE  id IN (SELECT DISTINCT department_id
              FROM employees
              WHERE department_id IS NOT NULL);

3. துணை வினவல் ஒரு "அட்டவணை" (FROM)

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

SQL
-- Departments with average salary above 40000:
SELECT d.name, medie.stipendio_medio
FROM   departments AS d
JOIN  (SELECT department_id, AVG(salary) AS stipendio_medio
       FROM employees
       GROUP BY department_id) AS medie
   ON d.id = medie.department_id
WHERE  medie.stipendio_medio > 40000;

துணை வினவல் அல்லது சேரவா? எதை எப்போது பயன்படுத்த வேண்டும்

பெரும்பாலும் அதே முடிவை JOIN அல்லது துணை வினவல் மூலம் பெறலாம். கட்டைவிரல் விதி:

  • ஒரு அட்டவணையின் வரிசைகளை மற்றொன்றின் சொத்தின் அடிப்படையில் வடிகட்டும் ("பணியாளர்கள் யாருடைய துறைகள்..."), IN (subquery) மிகவும் படிக்கக்கூடியது.
  • பல அட்டவணைகளில் இருந்து ** நெடுவரிசைகளை ஒருங்கிணைக்க, JOIN ஐப் பயன்படுத்தவும்.
  • ஒரு மொத்தத்தை கணக்கிட்டு அதை வாசலாகப் பயன்படுத்த ("மேலே சராசரி"), அளவிடல் துணை வினவல் என்பது இயற்கையான தேர்வாகும்.

நடைமுறையில் நீங்கள் இரண்டையும் காண்பீர்கள்: SQL இயந்திரம் பெரும்பாலும் அவற்றை ஒரே மாதிரியாக மேம்படுத்துகிறது வழி. சிறப்பாகப் படிக்கும் படிவத்தைத் தேர்ந்தெடுக்கவும்.

முயற்சி செய்து பாருங்கள்

உடற்பயிற்சி#sql.m4.l4.e1
முயற்சிகள்: 0ஏற்றுகிறது…

நிறுவனத்தின் சராசரியை விட கண்டிப்பாக அதிகமாக சம்பாதிக்கும் ஊழியர்களின் முதல் பெயர் (முதல்_பெயர்), கடைசி பெயர் (இறுதி_பெயர்) மற்றும் சம்பளம் (சம்பளம்) ஆகியவற்றைக் கண்டறியவும். மூன்று நெடுவரிசைகள்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

மாற்றவா? பணியாளர்களிடமிருந்து SELECT AVG(சம்பளம்) என்ற துணைக் கேள்வியுடன் - இது வாசலாகப் பயன்படுத்த ஒற்றை எண்ணை வழங்குகிறது.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

மதிப்பாய்வு பயிற்சி

உடற்பயிற்சி#sql.m4.l4.e2
முயற்சிகள்: 0ஏற்றுகிறது…

50000க்கும் அதிகமாக சம்பளம் பெற்ற குறைந்தபட்சம் ஒரு பணியாளரையாவது கொண்ட துறைகளின் பெயரை (departments.name) பட்டியலிடவும். IN உடன் துணை வினவலைப் பயன்படுத்தவும். அகரவரிசைப்படி ஆர்டர் செய்யவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

உள் துணை வினவல் > 50000 சம்பளம் உள்ள ஊழியர்களைக் கொண்ட துறைகளின் ஐடிகளை வழங்குகிறது. பின்னர் வெளிப்புற வினவலில் எங்க ஐடி (...) என்று இருக்கும்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்