ORACLE ์๋ค ๋ฐ์ดํฐ ์ถ๋ ฅ
ORACLE SCOTT ๊ณ์ EMPํ ์ด๋ธ์ ์ด์ฉํด์ ์ฌ์ ๋ฒํธ๋ก ์ ๋ ฌ๋ ๋ฐ์ดํฐ์์ ์ ๋ค ๊ธ์ฌ์ ํจ๊ป ์ถ๋ ฅํ์์ค.
JOIN ํ์ด
์๋ค ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด์ ์ด๋ป๊ฒ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ผํ ๊น์? ๋ถ์ํจ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด์๋ 3๊ฐ์ ํ ์ด๋ธ์ ์กฐ์ธํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๊ฐ์ ํ ์ด๋ธ์ ROWNUM ๊ฐ์ ๋ณ๊ฒฝํ์ฌ 3๊ฐ์ ํ ์ด๋ธ์ ์กฐ์ธ์์ผ ๊ฐ์ ์ป์ ์ ์์ต๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
SELECT
EMPNO
,ENAME
,PREV.SAL AS PREV
,CURR.SAL AS CURR
,NEXT.SAL AS NEXT
FROM
(
SELECT
ROWNUM + 1 AS SEQ
,SAL
FROM EMP
) PREV
RIGHT OUTER JOIN
(
SELECT
ROWNUM AS SEQ
,EMPNO
,ENAME
,SAL
FROM EMP
) CURR
ON PREV.SEQ = CURR.SEQ
LEFT OUTER JOIN
(
SELECT
ROWNUM - 1 AS SEQ
,SAL
FROM EMP
) NEXT
ON CURR.SEQ = NEXT.SEQ
ORDER BY EMPNO;
|
์์ ์ด๋ฏธ์ง์ฒ๋ผ ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ํ ์ด๋ธ์ ROWNUM์ 1์ ๋ํ ๊ฐ์, ์ดํ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ROWNUM์ 1์ ๋บ๊ฐ์ผ๋ก ํํ์ฉ ๋ฐ๋ ค์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์์ต๋๋ค. ๊ฐ๋จํ ์์ ๊ฐ์ง๋ง ๋น๊ต์ ๊ธด ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํด์ผํ์ต๋๋ค. ORACLE์์๋ LEAD์ LAG ๋ถ์ํจ์๋ฅผ ์ฌ์ฉํด์ ๊ฐ๋จํ๊ฒ ์์ ์์ ์ ํ ์ ์์ต๋๋ค.
LEAD LAG ํ์ด
1
2
3
4
5
6
7
8
|
SELECT
EMPNO
,ENAME
,LAG(SAL) OVER(ORDER BY EMPNO) AS PREV_SAL
,SAL
,LEAD(SAL) OVER(ORDER BY EMPNO) AS NEXT_SAL
FROM EMP
ORDER BY EMPNO;
|
์์ ๊ธด ํ์ด๋ฅผ LEAD์ LAG ๋ถ์ํจ์๋ฅผ ์ด์ฉํด์ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์์ต๋๋ค.
LEAD LAG ๋ถ์ํจ์
LEAD : ์นผ๋ผ๋ด์ ์ดํ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ
LAG : ์นผ๋ผ๋ด์ ์ด์ ๋ฐ์ดํฐ ์ถ๋ ฅ
๊ธฐ๋ณธ์ ์ผ๋ก LEAD์ LAG ํจ์์ ์ฌ์ฉ ์ฉ๋์ ๋๋ค. ๋ ํจ์์๋ ๋ช๊ฐ์ง ๊ธฐ๋ฅ์ด ๋ ์์ต๋๋ค.
1
2
3
4
5
6
7
8
|
SELECT
EMPNO
,ENAME
,LAG(SAL, 2) OVER(ORDER BY EMPNO) AS PREV_SAL
,SAL
,LEAD(SAL, 2) OVER(ORDER BY EMPNO) AS NEXT_SAL
FROM EMP
ORDER BY EMPNO;
|
์ธ์๋ก ์นผ๋ผ๋ง ๋ฃ์์ ๋๋ ๋ฐ๋ก ์ด์ ์ดํ ๋ฐ์ดํฐ๋ง ์ถ๋ ฅํ์ต๋๋ค. ๋๋ฒ์งธ ์ธ์๋ก ์ซ์๋ฅผ ๋ฃ์ด ์ค ์ ์๋๋ฐ, ์ด์ ์ดํ๋ก ๋ช๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ค๊ฒ์ธ์ง ์ง์ ํ ์ ์์ต๋๋ค.
1
2
3
4
5
6
7
8
9
|
SELECT
EMPNO
,ENAME
,LAG(SAL, 2, 0) OVER(ORDER BY EMPNO) AS PREV_SAL
,SAL
,LEAD(SAL, 2, 0) OVER(ORDER BY EMPNO) AS NEXT_SAL
FROM EMP
ORDER BY EMPNO;
|
์ด์ ์๋ ์ฐพ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ์ NULL๊ฐ์ ๋ฐํํ์ต๋๋ค. 3๋ฒ์งธ ์ธ์๋ก ๋ฐ์ดํฐ๊ฐ ์์ ์ ์ถ๋ ฅํ ๊ฒฐ๊ณผ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
๊ด๋ จ๊ธ ์ฐธ์กฐ
๋ถ์ํจ์๋? OVER ๋ถ์์
๋๊ธ