Articles

SQL Korrelert Subquery

Sammendrag: I denne opplæringen vil du lære om SQL korrelert subquery som er en subquery som bruker verdier fra den ytre spørringen.

Introduksjon TIL SQL korrelert subquery

La oss starte med et eksempel.

Se følgendeemployees tabell i eksempeldatabasen:

SQL Korrelert Subquery: Ansatte Tabell

følgende spørring finner ansatte hvis lønn er større enn gjennomsnittslønnen for alle ansatte:

SELECT employee_id, first_name, last_name, salaryFROM employeesWHERE salary > (SELECT AVG(salary) FROM employees);
SQL Subquery eksempel

i dette eksemplet brukes delspørringen i WHERE – klausulen. Det er noen poeng du kan se fra denne spørringen:

Først kan du utføre subquery som returnerer gjennomsnittslønnen til alle ansatte uavhengig.

SELECT AVG(salary)FROM employees;

for Det Andre må databasesystemet bare evaluere subquery en gang.

Tredje, den ytre spørringen gjør bruk av resultatet returnert fra subquery. Den ytre spørringen avhenger av delspørringen for verdien. Delspørringen er imidlertid ikke avhengig av den ytre spørringen. Noen ganger kaller vi dette subquery er en vanlig subquery.

i Motsetning til en vanlig delspørring, er en korrelert delspørring en delspørring som bruker verdiene fra den ytre spørringen. En korrelert delspørring kan også evalueres en gang for hver rad valgt av den ytre spørringen. På grunn av dette kan en spørring som bruker en korrelert delspørring være treg.

en korrelert delspørring er også kjent som en gjentatt delspørring eller en synkronisert delspørring.

SQL korrelerte subquery eksempler

La oss se noen flere eksempler på de korrelerte subqueries å forstå dem bedre.

SQL korrelert subquery i WHERE-klausuleksemplet

følgende spørring finner alle ansatte hvis lønn er høyere enn gjennomsnittslønnen til de ansatte i sine avdelinger:

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;

her er utgangen:

SQL Korrelert Subquery Eksempel

i dette eksemplet er den ytre spørringen:

SELECT employee_id, first_name, last_name, salary, department_idFROM employees eWHERE salary >...

og den korrelerte subquery er:

SELECT AVG( list_price )FROM productsWHERE category_id = p.category_id

for hver ansatt må databasesystemet UTFØRE Den Korrelerte Subquery en gang for å beregne gjennomsnittslønnen til de ansatte i avdelingen til den nåværende ansatt.

SQL korrelert subquery i SELECT-setningseksemplet

følgende spørring returnerer de ansatte og gjennomsnittslønnen for alle ansatte i sine avdelinger:

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;

utgangen er:

SQL Korrelert subquery i select clause

for hver ansatt må databasesystemet utføre det korrelerte subquery en gang for å beregne gjennomsnittslønnen av den ansattes avdeling.

SQL korrelert subquery MED EXISTS operator eksempel

Vi bruker ofte en korrelert subquery medEXISTS operatoren. Følgende spørring returnerer for eksempel alle ansatte som ikke har noen avhengige:

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;

følgende bilde viser utdataene:

SQL Korrelert Subquery MED exists operator

i denne opplæringen har du lært om sql-korrelert subquery og hvordan du bruker den til å danne en kompleks spørring.

  • Var denne opplæringen nyttig ?
  • YesNo