๋ชฉ์ฐจ
์๋ธ์ฟผ๋ฆฌ
์๋ธ์ฟผ๋ฆฌ๋ ํ๋์ ๋ฉ์ธ์ฟผ๋ฆฌ์์ ๋ ํ๋์ ์ฟผ๋ฆฌ๊ฐ ๋ด๊ฒจ์๋ ๊ฑธ ์๋ฏธ
์ข ๋ฅ :
์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ(SELECT์ ์ ์ฌ์ฉ), ์ธ๋ผ์ธ๋ทฐ ์๋ธ์ฟผ๋ฆฌ(FROM์ ์ ์ฌ์ฉ), ์ผ๋ฐ ์๋ธ์ฟผ๋ฆฌ(WHERE์ ์ ์ฌ์ฉ)
SELECT col1, (SELECT ...) -- ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ(Scalar Sub Query): ํ๋์ ์ปฌ๋ผ์ฒ๋ผ ์ฌ์ฉ (ํํ ์ฉ๋)
FROM (SELECT ...) -- ์ธ๋ผ์ธ ๋ทฐ(Inline View): ํ๋์ ํ
์ด๋ธ์ฒ๋ผ ์ฌ์ฉ (ํ
์ด๋ธ ๋์ฒด ์ฉ๋)
WHERE col = (SELECT ...) -- ์ผ๋ฐ ์๋ธ์ฟผ๋ฆฌ: ํ๋์ ๋ณ์(์์)์ฒ๋ผ ์ฌ์ฉ (์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ์กฐ๊ฑด์ )
์ถ์ฒ: https://data-make.tistory.com/25 [Data Makes Our Future]

-- ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ(์ฌ์ํ
์ด๋ธ์์ ์ฌ์๋ช
, ๋ถ์๋ช
, ๋ถ์ํ
์ด๋ธ์์ ๋ถ์๋ช
์กฐํ)
SELECT e.ENAME, e.DEPTNO, (SELECT d.DNAME FROM DEPT d WHERE e.DEPTNO=d.DEPTNO) dname
FROM emp e
;
-- ์ธ๋ผ์ธ๋ทฐ ์๋ธ์ฟผ๋ฆฌ(๋ถ์๋ณ ์ต๋์ฐ๋ด ๋ฐ๋ ์ฌ๋๊ณผ ๋์ผํ๊ฒ ๋ฐ๋ ์ฌ๋์ ์ ๋ณด ์กฐํ)
SELECT e.ENAME, e.DEPTNO, e.sal
FROM emp e, (SELECT deptno,max(sal) max_sal FROM emp GROUP BY DEPTNO) i
WHERE e.SAL = i.max_sal
;
-- ์ผ๋ฐ ์๋ธ์ฟผ๋ฆฌ
-- smith๋ณด๋ค ๋ง์ด ๋ฐ๋ ์ฌ๋์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ, ์ผ๋จ SMITH์ ๊ธ์ฌ ์กฐํ๊ฒฐ๊ณผ 800์ด ๋์์
SELECT * FROM
emp WHERE ENAME = 'SMITH'
;
-- smith๋ณด๋ค ๋ง์ด ๋ฐ๋ ์ฌ๋์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ
SELECT * FROM
emp WHERE sal > 800
;
-- smith๋ณด๋ค ๋ง์ด ๋ฐ๋ ์ฌ๋์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ(์๋ธ์ฟผ๋ฆ ์ด์ฉ)
SELECT * FROM
emp WHERE sal > (SELECT sal FROM emp WHERE ENAME='SMITH')
;
์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ
์๋ฅผ ๋ค์ด ์ฌ์ ํ ์ด๋ธ(emp)๊ณผ ๋ถ์ ํ ์ด๋ธ(dept)์ด ์์ ๊ฒฝ์ฐ
์ฌ์ํ ์ด๋ธ์๋ ๋ถ์๋ช ๋ฐ์ดํฐ๋ ์๋ค.
์กฐํํ๊ณ ํ๋ ๊ฐ์ด ์ฌ์๋ช , ๋ถ์๋ฒํธ, ๋ถ์๋ช ์ผ ๊ฒฝ์ฐ
empํ ์ด๋ธ์์๋ ename, deptno๋ ๊ฐ์ ธ์ฌ ์ ์์ง๋ง ๋ถ์๋ช ์ deptํ ์ด๋ธ์์ ๊ฐ์ ธ์์ผ ํ๋ค.
์ด ๊ฒฝ์ฐ join์ ์ฌ์ฉํ ์๋ ์์ง๋ง ๋ฐ์ดํฐ๊ฐ ๋ง์ง ์์ ๊ฒฝ์ฐ๋ ์๋์ฒ๋ผ ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.
๋ถ์๋ฒํธ๋ก ์กฐ์ธํด์ ๋ถ์๋ช ์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ()์์ ๋ฃ์ด์ ํ๋์ ์ปฌ๋ผ์ฒ๋ผ ์กฐํ

