Articles

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:

subinterogare corelată SQL: Tabelul angajaților

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);
exemplu SQL Subquery

î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:

exemplu SQL subquery corelat

î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:

SQL Corelated subquery în selectați clauza

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:

SQL corelat Subquery cu operatorul există

î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