SQL corelat subquery
rezumat: în acest tutorial, veți afla despre SQL corelat subquery, care este o subquery care utilizează valori din interogarea exterioară.
Introducere în SQL corelate subquery
să începem cu un exemplu.
vedeți următorul tabel employees
din Baza de date eșantion:
următoarea interogare găsește angajații al căror salariu este mai mare decât salariul mediu al tuturor angajaților:
SELECT employee_id, first_name, last_name, salaryFROM employeesWHERE salary > (SELECT AVG(salary) FROM employees);
în acest exemplu, subinterogarea este utilizată în clauza WHERE
. Există câteva puncte pe care le puteți vedea din această interogare:
În primul rând, puteți executa subquery-ul care returnează Salariul mediu al tuturor angajaților în mod independent.
SELECT AVG(salary)FROM employees;
În al doilea rând, sistemul de baze de date trebuie să evalueze subinterogarea o singură dată.
În al treilea rând, interogarea exterioară folosește rezultatul returnat din subinterogare. Interogarea exterioară depinde de subinterogare pentru valoarea sa. Cu toate acestea, subinterogarea nu depinde de interogarea exterioară. Uneori, numim acest subquery este un subquery simplu.
spre deosebire de o subinterogare simplă, o subinterogare corelată este o subinterogare care utilizează valorile din interogarea exterioară. De asemenea, o subinterogare corelată poate fi evaluată o dată pentru fiecare rând selectat de interogarea exterioară. Din această cauză, o interogare care utilizează o subinterogare corelată poate fi lentă.
o subinterogare corelată este, de asemenea, cunoscută sub numele de subinterogare repetată sau subinterogare sincronizată.
SQL corelate subquery Exemple
să vedem câteva exemple de subqueries corelate pentru a le înțelege mai bine.
SQL corelat subquery în exemplul clauzei WHERE
următoarea interogare găsește toți angajații al căror salariu este mai mare decât salariul mediu al angajaților din departamentele lor:
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;
aici este rezultatul:
în acest exemplu, interogarea exterioară este:
SELECT employee_id, first_name, last_name, salary, department_idFROM employees eWHERE salary >...
și subquery-ul corelat este:
SELECT AVG( list_price )FROM productsWHERE category_id = p.category_id
pentru fiecare angajat, sistemul de baze de date trebuie să execute o dată Subinterogarea corelată pentru a calcula salariul mediu al angajaților din departamentul angajatului curent.
SQL corelated subquery în exemplul clauzei SELECT
următoarea interogare returnează angajații și salariul mediu al tuturor angajaților din departamentele lor:
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;
rezultatul este:
pentru fiecare angajat, sistemul de baze de date trebuie să execute subinterogarea corelată o dată pentru a calcula salariul mediu de către Departamentul angajatului.
SQL corelat subquery cu exist exemplu operator
folosim adesea o subquery corelat cuEXISTS
operator. De exemplu, următoarea interogare returnează toți angajații care nu au în întreținere:
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;
următoarea imagine arată ieșirea:
în acest tutorial, ați învățat despre subinterogarea corelată SQL și cum să o aplicați pentru a forma o interogare complexă.
- a fost util acest tutorial ?
- YesNo
Leave a Reply