이야기앱 세상
오라클 lead, lag 함수 사용법 본문
게시판을 만들 때 목록에서 글을 선택한 후 상세 화면에서 내용을 본 후 아래로 내리면 다음글과 이전글을 링크해서 보여주는 경우가
있는데 이럴 때 다음글과 이전글을 SQL를 이용해 읽어 오는 방법이 있다.
LAG(컬럼명,행수(default 1)[,null일 때 보여질 기본값]) OVER (ORDER BY 컬럼)
행수를 1로 지정했을 경우 특정 컬럼의 지정한 숫자의 이전 행의 데이터 반환
lead(컬럼명,행수(default 1)[,null일 때 보여질 기본값]) OVER (ORDER BY 컬럼)
행수를 1롤 지정했을 경우 특정 컬럼의 지정한 숫자의 다음 행의 데이터 반환
사용예
select num, lag(num,1) over(order by num) prev, lead(num,1) over(order by num) next from board;
NUM NEXT PREV
1 2 (null)
2 3 1
3 (null) 2
행수를 2로 할 경우는 행을 2개 이동해서 정보를 읽어 온다.
select num, lag(num,2) over(order by num) prev, lead(num,2) over(order by num) next from board;
NUM NEXT PREV
1 3 (null)
2 (null) null)
3 (null) 1
따라서 게시판에서 이전글, 다음글을 명시할 때는 행수를 1로 해야 한다.
이전글, 다음글의 제목도 함께 읽어 올 경우
select
num,
lag(num,1) over(order by num) prev,
lag(title,1) over(order by num) prev_title,
lead(num,1) over(order by num) next,
lead(title,1) over(order by num) next_title
from board;
where를 사용해 특정 조건을 줄 경우
select *
from select num, lead(num,1) over(order by num) next, lag(num,1) over(order by num) prev from board)
where num = 5;
'IT > Database' 카테고리의 다른 글
오라클 원격 데이터베스 연결 설정 (0) | 2016.03.21 |
---|---|
JSP와 오라클 11g 64bit 연동시 jdbc 드라이버 설정하기 (0) | 2016.03.21 |
오라클에서 날짜/시간 사용하기 (0) | 2016.03.21 |
오라클 관리자용 비밀번호 분실시 재설정하기 (0) | 2016.03.21 |
ErWin에서 작성한 테이블을 sql로 변환 저장하기 (0) | 2016.03.21 |