[SQL] Oracle 게시판 이전글 다음글 쿼리문
리트리버J
·2021. 1. 14. 00:20
728x90
우선 이전글 다음글을, 글 번호 +1, -1로 가져오면 에러가 날 수 있다.
글이 삭제됐을지도 모르고, Sequence의 오류가 발생 할 수 있기 때문이다.
처음에는 해당 게시글 번호를 구하여,
ROWNUM으로 불러와, -1 +1 한 값을 구하려고 했다.
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
|
SELECT * FROM
(
SELECT ROWNUM AS ROWNUMBER, B.BNO
FROM BOARD B
) A
WHERE BNO =
(
SELECT ROWNUMBER FROM
(
SELECT ROWNUM AS ROWNUMBER, B.BNO
FROM BOARD B
) A
WHERE ROWNUMBER = 10
) - 1
union
SELECT * FROM
(
SELECT ROWNUM AS ROWNUMBER, B.BNO
FROM BOARD B
) A
WHERE BNO =
(
SELECT ROWNUMBER FROM
(
SELECT ROWNUM AS ROWNUMBER, B.BNO
FROM BOARD B
) A
WHERE ROWNUMBER = 10
) + 1;
|
cs |
하지만,
LAG OVER
LEAD OVER 함수를 사용함으로써,
굉장히 편리하게 값을 가져 올 수 있다.
LAG(컬럼명,불러올다음숫자,DEFAULT값) OVER(ORDER BY 컬럼명)
LEAD(컬럼명,불러올다음숫자,DEFAULT값) OVER(ORDER BY 컬럼명)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
SELECT b.* FROM(
SELECT
BNO,
BWRITTER,
BPASSWORD,
BPASSWORDENC,
BSUBJECT,
BCONTENT,
BREGDATE,
BMODDATE,
BCOUNT,
BSTATUS,
LAG(BNO,1,-1) OVER(ORDER BY BNO ASC) AS PREBNO,
LEAD(BNO,1,-1) OVER(ORDER BY BNO ASC) AS NEXTBNO
FROM BOARD
) b
WHERE b.BNO = 1;
|
cs |
728x90
'SQL > Oracle' 카테고리의 다른 글
[SQL] 계층형 쿼리(댓글) START WITH / CONNECT BY PRIOR (0) | 2021.02.05 |
---|---|
[SQL] INDEX 의미 / 생성 / 수정 / 삭제 / 조회 (0) | 2020.12.31 |
[SQL / 기본문법] LENGTH / LENGTHB / INSTR / SUBSTR / PAD / TRIM 문자열 관련 함수 (0) | 2020.12.29 |
[SQL / 기본문법] SUM / AVG / MIN / MAX / COUNT 숫자 관련 함수 (0) | 2020.12.29 |
[SQL / 기본문법] BETWEEN AND / LIKE (%, _) / IN / 연산자 우선순위 (0) | 2020.12.28 |