Correlated Subquery
Correlated Subquery๋ ๋ด๋ถ Subquery์์ ์ธ๋ถํ ์ด๋ธ์ ๊ฐ์ ์ฐธ์กฐํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. Subquery์๋ ๋ค๋ฅด๊ฒ Inner Query ๋ถํฐ Outer Query ์์๋๋ก ์คํ๋๋ ๊ฒ์ด ์๋๋ผ Outer Query์์ ์ฝ์ด์จ ํ์ ๊ฐ๊ณ Inner์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๊ฒ์ ๋ฐ๋ณตํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํด์ค๋๋ค. Outer Query์ Inner Query์์ ๊ฐ์ ํ ์ด๋ธ์ ์ฐธ์กฐํ๋ค๋ฉด Outer Query์ ํ ์ด๋ธ์ Alias๋ฅผ ์ฌ์ฉํด์ ๊ตฌ๋ถํด์ค๋๋ค.
์์๋ฌธ์
Oracle HR ๊ณ์ Employees ํ ์ด๋ธ์ ์ฌ์ฉํด์
์์๋ ๋ถ์์ ํ๊ท ๊ธ์ฌ๋ณด๋ค ๋ง์ ๊ธ์ฌ๋ฅผ ๋ฐ๋ ์ฌ์์ ์ถ๋ ฅํ์์ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SELECT
FIRST_NAME
,JOB_ID
,DEPARTMENT_ID
,SALARY
FROM EMPLOYEES E
WHERE SALARY > (
SELECT
ROUND(AVG(SALARY))
FROM EMPLOYEES
WHERE DEPARTMENT_ID = E.DEPARTMENT_ID
)
AND DEPARTMENT_ID < 60;
|
Nested Subquery๋ฅผ ์ฌ์ฉํด์ ์ ์ฒด ์ฌ์์ ํ๊ท ๊ธ์ฌ๋ฅผ ๊ตฌํ๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋, ๋ง์ฝ ๊ฐ๊ฐ ์ฌ์๋ค์ ์์๋์ด ์๋ ๋ถ์์ ํ๊ท ๊ธ์ฌ๋ฅผ ๊ตฌํ๊ธฐ ์ํด์ Correlated Subquery๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
1๋จ๊ณ. Subquery ๋ด์์ Main Query์ ํ ์ด๋ธ์ ์ฐธ์กฐํ๋ ๊ฒ์ ํ์ธํ๊ณ Main Query์์์ ํ๋ณดํ์ ๋ฐ์ ์กฐ๊ฑด์ ๋ถํฉ๋๋ ๊ฐ์ ์ป์ต๋๋ค. ์์ ์์๋ Subquery์์ Main Query์์์ ์ฒซ๋ฒ์งธ ํ์ ๋ค๊ณ ์ฌ์ ์ ๋ณด์์ ํด๋น ๋ถ์์ ํ๊ท ๊ธ์ฌ๋ฅผ ๊ตฌํฉ๋๋ค.
2๋จ๊ณ. Subquery์์ ์ป์ ๋ถ์์ ํ๊ท ๊ธ์ฌ ๊ฐ๊ณผ Main Query์ ์ฒซ๋ฒ์งธ ๊ฐ์ ๋น๊ตํ์ฌ ํด๋น ํ์ ์ถ๋ ฅ์ ํฌํจ์ํฌ์ง ์ ํฉ๋๋ค.
3๋จ๊ณ. Main Query์ ๋๋ฒ์งธ ํ์ผ๋ก ๋์ด๊ฐ ์ ๋จ๊ณ๋ฅผ ๋๊ฐ์ด ์งํํ์ฌ ๋ง์ง๋ง ํ๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
๋๊ธ