항목 | 식별자 | 값 | 계산수식 |
---|---|---|---|
총 게시물 수 | totalRecord | 100개 | 테이블에서 총 카운트 조회 |
한 페이지당 리스트 수 | screenSize | 10 | 임의의 값 |
한 화면에 보여줄 페이지 수 | blockSize | 5 | 임의의 값 |
총 페이지 수 | totalPage | 10 | (totalRecord + 9) / screenSize (offset: 9=screenSize - 1) |
현재 페이지 | currentPage | 8번 | 클라이언트가 선택한 페이지, 없으면 1 |
시작 페이지 | startPage | 6번 | ((currentSize - 1)/blockSize) * blockSize + 1 |
종료 페이지 | endPage | 10번 | startPage + blockSize - 1 |
시작 게시물 번호 | startRow | 71 | endRow - (screenSize - 1) |
종료 게시물 번호 | endRow | 80 | currentpage * screenSize |
이전 페이지 | 이전 | startPage - 1 | if(startPage > 1) 이전 페이지 설정 |
다음 페이지 | 다음 | endpage + 1 | if(endPage < totalPage) 다음 페이지 설정 |
배경지식
- rownum: pseudo column
- 쿼리 실행 순서: FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
- FROM : SQL은 구문이 들어오면 테이블을 가장 먼저 확인
- WHERE : 테이블명을 확인했으니, 테이블에서 주어진 조건에 맞는 데이터들을 추출
- GROUP BY : 조건에 맞는 데이터가 추출되었으니, 공통적인 데이터들끼리 묶어 그룹핑
- HAVING : 공통적인 데이터들이 묶여진 그룹 중, 주어진 주건에 맞는 그룹들을 추출
- SELECT : 최종적으로 추출된 데이터들을 조회
- ORDER BY : 추출된 데이터들을 정렬
출처: 티스토리 [Data Makes Our Future]
SELECT ROWNUM RNUM
,MEMBER.MEM_ID
FROM MEMBER
WHERE ROWNUM >= 11
AND ROWNUM <= 20;
SELECT A.*
FROM ( SELECT ROWNUM RNUM
,MEMBER.MEM_ID
FROM MEMBER) A
WHERE RNUM >= 11
AND RNUM <=20;
SELECT ROWNUM RNUM
,MEMBER.MEM_ID
FROM MEMBER
ORDER BY ROWID DESC
SELECT A.*
FROM ( SELECT ROWNUM RNUM
,MEMBER.MEM_ID
FROM MEMBER
ORDER BY ROWID DESC ) A
WHERE RNUM >= 11
AND RNUM <= 20;
SELECT A.*
FROM ( SELECT ROWNUM RNUM
,MEMBER.MEM_ID
FROM MEMBER
ORDER BY ROWID DESC ) A
WHERE RNUM >= 11
AND RNUM <= 20
ORDER BY A.RNUM;
SELECT B.* --6
FROM (SELECT ROWNUM RNUM --4
,A.*Z`
FROM ( SELECT MEMBER.MEM_ID --2
FROM MEMBER --1
ORDER BY ROWID DESC ) A --3
)B
WHERE RNUM >= 11 --5
AND RNUM <= 20;
@class@method(args)
@org.apache.commons.lang3.StringUtils@isNotBlank(searchVO.searchWord))
SELECT A.MEM_NAME
,A.MEM_HP
,A.MEM_MAIL
,B.CART_NO
,B.CART_PROD
,C.PROD_NAME
,B.CART_QTY
FROM MEMBER A
LEFT OUTER JOIN CART B ON (A.MEM_ID = B.CART_MEMBER)
LEFT OUTER JOIN PROD C ON (B.CART_PROD=C.PROD_ID)
WHERE A.MEM_ID = 'a001'
ORDER BY B.CART_NO ASC;
SELECT DISTINCT MEM_NAME,
MEM_HP,
MEM_MAIL,
C.*
FROM MEMBER A
LEFT OUTER JOIN CART B ON (MEM_ID = CART_MEMBER)
LEFT OUTER JOIN PROD C ON (CART_PROD = PROD_ID)
WHERE MEM_ID = 'a001';
ORA-00932: inconsistent datatypes: expected - got CLOB
00932. 00000 - "inconsistent datatypes: expected %s got %s"
*Cause:
*Action:
16행, 47열에서 오류 발생
SELECT MEM_NAME,
MEM_HP,
MEM_MAIL,
C.*
FROM MEMBER A
LEFT OUTER JOIN ( SELECT DISTINCT CART_MEMBER, CART_PROD
FROM CART) B ON (MEM_ID = CART_MEMBER)
LEFT OUTER JOIN PROD C ON (CART_PROD = PROD_ID)
WHERE MEM_ID = 'a001';
WITH CARTB AS (
SELECT DISTINCT CART_MEMBER, CART_PROD
FROM CART
)
SELECT MEM_NAME,
MEM_HP,
MEM_MAIL,
C.*
FROM MEMBER A
LEFT OUTER JOIN CARTB B ON (MEM_ID = CART_MEMBER)
LEFT OUTER JOIN PROD C ON (CART_PROD = PROD_ID)
WHERE MEM_ID = 'n001';
갓김치님 항상 잘보구 있습니당 : ) 감사해여