์๋ธ์ฟผ๋ฆฌ๋ ๋ฌด์์ธ๊ฐ?
์๋ธ์ฟผ๋ฆฌ๋ ๋ฉ์ธ์ฟผ๋ฆฌ์ ์ํด ์์ผ๋ฉฐ ๋ถ๋ชจ์ ์์๊ฐ์ ๊ณ์ธต์ ์ธ ๊ด๊ณ์ด๋ค. ์์์ด ๋ถ๋ชจ์ ์ํด์๋๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ธ์ฟผ๋ฆฌ๊ฐ ๋ฉ์ธ์ฟผ๋ฆฌ์ ์ข ์๋๊ธฐ ๋๋ฌธ์ ๋จ๋ ์ ์ผ๋ก ์คํํ ์ ์๊ณ ๋ฉ์ธ์ฟผ๋ฆฌ๋ฅผ ํํฐ๋งํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋๋ค.
*์๋ธ์ฟผ๋ฆฌ๋ ๋ฉ์ธ์ฟผ๋ฆฌ์ ์นผ๋ผ์ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ง๋ง, ๋ฉ์ธ์ฟผ๋ฆฌ๋ ์๋ธ์ฟผ๋ฆฌ์ ์นผ๋ผ์ ์ฌ์ฉํ ์ ์๋ค.
๋ฉ์ธ์ฟผ๋ฆฌ์์ ์๋ธ์ฟผ๋ฆฌ์ ์นผ๋ผ์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ๋ (์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ, ์ธ๋ผ์ธ ๋ทฐ)
์ง์ ๊ฒฐ๊ณผ์ ์๋ธ์ฟผ๋ฆฌ ์นผ๋ผ์ ํ์ํด์ผ ํ๋ค๋ฉด ์กฐ์ธ ๋ฐฉ์์ผ๋ก ๋ณํํ๊ฑฐ๋ ํจ์, ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ ๋ฑ์ ์ฌ์ฉํด์ผ ํ๋ค.
์ธ๋ผ์ธ ๋ทฐ๋ ๋์ ์ผ๋ก ์์ฑ๋ ํ ์ด๋ธ์ด๋ฏ๋ก ์ธ๋ผ์ธ ๋ทฐ์ ์ปฌ๋ผ(์ฆ, ์๋ธ์ฟผ๋ฆฌ์ ์ปฌ๋ผ)์ SQL๋ฌธ์์ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๋ค.
์๋ธ์ฟผ๋ฆฌ์ ์ข ๋ฅ๋ ํฌ๊ฒ 3๊ฐ์ง(์ค์นผ๋ผ, ์ธ๋ผ์ธ ๋ทฐ, ์ค์ฒฉ) ๋ก ์ด๋ ์์น์์ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ ๋ถ๋ฅ๋๋ค.
์ข ๋ฅ | ์ค๋ช |
์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ (Scalar Suquery) |
SELECT ์ ์ ์์นํ๋ฉฐ ํ ๋ ์ฝ๋๋น ์ ํํ ํ๋์ ๊ฐ์ ๋ฐํํ๋ ์๋ธ์ฟผ๋ฆฌ (๋จ์ผํ, ๋จ์ผ์นผ๋ผ์ ๋ฐํ) |
์ธ๋ผ์ธ ๋ทฐ (Inline View) |
FROM ์ ์ ์์นํ๋ ์๋ธ์ฟผ๋ฆฌ๋ก ๊ฒฐ๊ณผ๋ ๋ฐ๋์ ํ๋์ ํ ์ด๋ธ๋ก ๋ฆฌํด๋์ด์ผ ํ๋ค. |
์ค์ฒฉ ์๋ธ์ฟผ๋ฆฌ (Nested Subquery) |
WHERE ์ ์ ์์นํ๋ฉฐ ๊ฒฐ๊ณผ์งํฉ์ ํ์ ํ๊ธฐ ์ํ ์๋ธ์ฟผ๋ฆฌ๋ก, ์๋ธ์ฟผ๋ฆฌ๊ฐ ๋ฉ์ธ์ฟผ๋ฆฌ ์ปฌ๋ผ์ ์ฐธ์กฐํ ๋ ์๊ด๊ด๊ณ ์๋ ์๋ธ์ฟผ๋ฆฌ๋ผ๊ณ ํ๋ค. (๋จ์ผํ, ๋ค์คํ์ ๋ฐํ) |
1. ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ (Scalar Subquery)
SELECT ์ ์ ์์นํ๋ฉฐ ์นผ๋ผ์ ์ญํ ์ ํ๋ฏ๋ก ํด๋น ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ ๋ฐ๋์ ๋จ์ผ ํ or ๋จ์ผ ๊ฐ์ผ๋ก ๋ฆฌํด๋์ด์ผ ํ๋ค.
*๋ค์ค ํ ๊ฐ์ด ์กฐํ๋๋ฉด "ORA-01427: single-row subquery returns more than one row" ๋ผ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฏ๋ก ์ฃผ์
# ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ (Scalar Subquery)
# ์) ๊นํ์์ ํ์ ์กฐํ
SELECT ์ด๋ฆ,(
SELECT ํ์ํ์ .ํ์
FROM ํ์ํ์
WHERE ํ์ํ์ .ํ์ID = ํ์.ํ์ID
)AS ํ์
FROM ํ์ WHERE ์ด๋ฆ = '๊นํ์';
2. ์ธ๋ผ์ธ ๋ทฐ (Inline View)
FROM ์ ์ ์์นํ๋ฉฐ ํ ์ด๋ธ์ ์ผ๋ถ ๋ฐ์ดํฐ๋ง์ ๋ถ๋ฌ์ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ๋จ์ํ ํ ์ ์์ผ๋ฉฐ, ์ฟผ๋ฆฌ์ ๊ฐ๋ ์ฑ์ด ๋๋ค.
ํด๋น ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ ๋ฐ๋์ ํ๋์ ํ ์ด๋ธ๋ก ๋ฆฌํด๋์ด์ผ ํ๋ค.
์ธ๋ผ์ธ ๋ทฐ๋ SQL๋ฌธ์ด ์คํ๋ ๋ ์์์ ์ผ๋ก ์์ฑ๋๋ ๋์ ์ธ ๋ทฐ ๋ก ์ด์ ๊ฐ์ ๋ทฐ๋ฅผ Dynamic View ๋ผ๊ณ ๋ถ๋ฅธ๋ค.(↔ ์ ์ ๋ทฐ(Static VIew))
๋จ์ : SQL์ ์ข๋ ๋น ๋ฅธ ์๋๋ก ์ฌ์ฉํ๊ธฐ ์ํ๊ฒ์ด ์ธ๋ผ์ธ ๋ทฐ์ด์ง๋ง, SQL์ ๊ตฌ์ฑํ ๋ ์๋ชป ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ก์ธ์ค ์๋๋ฅผ ์ ํ ์ํค๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฏ๋ก ์ฌ์ฉ์ ์ฃผ์
# ์ธ๋ผ์ธ ๋ทฐ (Inline View)
# ์) ํ์ ์ด A์ธ ํ์๋ค์ ์กฐํ
SELECT ์ด๋ฆ, ํ์
FROM (
SELECT ํ์.ํ์์ด๋ฆ, ํ์ํ์ .ํ์
FROM ํ์, ํ์ํ์
WHERE ํ์.ํ์๋ฒํธ = ํ์ํ์ .ํ์๋ฒํธ
AND ํ์ํ์ .ํ์ = 'A'
);
3. ์ค์ฒฉ ์๋ธ์ฟผ๋ฆฌ (Nested Subquery)
WHERE ์ ์์ ์ฌ์ฉํ๋ ์๋ธ์ฟผ๋ฆฌ๋ก ๋ฉ์ธ์ฟผ๋ฆฌ ํ ์ด๋ธ์ ํน์ ์ปฌ๋ผ ๊ฐ๊ณผ ๋น๊ตํ ๊ฐ์ ๋ฐํํ๋ ์ฉ๋๋ก ์ฌ์ฉ๋๋ค.
๋จ์ผํ / ๋ค์คํ ๋ ๋ค ๋ฆฌํด์ด ๊ฐ๋ฅํ๋ค.
# ์ค์ฒฉ ์๋ธ์ฟผ๋ฆฌ (Nested Subquery)
# ์) ๊นํ์์ ํ์ ์ ์กฐํ
SELECT ํ์ํ์ .ํ์
FROM ํ์ํ์
WHERE ํ์ํ์ .ํ์๋ฒํธ = (
SELECT ํ์.ํ์๋ฒํธ
FROM ํ์
WHERE ํ์.์ด๋ฆ = '๊นํ์'
)
'DB > Oracle' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Oracle] ์ค๋ผํด ์จ๋ผ์ธ ์ฐ์ตํ๊ธฐ - Live SQL (0) | 2024.03.06 |
---|---|
[Oracle] sqlplus Linesize, Pagesize, Column ์ฌ์ด์ฆ ์กฐ์ ํ๊ธฐ (0) | 2022.12.27 |
[Oracle] ํน์๋ฌธ์ ๊ฒ์ - ESCAPE ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ (0) | 2022.10.01 |
[Oracle] ๊ณ์ธตํ ์ฟผ๋ฆฌ ์ดํดํ๊ธฐ (์ค๋ช /์์ ) (0) | 2022.04.29 |
[Oracle] LPAD, RPAD ํจ์ ์ฌ์ฉ๋ฒ (0) | 2022.04.28 |