SELECT 순서대로 행 번호를 부여해주는 가상 컬럼
SELECT ROWNUM, empno, ename
FROM emp;
-- 1부터 순차적으로 읽는 환경에서 사용 가능
-- Where절에서도 사용 하는게 가능
- WHRER ROWNUM = 1;
- WHRER ROWNUM <= N;
- WHRER ROWNUM BETWEEN 1 AND N;
-- 안되는경우
- WHRER ROWNUM = 2;
- WHRER ROWNUM ≥ 2;
-
사용 용도 : 페이징 처리
네이버 카페에서 게시글 리스트를 한화면에 제한적인 갯수로 조회
카페 전체 게시글수는 굉장히 많음
⇒ 한화면에 못보여줌, (버벅임, 사용자 편의성)
⇒ 페이지당 건수를 정해놓고 해당 건수만큼 조회해서 화면에 보여줌
-- 정상출력
SELECT ROWNUM, empno, ename
FROM emp
WHERE ROWNUM <= 10;
--실행은 되지만 결과가 없음
SELECT ROWNUM, empno, ename
FROM emp
WHERE ROWNUM >= 10;
- ROWNUM이 뒤죽박죽 나옴(FROM ⇒ WHERE ⇒ SELECT ⇒ ORDER BY 순 해석)
SELECT ROWNUM, empno, ename
FROM emp
ORDER BY ename;
-
정렬 후 ROWNUM을 부여하고 싶을땐 IN-LINE VIEW를 사용
VIEW : SQL - DBMS에 저장되어있는 SQL
IN-LINE : 직접 기술을 했다, 어딘가 저장을 한게 아니라 그자리에 직접 기술
--VIEW 개념
SELECT ROWNUM, empno, ename
FROM (SELECT empno, ename
FROM emp
ORDER BY ename);
- SELECT 절에 *만 단독으로 사용하지 않고 콤마를 통해 다른 임의 칼럼이나 expression을 표기한 경우 *앞에 어떤 테이블(뷰)에서 온것인지 한정자(테이블이름, 뷰이름)를 붙여줘야 한다.
-- table, view 별칭 : AS 붙이지 않고 그냥 쓴다
SELECT ROWNUM, v_emp.*
FROM (SELECT empno, ename
FROM emp
ORDER BY ename) v_emp;
-
요구사항 : 1페이지당 10건의 사원리스트
1page : 1~10
2page : 11~20
3page : 21~30
N page = (n-1) * pageSize + 1 ~ n * pageSize
-- 페이징 처리 쿼리
-- page 1
SELECT ROWNUM, v_emp.*
FROM (SELECT empno, ename
FROM emp
ORDER BY ename) v_emp
WHERE ROWNUM BETWEEN 1 AND 10;
-- page 2
-- ROWNUM의 특성으로 1부터 읽지 않는 형태라 동작 안함
SELECT ROWNUM, v_emp.*
FROM (SELECT empno, ename
FROM emp
ORDER BY ename) v_emp
WHERE ROWNUM BETWEEN 11 AND 20;
-- ROWNUM 값을 별칭을 통해 새로운 컬럼으로 만들고 해당 SELECT를 INLINE VIEW
-- 외부에서 ROWNUM에 부여한 별칭을 통해 페이징처리
SELECT *
FROM(SELECT ROWNUM rn, v_emp.*
FROM (SELECT empno, ename
FROM emp
ORDER BY ename) v_emp)
WHERE rn BETWEEN 11 AND 20;
반응형
'IT > SQL' 카테고리의 다른 글
[ORACLE] 문자열 함수, 숫자 관련 함수, 날짜 관련 함수 (0) | 2020.06.30 |
---|---|
[ORACLE] 바인딩 변수/ SQL developer (0) | 2020.06.29 |
[ORACLE] 정렬 - ORDER BY (0) | 2020.06.29 |
[ORACLE]WHERE 절 (0) | 2020.06.29 |
[ORACLE] SELECT 결합연산 (0) | 2020.06.25 |