Articles

SQL gecorreleerde Subquery

samenvatting: in deze tutorial leert u over de SQL gecorreleerde subquery, een subquery die waarden uit de buitenste query gebruikt.

Inleiding tot SQL gecorreleerde subquery

laten we beginnen met een voorbeeld.

zie de volgende employees tabel in de voorbeelddatabase:

SQL gecorreleerde Subquery: Tabel werknemers

De volgende query vindt de werknemer wiens salaris hoger is dan het gemiddelde salaris van alle werknemers:

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

In dit voorbeeld, de subquery wordt gebruikt in de WHERE component. Er zijn enkele punten die u kunt zien in deze query:

eerst kunt u de subquery uitvoeren die het gemiddelde salaris van alle werknemers onafhankelijk retourneert.

SELECT AVG(salary)FROM employees;

ten tweede hoeft het databasesysteem de subquery slechts één keer te evalueren.

ten derde maakt de buitenste query gebruik van het resultaat dat uit de subquery wordt geretourneerd. De buitenste query hangt af van de subquery voor zijn waarde. De subquery is echter niet afhankelijk van de buitenste query. Soms noemen we dit subquery is een gewone subquery.

In tegenstelling tot een gewone subquery is een gecorreleerde subquery een subquery die de waarden van de buitenste query gebruikt. Ook kan een gecorreleerde subquery eenmaal worden geëvalueerd voor elke rij geselecteerd door de buitenste query. Hierdoor kan een query die een gecorreleerde subquery gebruikt traag zijn.

een gecorreleerde subquery is ook bekend als een herhalende subquery of een gesynchroniseerde subquery.

SQL gecorreleerde subquery voorbeelden

laten we nog enkele voorbeelden van de gecorreleerde subqueries bekijken om ze beter te begrijpen.

SQL gecorreleerde subquery in de WHERE clausule voorbeeld

De volgende query vindt alle werknemers met een salaris dat hoger is dan het gemiddelde salaris van de werknemers in hun afdelingen:

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;

Hier is de output:

SQL Gecorreleerde Subquery Voorbeeld

In dit voorbeeld, de buitenste query is:

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

en de gecorreleerde subquery is:

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

Voor elke werknemer, de database systeem heeft voor het uitvoeren van de gecorreleerde subquery eenmaal voor het berekenen van het gemiddelde salaris van de werknemers in de afdeling van de huidige werknemer.

SQL gecorreleerde subquery in het Select clause voorbeeld

de volgende query geeft de werknemers en het gemiddelde salaris van alle werknemers in hun afdelingen:

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;

De output is:

SQL gecorreleerde Subquery in select clause

voor elke werknemer moet het databasesysteem de gecorreleerde subquery één keer uitvoeren om het gemiddelde salaris van de afdeling van de werknemer te berekenen.

SQL gecorreleerde subquery met exist operatorvoorbeeld

we gebruiken vaak een gecorreleerde subquery met de EXISTS operator. Bijvoorbeeld de volgende query worden alle medewerkers die geen personen ten laste:

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;

De volgende afbeelding toont de output:

SQL Gecorreleerde Subquery met BESTAAT operator

In deze tutorial, heb je geleerd over de SQL-gecorreleerde subquery en hoe deze toe te passen in de vorm van een complexe query.

  • Was deze tutorial nuttig ?
  • YesNo