SQL Correlated Subquery
Podsumowanie: w tym samouczku dowiesz się o SQL correlated subquery, który jest subquery, który wykorzystuje wartości z zewnętrznego zapytania.
Wprowadzenie do skorelowanego podquery SQL
zacznijmy od przykładu.
zobacz następującą tabelęemployees
w przykładowej bazie danych:

następujące zapytanie wyszukuje pracowników, których wynagrodzenie jest wyższe niż przeciętne wynagrodzenie wszystkich pracowników:
SELECT employee_id, first_name, last_name, salaryFROM employeesWHERE salary > (SELECT AVG(salary) FROM employees);

w tym przykładzie podquery są używane w klauzuli WHERE
. Jest kilka punktów, które możesz zobaczyć z tego zapytania:
najpierw możesz wykonać podzapytanie, które niezależnie Zwraca średnią pensję wszystkich pracowników.
SELECT AVG(salary)FROM employees;
Po drugie, system bazodanowy musi ocenić podquery tylko raz.
Po Trzecie, zapytanie zewnętrzne wykorzystuje wynik zwracany z zapytania podrzędnego. Zapytanie zewnętrzne zależy od wartości zapytania podrzędnego. Jednak zapytanie podrzędne nie zależy od zapytania zewnętrznego. Czasami nazywamy to podzbiorem.
w przeciwieństwie do zwykłego podzapytania, skorelowane podzapytanie jest podzapytaniem, które używa wartości z zapytania zewnętrznego. Ponadto skorelowane podzapytanie może być ocenione raz dla każdego wiersza wybranego przez zapytanie zewnętrzne. Z tego powodu zapytanie, które używa skorelowanego podzapytania, może być powolne.
skorelowane podquery są również znane jako powtarzające się podquery lub zsynchronizowane podquery.
przykłady skorelowanych pod-zapytań SQL
zobaczmy jeszcze kilka przykładów skorelowanych pod-zapytań, aby lepiej je zrozumieć.
subquery skorelowane SQL w przykładzie klauzuli WHERE
następujące zapytanie wyszukuje wszystkich pracowników, których wynagrodzenie jest wyższe niż przeciętne wynagrodzenie pracowników w ich działach:
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;
oto wynik:

w tym przykładzie zewnętrzne zapytanie to:
SELECT employee_id, first_name, last_name, salary, department_idFROM employees eWHERE salary >...
i skorelowane subquery to:
SELECT AVG( list_price )FROM productsWHERE category_id = p.category_id
dla każdego pracownika system bazodanowy musi wykonać skorelowane Subquery raz, aby obliczyć średnią pensję pracowników w dziale obecnego pracownika.
subquery skorelowane SQL w przykładzie klauzuli SELECT
następujące zapytanie zwraca pracowników i średnie wynagrodzenie wszystkich pracowników w ich działach:
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;
Wyjście To:

dla każdego pracownika system bazodanowy musi wykonać skorelowane subquery raz, aby obliczyć średnią pensję przez dział pracownika.
skorelowany podquery SQL z operatorem EXISTS przykład
często używamy skorelowanego podquery z operatoremEXISTS
. Na przykład, poniższe zapytanie zwraca wszystkich pracowników, którzy nie są zależni:
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;
poniższy rysunek pokazuje dane wyjściowe:

w tym samouczku nauczyłeś się o skorelowanym podzapytaniu sql i jak go zastosować do utworzenia złożonego zapytania.
- czy ten tutorial był pomocny ?
- YesNo
Leave a Reply