본문 바로가기

oracle

오라클 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;



반응형