Articles

SQL Correlated Subquery

Summary: tässä opetusohjelmassa opit SQL correlated subquery, joka on alakerros, joka käyttää arvoja ulommasta kyselystä.

Johdatus SQL: n korreloivaan alalajiin

aloitetaan esimerkillä.

katso seuraava employees taulukko otostietokannassa:

SQL-Korrelaatiosubjekti: Työntekijätaulukko

seuraava kysely löytää työntekijät, joiden palkka on suurempi kuin kaikkien työntekijöiden keskipalkka:

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

tässä esimerkissä alaluokkaa käytetään WHERE lausekkeessa. Tästäkin kyselystä voi päätellä muutamia seikkoja:

ensin voi toteuttaa kaikkien työntekijöiden keskipalkkaa palauttavan alikeräyksen itsenäisesti.

SELECT AVG(salary)FROM employees;

toiseksi tietokantajärjestelmän tarvitsee arvioida alakerta vain kerran.

kolmanneksi ulompi kysely hyödyntää alivoimalta palautetun tuloksen. Ulompi kysely riippuu alakerrasta sen arvosta. Alalaji ei kuitenkaan riipu uloimmasta kysynnästä. Joskus kutsumme tätä subquery on tavallinen subquery.

toisin kuin tavallinen alikvenssi, korreloiva alikvenssi on alikvenssi, joka käyttää ulomman kyselyn arvoja. Myös korreloiva alakerros voidaan arvioida kerran jokaiselle ulomman kyselyn valitsemalle riville. Tämän vuoksi kysely, jossa käytetään korreloivaa alakerrosta, voi olla hidas.

korreloiva alakvenssi tunnetaan myös toistuvana alakventtinä tai synkronoituna alakventtinä.

SQL: n korreloivat alikvenssiesimerkit

katsotaan vielä muutamia esimerkkejä korreloivista alikvensseistä ymmärtääksemme niitä paremmin.

SQL correlated subquery in the WHERE clause example

seuraava kysely löytää kaikki työntekijät, joiden palkka on korkeampi kuin heidän osastojensa työntekijöiden keskipalkka:

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;

tässä on ulostulo:

SQL Correlated Subquery Example

tässä esimerkissä ulompi kysely on:

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

ja korreloiva alaluokka on:

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

jokaisen työntekijän osalta tietokantajärjestelmän on suoritettava korreloiva alaluokka kerran laskiakseen nykyisen työntekijän osaston työntekijöiden keskipalkan.

SQL correlated subquery in the SELECT clause example

the following query returns the employees and the average salary of all employees in their departments:

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;

the output is:

SQL Correlated alaluokassa select clause

kunkin työntekijän osalta tietokantajärjestelmän on suoritettava korreloiva alaluku kerran laskiakseen keskipalkan työntekijän osaston mukaan.

SQL: n korreloiva alikvenssi olemassa olevan operaattoriesimerkin kanssa

käytämme usein korreloivaa alikvenssiä EXISTS operaattori. Esimerkiksi seuraava kysely palauttaa kaikki työntekijät, joilla ei ole huollettavia:

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;

seuraava kuva näyttää tuotoksen:

SQL korreloi Alikentän kanssa olemassa oleva operaattori

tässä opetusohjelmassa olet oppinut SQL: n korreloivasta alakuvauksesta ja siitä, miten sitä voi soveltaa monimutkaisen kyselyn muodostamiseen.

  • Auttoiko tämä opetusohjelma?
  • YesNo