์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ ์๋์๋ฆฌ
๋ฉ์ธ ์ฟผ๋ฆฌ๋ฅผ ์ํํ ํ ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ์ ํ์ํ ๊ฐ์ ์ ๊ณต
์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ํํ๊ธฐ ์ํด ํ์ํ ๋ฐ์ดํฐ๊ฐ ๋ค์ด ์๋ ๋ธ๋ก์ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋ฉ
๋ฉ์ธ ์ฟผ๋ฆฌ์์ ์ฃผ์ด์ง ์ฃผ๊ฑด์ ๊ฐ์ง๊ณ ํ์ํ ๊ฐ์ ์ฐพ๊ณ ์ด ๊ฒฐ๊ณผ๋ฅผ ์
๋ ฅ๊ฐ๊ณผ ์ถ๋ ฅ๊ฐ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ด์ query execution cache๋ผ๋ ๊ณณ์ ์ ์ฅ ํด ๋ (์ฌ๊ธฐ์ ์
๋ ฅ๊ฐ์ ๋ฉ์ธ์ฟผ๋ฆฌ์์ ์ฃผ์ด์ง ๊ฐ์ด๊ณ ์ถ๋ ฅ๊ฐ์ ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ํ ํ ๋์จ ๊ฒฐ๊ณผ๊ฐ์)
๋ค์ ์กฐ๊ฑด์ด ๋ฉ์ธ ์ฟผ๋ฆฌ์์ ์ค์นผ๋ผ ์๋ธ ์ฟผ๋ฆฌ๋ก ๋ค์ด์ค๋ฉด ํด์ ํจ์๋ฅผ ์ด์ฉํด์ ํด๋น ๊ฐ์ด ์บ์์ ์กด์ฌํ๋์ง ์ฐพ๊ณ ์์ผ๋ฉด ์ฆ์ ๊ฒฐ๊ด๊ฐ์ ์ถ๋ ฅ, ์์ผ๋ฉด ๋ค์ ๋ธ๋ก์ ์์ธ์ค ํด์ ํด๋น ๊ฐ์ ์ฐพ์ ํ ๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ์บ์ํด ๋ , ์ด ์์
์ ๋ฉ์ธ ์ฟผ๋ฆฌ๊ฐ ๋๋ ๋๊น์ง ๋ฐ๋ณต
โป ์์ ์์์์ ์ ์ ์๋ฏ์ด ์ค์นผ๋ผ ์๋ธ ์ฟผ๋ฆฌ๊ฐ ๋น ๋ฅธ ์ด์ ๋ ์ฐพ๋ ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๊ฐ์ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์
๋ง์ฝ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์๊ฑฐ๋ ๋๋ ๋ฐ์ดํฐ์์ด ๋ง์ ๊ฒฝ์ฐ์๋ Join์ด ๋ ๋น ๋ฆ
์ค์นผ๋ผ ์๋ธ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ 1๊ฐ๊ฐ ์๋ ๊ฒฝ์ฐ "๋จ์ผํ ํ์ ์ง์์ 2๊ฐ ์ด์์ ํ์ด ๋ฆฌํด๋์์ต๋๋ค." ์๋ฌ ๋ฐ์ ํจ
์ค์นผ๋ผ ์๋ธ ์ฟผ๋ฆฌ์์ 2๊ฐ ์ด์์ ์ปฌ๋ผ์ ์กฐํํ ๊ฒฝ์ฐ์๋ "ORA-00913 : ๊ฐ์ ์๊ฐ ๋๋ฌด ๋ง์ต๋๋ค." ์๋ฌ ๋ฐ์ ํจ
์ถ์ฒ : ์ค๋ผํด SQL๊ณผ PL/SQL ์ฑ
์ธ๋ผ์ธ๋ทฐ ์๋ธ์ฟผ๋ฆฌ
์๋ ์๋ธ์ฟผ๋ฆฌ๋ ๋ถ์๋ณ ์ต๊ณ ๊ธ์ฌ ๋ฐ๋ ์ฌ๋๊ณผ ์ฐ๋ด์ด ๊ฐ์ ์ฌ๋์ ์กฐํํ๋ ์ฟผ๋ฆฌ์ด๊ณ
๋ถ์๋ณ ์ต๊ณ ๊ธ์ฌ๋ฅผ ๋ฐ๋ ์ฌ๋์ ๋ฝ์ ๋ ์ธ๋ผ์ธ๋ทฐ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉ ํ๋ค.

