ROW_NUMBER
PARTITION 내에서 ORDER BY절에 의해 정렬된 순서를 기준으로 고유한 값을 반환
e.g.
SELECT ROW_NUMBER() OVER(ORDER BY SAL DESC) "테스트" , ENAME "사원명", SAL "급여", HIREDATE "입사일" FROM EMP; --==>> /* 1 KING 5000 1981-11-17 2 FORD 3000 1981-12-03 3 SCOTT 3000 1987-07-13 4 JONES 2975 1981-04-02 5 BLAKE 2850 1981-05-01 6 CLARK 2450 1981-06-09 7 ALLEN 1600 1981-02-20 8 TURNER 1500 1981-09-08 9 MILLER 1300 1982-01-23 10 WARD 1250 1981-02-22 11 MARTIN 1250 1981-09-28 12 ADAMS 1100 1987-07-13 13 JAMES 950 1981-12-03 14 SMITH 800 1980-12-17 */
SELECT ROW_NUMBER() OVER(ORDER BY SAL DESC) "테스트" , ENAME "사원명", SAL "급여", HIREDATE "입사일" FROM EMP ORDER BY ENAME; --==>> /* 12 ADAMS 1100 1987-07-13 7 ALLEN 1600 1981-02-20 5 BLAKE 2850 1981-05-01 6 CLARK 2450 1981-06-09 2 FORD 3000 1981-12-03 13 JAMES 950 1981-12-03 4 JONES 2975 1981-04-02 1 KING 5000 1981-11-17 11 MARTIN 1250 1981-09-28 9 MILLER 1300 1982-01-23 3 SCOTT 3000 1987-07-13 14 SMITH 800 1980-12-17 8 TURNER 1500 1981-09-08 10 WARD 1250 1981-02-22 */ -- 번호는 급여를 기준으로 부여했지만 정렬은 이름 순
문자 기준 정렬도 가능
SELECT ROW_NUMBER() OVER(ORDER BY ENAME) "테스트" , ENAME "사원명", SAL "급여", HIREDATE "입사일" FROM EMP ORDER BY ENAME; --==>> /* 1 ADAMS 1100 1987-07-13 2 ALLEN 1600 1981-02-20 3 BLAKE 2850 1981-05-01 4 CLARK 2450 1981-06-09 5 FORD 3000 1981-12-03 6 JAMES 950 1981-12-03 7 JONES 2975 1981-04-02 8 KING 5000 1981-11-17 9 MARTIN 1250 1981-09-28 10 MILLER 1300 1982-01-23 11 SCOTT 3000 1987-07-13 12 SMITH 800 1980-12-17 13 TURNER 1500 1981-09-08 14 WARD 1250 1981-02-22 */
부서 번호가 20번인 사원에 번호 부여
SELECT ROW_NUMBER() OVER(ORDER BY ENAME) "테스트" , ENAME "사원명", SAL "급여", HIREDATE "입사일" FROM EMP WHERE DEPTNO = 20 ORDER BY ENAME; --==>> /* 1 ADAMS 1100 1987-07-13 2 FORD 3000 1981-12-03 3 JONES 2975 1981-04-02 4 SCOTT 3000 1987-07-13 5 SMITH 800 1980-12-17 */
※ 게시판의 게시물 번호를 SEQUENCE(오라클) 나 IDENTITY(MSSQL)를 사용하게 되면 게시물을 삭제했을 경우, 삭제한 게시물의 자리에 다음 번호를 가진 게시물이 등록되는 상황이 발생 이는 보안성 측면이나 미관성 바람직하지 않기에 ROW_NUMBER()의 사용을 고려해 볼 수 있다. 관리의 목적으로 사용할 때에는 SEQUENCE 나 IDENTITY를 사용하지만 단순히 게시물을 목록화하여 사용자에게 리스트 형식으로 보여줄 때에는 사용하지 않는 것이 바람직
시퀀스 생성
CREATE SEQUENCE SEQ_BOARD -- 기본적인 시퀀스 생성 구문 START WITH 1 -- 시작값 INCREMENT BY 1 -- 증가값 NOMAXVALUE -- 최대값 NOCACHE; -- 캐시사용여부
시퀀스 삭제
DROP SEQUENCE SEQ_BOARD;
테이블에 데이터 입력하면서 시퀀스 사용하기
INSERT INTO TBL_BOARD VALUES (SEQ_BOARD.NEXTVAL, '풀숲', '전 풀숲에 있어요')

부족하거나 잘못된 내용이 있을 경우 댓글 달아주시면 감사하겠습니다.
이 글에 부족한 부분이 존재할 경우 추후에 수정될 수 있습니다.
'SQL > Oracle' 카테고리의 다른 글
프로젝트 DB 설계에 관하여 (0) | 2023.04.03 |
---|---|
29. 중첩 그룹함수 / 분석함수 (0) | 2022.03.12 |
28. HAVING (0) | 2022.03.12 |
27. CUBE (0) | 2022.03.12 |
26. ROLLUP, GROUPING (0) | 2022.03.12 |