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:
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);
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:
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:
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:
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
Leave a Reply