์ผ๋ฐ ์๋ธ์ฟผ๋ฆฌ
'ALLEN'์ด๋ผ๋ ์ฌ์์ ๊ธ์ฌ๋ณด๋ค ๋์ ์ฌ๋์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ์ฟผ๋ฆฌ์ด๊ณ
์ฌ๊ธฐ์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ด์ ๋ 'ALLEN'์ ๊ธ์ฌ๊ฐ ์๋ฅผ ๋ค์ด 1800์ด๋ผ๊ณ ํ์ ๋ ์๋์ฒ๋ผ ์ฌ์ฉํ ๊ฒฝ์ฐ
SELECT * FROM
emp
WHERE sal > 1800
๋ง์ผ 'ALLEN'์ ๊ธ์ฌ๊ฐ 2000์ผ๋ก ๋ณ๊ฒฝ ๋ ๊ฒฝ์ฐ ๋ค์ ์กฐ๊ฑด์ ๋ณ๊ฒฝํด์ค์ผ ํ๋ค.
๊ทธ๋์ 'ALLEN'์ ๊ธ์ฌ๋ฅผ ๋ณ์์ฒ๋ผ ํ์ฉํ ๊ฒ์ด๋ค.

๋จ์ผํ ์๋ธ์ฟผ๋ฆฌ

-- ๋จ์ผํ ์๋ธ์ฟผ๋ฆฌ์ผ ๊ฒฝ์ฐ WHERE์ ์์ ์ฌ์ฉ๋๋ ์ฐ์ฐ์
= : ๊ฐ๋ค.
<> : ๊ฐ์ง ์๋ค.
> : ํฌ๋ค.
< : ์๋ค.
<= : ์๊ฑฐ๋ ๊ฐ๋ค.
๋ค์คํ ์๋ธ์ฟผ๋ฆฌ

๋ค์คํ ์๋ธ์ฟผ๋ฆฌ ํจ์

ANY์ ALL์ ์ฐ์ฐ์์ ๋ฐฉํฅ์ ๋ฐ๋ผ ์ต๋๊ฐ, ์ต์๊ฐ์ด ๋ฌ๋ผ์ง
์๋ธ์ฟผ๋ฆฌ์์ ๋ฐํ๋๋ ๊ฐ์ ์ต์๊ฐ์ด๊ฑฐ๋ ์ต๋๊ฐ์ด์ง๋ง ์ฐ์ฐ์ ์ข์ธก์ ์ด๋ค ๊ฐ์ด ์ค๋๊ฐ์ ๋ฐ๋ผ์ ์ถ๋ ฅ๋๋ ๊ฒฐ๊ด๊ฐ์ ๋ค๋ฅด๊ฒ ๋์ด
โป ์๋ธ ์ฟผ๋ฆฌ ์์ฑ ์ ์ฃผ์์ฌํญ
์๋ธ์ฟผ๋ฆฌ ๋ถ๋ถ์ WHERE์ ์ ์ฐ์ฐ์ ์ค๋ฅธ์ชฝ์ ์์นํด์ผ ํ๋ฉฐ ๋ฐ๋์ ๊ดํธ๋ก ๋ฌถ์ด์ผ ํจ
ํน๋ณํ ๊ฒฝ์ฐ(Top-n ๋ถ์ ๋ฑ)๋ฅผ ์ ์ธํ๊ณ ๋ ์๋ธ ์ฟผ๋ฆฌ์ ์ Order by์ ์ด ์ฌ ์ ์์
๋จ์ผํ ์๋ธ์ฟผ๋ฆฌ(์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ ํ์ด๊ณ ์๋ธ ์ฟผ๋ฆฌ ์ํ๊ฒฐ๊ณผ๊ฐ 1๊ฑด๋ง ๋์ค๋ ๊ฒฝ์ฐ)์ ๋ค์คํ ์๋ธ์ฟผ๋ฆฌ์ ๋ฐ๋ผ ์ฐ์ฐ์๋ฅผ ์ ์ ํํด์ผ ํจ
์ฌ์ง ์ถ์ฒ : https://mjn5027.tistory.com/51
๋ค์ค ์ปฌ๋ผ ์๋ธ์ฟผ๋ฆฌ
๋ค์ค ์ปฌ๋ผ ์๋ธ ์ฟผ๋ฆฌ๋ ์๋ธ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฌ ์ปฌ๋ผ์ธ ๊ฒฝ์ฐ๋ฅผ ๋งํจ
์ฃผ๋ก pk๋ฅผ ์ฌ๋ฌ ์ปฌ๋ผ์ผ๋ก ํฉ์ณ์ ๋ง๋ค์์ ๊ฒฝ์ฐ() ํ๊บผ๋ฒ์ ๋น๊ตํ๊ธฐ ์ํด์ ์์ฃผ ์ฌ์ฉ

