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:
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);
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:
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:
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:
tässä opetusohjelmassa olet oppinut SQL: n korreloivasta alakuvauksesta ja siitä, miten sitä voi soveltaa monimutkaisen kyselyn muodostamiseen.
- Auttoiko tämä opetusohjelma?
- YesNo
Leave a Reply