728x90
이번시간에는 오라클 LAG, LEAD 함수에 대해서 알아보겠습니다.
- LAG : 이전 행의 값을 출력
- LEAD : 다음 행의 값을 출력
사전 준비
--테이블 생성
CREATE TABLE EMP
(
EMPNO NUMBER
,ENAME VARCHAR2(50)
,SAL FLOAT
,MGR NUMBER
)
--데이터 삽입
INSERT INTO EMP VALUES (100,'A',999,'');
INSERT INTO EMP VALUES (400,'B',666,'300');
INSERT INTO EMP VALUES (300,'C',777,'200');
INSERT INTO EMP VALUES (500,'D',555,'200');
INSERT INTO EMP VALUES (200,'E',888,'100');
INSERT INTO EMP VALUES (600,'F',666,'400');
COMMIT;
--데이터 조회
SELECT * FROM EMP
EMPNO ENAME SAL MGR
100 A 999
400 B 666 300
300 C 777 200
500 D 555 200
200 E 888 100
600 F 666 400
예제 쿼리#1
SELECT
EMPNO
,ENAME
,SAL
,LAG(empno) OVER(ORDER BY empno) AS empno_prev
,LEAD(empno) OVER(ORDER BY empno) AS empno_next
FROM EMP
--기본 사용법
EMPNO ENAME SAL EMPNO_PREV EMPNO_NEXT
100 A 999 200
200 E 888 100 300
300 C 777 200 400
400 B 666 300 500
500 D 555 400 600
600 F 666 500
예제 쿼리#2
SELECT
EMPNO
,ENAME
,SAL
,LAG(empno,2) OVER(ORDER BY empno) AS empno_prev
,LEAD(empno,2) OVER(ORDER BY empno) AS empno_next
FROM EMP
--두번째 이전값(100)과 두번째 다음 값(300)을 출력
EMPNO ENAME SAL EMPNO_PREV EMPNO_NEXT
100 A 999 300
200 E 888 400
300 C 777 100 500
400 B 666 200 600
500 D 555 300
600 F 666 400
예제 쿼리#3
SELECT
EMPNO
,ENAME
,SAL
,LAG(empno,2,999) OVER(ORDER BY empno) AS empno_prev
,LEAD(empno,2,999) OVER(ORDER BY empno) AS empno_next
FROM EMP
--가져올 값이 없을 경우 999를 출력
EMPNO ENAME SAL EMPNO_PREV EMPNO_NEXT
100 A 999 999 300
200 E 888 999 400
300 C 777 100 500
400 B 666 200 600
500 D 555 300 999
600 F 666 400 999
반응형
그리드형
'IT > ORACLE' 카테고리의 다른 글
[ORACLE] 오라클 관계(식별, 비식별, 필수, 선택) 및 표기법(IE, 바커) (0) | 2021.05.13 |
---|---|
[ORACLE] 오라클 데이터 모델링의 이해(엔터티) (0) | 2021.05.13 |
[ORACLE] 오라클 FIRST_VALUE,LAST_VALUE 함수 사용법 및 예제 (0) | 2021.05.11 |
[ORACLE] REGEXP_SUBSTR 사용법 및 예제 (0) | 2021.05.11 |
[ORACLE] START WITH와 CONNECT BY 설명 및 예제 (0) | 2021.05.11 |
댓글