๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ORACLE/SQL

[ORACLE] LEAD LAG ์•ž๋’ค ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ :: ๋งˆ์ด์ž๋ชฝ

by ๐ŸŒปโ™š 2020. 4. 4.

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, 20) OVER(ORDER BY EMPNO) AS PREV_SAL
    ,SAL
    ,LEAD(SAL, 20) OVER(ORDER BY EMPNO) AS NEXT_SAL
FROM EMP
ORDER BY EMPNO;
 
 

์ด์ „์—๋Š” ์ฐพ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— NULL๊ฐ’์„ ๋ฐ˜ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. 3๋ฒˆ์งธ ์ธ์ž๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์„ ์‹œ ์ถœ๋ ฅํ•  ๊ฒฐ๊ณผ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๊ด€๋ จ๊ธ€ ์ฐธ์กฐ

๋ถ„์„ํ•จ์ˆ˜๋ž€? OVER ๋ถ„์„์ ˆ

 

[Oracle] OVER ... PARTITION BY ๋ถ„์„์ ˆ ANALYTIC FUNCTION :: ๋งˆ์ด์ž๋ชฝ

์‚ฌ์› ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๋Š”๋ฐ, ์ „์ฒด ๊ธ‰์—ฌ ํ‰๊ท ๊ฐ’๊ณผ ํ•จ๊ป˜ ์ถœ๋ ฅํ•˜์‹œ์˜ค. ORACLE SCOTT ๊ณ„์ • EMP ํ…Œ์ด๋ธ”๋กœ ์ถœ๋ ฅ๋œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ์œ„ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜์‹ค๊ฑด๊ฐ€์š”? 1 2 3 4 5 6 7 8 SELECT DEPTNO ,EMPNO..

myjamong.tistory.com

 

 

 

 

๋Œ“๊ธ€