온풀투데이

[오라클] ROW_NUMBER / 시퀀스(SEQUENCE) 본문

DATABASE

[오라클] ROW_NUMBER / 시퀀스(SEQUENCE)

온풀 2022. 3. 12. 00:46
20220225_01_scott.sql / 오라클 9일 차

ROW_NUMBER

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
*/


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 를 사용하게 되면 - 시퀀스는 오라클 아이덴티티는 엠에스에스큐엘
--   게시물을 삭제했을 경우, 삭제한 게시물의 자리에 다음 번호를 가진
--   게시물이 등록되는 상황이 발생하게 된다.
--   이는... 보안성 측면이나... 미관상... 바람직하지 않은 상황일 수 있기 때문에
--   ROW_NUMBER() 의 사용을 고려해 볼 수 있다.
--   관리의 목적으로 사용할 때에는 SEQUENCE 나 IDENTITY 를 사용하지만
--   단순히 게시물을 목록화하여 사용자에게 리스트 형식으로 보여줄 때에는
--   사용하지 않는 것이 바람직하다.

SEQUENCE(시퀀스 : 주문번호)

--○ SEQUENCE(시퀀스 : 주문번호) 생성 -- 툭 건드리면 1, 건드리면 2 ... 장치 --> 번호표 발행 기계
--   → 사전적인 의미 : 1.(일련의) 연속적인 사건들, 2.(사건 행동 등의) 순서

CREATE SEQUENCE SEQ_BOARD       -- 기본적인 시퀀스 생성 구문
START WITH 1                    -- 시작값
INCREMENT BY 1                  -- 증가값
NOMAXVALUE                      -- 최대값
NOCACHE;                        -- 캐시사용여부

--○ 실습 테이블 생성
CREATE TABLE TBL_BOARD              -- TBL_BOARD 테이블 생성 구문 → 게시판 테이블
( NO        NUMBER                  -- 게시물 번호        Ⅹ
, TITLE     VARCHAR2(50)            -- 게시물 제목        ○
, CONTENTS  VARCHAR2(1000)          -- 게시물 내용        ○
, NAME      VARCHAR2(20)            -- 게시물 작성자      △
, PW        VARCHAR2(20)            -- 게시물 패스워드    △
, CREATED   DATE DEFAULT SYSDATE    -- 게시물 작성일      Ⅹ
);
--==>> Table TBL_BOARD이(가) 생성되었습니다. -- 다시 완료


--○ 데이터 입력 → 게시판에 게시물을 작성하는 액션

INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '풀숲', '전 풀숲에 있어요', '박현수', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.

INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '오로라', '밤하늘 좋네요', '정은정', 'java006$', SYSDATE);
--==>> 1 행 이(가) 삽입되었습니다.

INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '해변', '바람이 부네요', '양윤정', 'java006$', SYSDATE);
--==>> 1 행 이(가) 삽입되었습니다.

INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '인터뷰', '인터뷰중인데, 아이가 들어오네요', '이시우', 'java006$', SYSDATE);
--==>> 1 행 이(가) 삽입되었습니다.

INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '살려주세요', '물에 빠졌어요', '최문정', 'java006$', SYSDATE);
--==>> 1 행 이(가) 삽입되었습니다.

INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '내가 주인공', '나만 빼고 다 블러', '김민성', 'java006$', SYSDATE);
--==>> 1 행 이(가) 삽입되었습니다.

INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '지구정복', '지구를 정복하러 왔다', '김정용', 'java006$', SYSDATE); --- 실수
--==>> 1 행 이(가) 삽입되었습니다.

INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '당연히', '아무 이유 없다', '이아린', 'java006$', SYSDATE); -- 실수
--==>> 1 행 이(가) 삽입되었습니다.

SELECT *
FROM TBL_BOARD;
--==>>
/*
1    풀숲        전 풀숲에 있어요                박현수    java006$    2022-02-25 10:29:38
2    오로라        밤하늘 좋네요                    정은정    java006$    2022-02-25 10:30:07
3    해변        바람이 부네요                    양윤정    java006$    2022-02-25 10:30:21
4    인터뷰        인터뷰중인데, 아이가 들어오네요    이시우    java006$    2022-02-25 10:30:37
5    살려주세요    물에 빠졌어요                    최문정    java006$    2022-02-25 10:30:58
6    내가 주인공    나만 빼고 다 블러                김민성    java006$    2022-02-25 10:31:18
7    지구정복    지구를 정복하러 왔다            김정용    java006$    2022-02-25 10:31:35
8    당연히        아무 이유 없다                    이아린    java006$    2022-02-25 10:31:52
*/