Articles

SQL-korrelerad underfråga

sammanfattning: i den här handledningen lär du dig om SQL-korrelerad underfråga som är en underfråga som använder värden från den yttre frågan.

introduktion till SQL-korrelerad subquery

låt oss börja med ett exempel.

se följandeemployees tabell i provdatabasen:

SQL-korrelerad underfråga: Anställda tabell

följande fråga hittar anställda vars lön är större än medellönen för alla anställda:

SELECT employee_id, first_name, last_name, salaryFROM employeesWHERE salary > (SELECT AVG(salary) FROM employees);
SQL Subquery exempel

i det här exemplet används underfrågan i WHERE – klausulen. Det finns några punkter som du kan se från den här frågan:

först kan du utföra underfrågan som returnerar medellönen för alla anställda självständigt.

SELECT AVG(salary)FROM employees;

För det andra behöver databassystemet bara utvärdera underfrågan en gång.

För det tredje använder den yttre frågan resultatet som returneras från underfrågan. Den yttre frågan beror på underfrågan för dess värde. Underfrågan beror dock inte på den yttre frågan. Ibland, vi kallar detta subquery är en vanlig subquery.

Till skillnad från en vanlig underfråga är en korrelerad underfråga en underfråga som använder värdena från den yttre frågan. Dessutom kan en korrelerad underfråga utvärderas en gång för varje rad som valts av den yttre frågan. På grund av detta kan en fråga som använder en korrelerad underfråga vara långsam.

en korrelerad subquery är också känd som en upprepande subquery eller en synkroniserad subquery.

SQL korrelerade subquery exempel

Låt oss se några fler exempel på de korrelerade subqueries att förstå dem bättre.

SQL-korrelerad underfråga i WHERE-klausulexemplet

följande fråga hittar alla anställda vars lön är högre än medellönen för de anställda i deras avdelningar:

SELECT employee_id, first_name, last_name, salary, department_idFROM employees eWHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = e.department_id)ORDER BY department_id , first_name , last_name;

här är utmatningen:

SQL korrelerade Subquery exempel

i det här exemplet är den yttre frågan:

SELECT employee_id, first_name, last_name, salary, department_idFROM employees eWHERE salary >...

och den korrelerade subquery är:

SELECT AVG( list_price )FROM productsWHERE category_id = p.category_id

för varje anställd måste databassystemet utföra den korrelerade Underfrågan en gång för att beräkna medellönen för de anställda i avdelningen för den nuvarande medarbetaren.

SQL korrelerade subquery i SELECT klausul exempel

följande fråga returnerar de anställda och den genomsnittliga lönen för alla anställda i sina avdelningar:

SELECT employee_id, first_name, last_name, department_name, salary, (SELECT ROUND(AVG(salary),0) FROM employees WHERE department_id = e.department_id) avg_salary_in_departmentFROM employees e INNER JOIN departments d ON d.department_id = e.department_idORDER BY department_name, first_name, last_name;

utgången är:

SQL korrelerade Subquery I välj klausul

för varje anställd måste databassystemet utföra den korrelerade underfrågan en gång för att beräkna medellönen av arbetstagarens avdelning.

SQL korrelerad underfråga med existerar operatörsexempel

vi använder ofta en korrelerad underfråga medEXISTS operatör. Till exempel returnerar följande fråga alla anställda som inte har några anhöriga:

SELECT employee_id, first_name, last_nameFROM employees eWHERE NOT EXISTS( SELECT * FROM dependents d WHERE d.employee_id = e.employee_id)ORDER BY first_name , last_name;

följande bild visar utmatningen:

SQL korrelerad Subquery med EXISTS operator

i den här handledningen har du lärt dig om SQL-korrelerade underfrågan och hur du tillämpar den för att bilda en komplex fråga.

  • var denna handledning till hjälp ?
  • YesNo