SQL Korelační Poddotaz
Shrnutí: v tomto tutoriálu, se dozvíte o SQL korelační poddotaz, který je poddotaz, který používá hodnoty z vnějšího dotazu.
Úvod do SQL korelovaného poddotazu
začněme příkladem.
Viz následující employees
tabulky v ukázkové databázi:
následující dotaz najde zaměstnanců, jejichž plat je vyšší než průměrný plat všech zaměstnanců.
SELECT employee_id, first_name, last_name, salaryFROM employeesWHERE salary > (SELECT AVG(salary) FROM employees);
V tomto příkladu, poddotazu použít v WHERE
klauzule. Z tohoto dotazu můžete vidět několik bodů:
nejprve můžete provést poddotaz, který vrací průměrnou mzdu všech zaměstnanců nezávisle.
SELECT AVG(salary)FROM employees;
za druhé, databázový systém musí poddotaz vyhodnotit pouze jednou.
třetí, vnější dotaz využívá výsledek vrácený z poddotazu. Vnější dotaz závisí na poddotazu pro jeho hodnotu. Poddotaz však nezávisí na vnějším dotazu. Někdy říkáme, že tento poddotaz je prostý poddotaz.
Na rozdíl od prostého poddotazu je korelovaný poddotaz poddotaz, který používá hodnoty z vnějšího dotazu. Také korelovaný poddotaz může být vyhodnocen jednou pro každý řádek vybraný vnějším dotazem. Z tohoto důvodu může být dotaz, který používá korelovaný poddotaz, pomalý.
korelovaný poddotaz je také známý jako opakující se poddotaz nebo synchronizovaný poddotaz.
SQL correlated subquery examples
podívejme se na několik dalších příkladů korelovaných poddotazů, abychom jim lépe porozuměli.
SQL korelační poddotaz v klauzule where příklad
následující dotaz najde všechny zaměstnance, jejichž plat je vyšší než průměrný plat zaměstnanců v jejich odděleních:
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;
Zde je výstup:
V tomto příkladu, vnější dotaz je:
SELECT employee_id, first_name, last_name, salary, department_idFROM employees eWHERE salary >...
a korelační poddotaz je:
SELECT AVG( list_price )FROM productsWHERE category_id = p.category_id
Pro každého zaměstnance, databáze systém musí provést korelační poddotaz jednou pro výpočet průměrné mzdy zaměstnanců v oddělení současné zaměstnance.
SQL korelační poddotaz v klauzule SELECT příklad:
následující dotaz vrátí zaměstnanci a průměrný plat všech zaměstnanců v jejich odděleních:
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;
výstup je:
Pro každého zaměstnance, databáze systém musí provést korelační poddotaz jednou pro výpočet průměrné mzdy, kterou zaměstnanec oddělení.
SQL korelovaný poddotaz s existujícím operátorem příklad
často používáme korelovaný poddotaz s operátorem EXISTS
. Například následující dotaz vrátí všechny zaměstnance, kteří nemají závislé:
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;
následující obrázek ukazuje výstup:
V tomto kurzu, jste se naučili o SQL korelační poddotaz a jak to použít k vytvoření složitých dotazů.
- byl tento návod užitečný ?
- YesNo
Leave a Reply