์๋ฅผ ๋ณด๋ฉด ์๋ธ ์ฟผ๋ฆฌ ๋ถ๋ถ์์ ํ๋
๋ณ๋ก ์ต๋ ๋ชธ๋ฌด๊ฒ๋ฅผ ๊ตฌํ ๋ค์ ํํ ์ฉ ๋ฉ์ธ ์ฟผ๋ฆฌ๋ก ๋๊ฒจ์ค์ ๋ฉ์ธ์ฟผ๋ฆฌ๋ฅผ ์ํํ ํ ๊ทธ ์กฐ๊ฑด์ ๋ง๋ ํ์ ์ถ๋ ฅํ ๊ฒ์
์ฌ๊ธฐ์ ์ค์ํ ์ ์ ์๋ธ ์ฟผ๋ฆฌ์์ ๋ ๊ฐ์ ์ปฌ๋ผ์ ๋์์ ๋ฉ์ธ ์ฟผ๋ฆฌ๋ก ๋๊ฒจ์ ๋น๊ตํ ๋ค๋ ๊ฒ
WITH์ ์ ํ์ฉํ ์๋ธ์ฟผ๋ฆฌ
์ค๋ผํด 9i ๋ฒ์ ๋ถํฐ ์ง์๋จ, WITH์ ์ ์ฌ์ฉํ์ฌ ์ํ๋ ํ
์ด๋ธ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฏธ๋ฆฌ ๋ทฐ์ฒ๋ผ ๊ฐ์์ ํ
์ด๋ธ๋ก ์์ฑ ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฒ
์ฑ๋ฅ์ด ์ข์์ ํ์
์์ ์์ฃผ ๋ง์ด ์ฌ์ฉ๋์ง๋ง ์ฌ์ฉ๋ฒ์ด ์ด๋ ต๋ค๋ ๋จ์ ์ด ์์
ํ
์ด๋ธ์ ์์๋ก ๋ง๋๋ ์ ์ VIEW์ ์ฐ์์ด ๋น์ทํ์ง๋ง VIEW๋ DROPํ๊ธฐ ์ ๊น์ง๋ ์์ด์ง์ง ์์ง๋ง WITH์ ์ ํ๋ฒ ์คํํ ์ฟผ๋ฆฌ๋ฌธ์์์๋ง ์คํ๋จ
์ค๋ผํด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ ์์ ํ
์ด๋ธ์ ์์ฑํ์ฌ ๋ฐ๋ณต ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋๋ก ํด์ค
WITH์ ์ฌ์ฉ ์ ๋์ผ ํ
์ด๋ธ ์ ๊ทผ์ ์ต์ํ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑ๋ ์์ ํ
์ด๋ธ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ๋ก ์ ๊ทผํ๊ธฐ์ ๋์คํฌ IO๋ณด๋ค ์ฑ๋ฅ ๊ฐ์ ์ ์ด์ ์ด ์์
๊ทธ๋ฆฌ๊ณ SQL๋ ๊ฐ๋
์ฑ ์๊ฒ ๋ฐ๊ฟ ์ ์์
โป with ์ ์์๋ SELECT ๋ฌธ์ฅ๋ง ์ธ ์ ์์, WITH ์ ์์ ๋ ๋ค๋ฅธ WITH ์ ์ ์ธ ์ ์์
๊ธฐ๋ณธ ๋ฌธ๋ฒ
- ๋จ์ผ ๊ฐ์ ํ
์ด๋ธ ์์ฑ
WITH a AS
(
SELECT query..
)
SELECT * FROM a
;
- ๋ค์ค ๊ฐ์ ํ
์ด๋ธ ์์ฑ
WITH a AS
(
SELECT query..
),
b AS
(
SELECT query..
)
SELECT * FROM a
UNION ALL
SELECT * FROM b
;


'IT > DataBase' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Oracle]ORACLE INSERT ALL๋ก ๋ค๋ฅธ ํ ์ด๋ธ์ ๋์์ ๊ฐ์ ๋ฐ์ดํฐ ์ ๋ ฅ (0) | 2022.11.25 |
|---|---|
| [Oracle]ORACLE SELECT ๊ฒฐ๊ณผ๊ฐ ๋ณ์นญ(alias) ์ฌ์ฉ (0) | 2022.11.25 |
| [Oracle]์ค๋ผํด SELECT 1 FROM 'ํ ์ด๋ธ๋ช ' (0) | 2022.11.25 |
| [Oracle]view(๋ทฐ) (0) | 2022.11.25 |
| [Oracle]์ค๋ผํด CTAS(Create Table As SELECT) (0) | 2022.11.25 |
๋๊ธ