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:
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);
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:
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:
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:
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
Leave a Reply