Articles

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:

SQL Korelační Poddotaz: Zaměstnanci Tabulka

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);
SQL Poddotaz příklad

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:

SQL Korelační Poddotaz Příklad

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:

SQL Korelační Poddotaz v VYBERTE klauzule

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:

SQL Korelační Poddotaz s EXISTUJE operátor

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