(파일명 20231025_01_scott)
■ ROW_NUMBER()
- 단순히 게시물을 목록화하여 사용자에게 리스트 형식으로 보여줄 때 적합한 함수.
--■■■ ROW_NUMBER() ■■■--
SELECT ENAME"사원명", SAL"급여", HIREDATE"입사일"
FROM EMP;
--==>>
/*
SMITH 800 1980-12-17
ALLEN 1600 1981-02-20
WARD 1250 1981-02-22
JONES 2975 1981-04-02
MARTIN 1250 1981-09-28
BLAKE 2850 1981-05-01
CLARK 2450 1981-06-09
SCOTT 3000 1987-07-13
KING 5000 1981-11-17
TURNER 1500 1981-09-08
ADAMS 1100 1987-07-13
JAMES 950 1981-12-03
FORD 3000 1981-12-03
MILLER 1300 1982-01-23
*/
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
*/
--※ 게시판의 게시물 번호를 SEQUENCE 나 IDENTITY(MSSQL에서의SEQUENCE)를 사용하게 되면
-- 게시물을 삭제했을 경우 삭제한 게시물의 자리에 다음 번호를 가진
-- 게시물이 등록되는 상황이 발생하게 된다.
-- 이는, 보안성 측면이나 미관상 바람직하지 않은 상태일 수 있기 때문에
-- ROW_NUMBER() 의 사용을 고려해 볼 수 있다.
-- 관리(게시물의 수정, 삭제,,,)의 목적으로 사용할 때에는 SEQUENCE 나 IDENTITIY를 사용하지만,
-- 단순히 게시물을 목록화하여 사용자에게 리스트 형식으로 보여줄 때에는
-- 사용하지 않는 것이 바람직할 수 있다.
■ SEQUENCE
--○ SEQUENCE(시퀀스 : 주문번호)
-- → 사전적인 의미 : 1. (일련의) 연속적인 사건들 2. (사건, 행동 등의) 순서
--○ 시퀀스 생성
CREATE SEQUENCE SEQ_BOARD -- 기본적인 시퀀스 생성 구문
START WITH 1 -- 시작값 설정 옵션
INCREMENT BY 1 -- 증가값 설정 옵션
NOMAXVALUE -- 최대값 설정 옵션
NOCACHE; -- 캐시 사용 안함 설정 옵션 (캐시란 겁나 맛집인 곳에서 번호표 한방에 미리 다 뽑고 사람들 나눠줌 사람들이 뽑은 것 만큼 없으면 번호표 버리게 됨)
--==>> Sequence SEQ_BOARD이(가) 생성되었습니다.
--○ 실습 테이블 생성(테이블명 : TBL_BOARD)
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, '아~~~ 힘들다', '10분만 쉬었다 올께요', '문정환', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '아~ 졸리다', '10분만 자고 올께요', '정한울', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '아~ 웃겨', '하루하루가 재미있어요', '노은하', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '보고싶다', '범구가 너무너무 보고싶어요', '김수환', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '배고파요', '점심을 먹었는데 배고파요', '김민지', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '아직 남아있네요', '두 시간 반이나 남아있네요', '이윤수', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '그만하고싶다', '그냥 넘어갈까....', '김호진', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '아~ 배아파', 'ㅋㅋㅋㅋㅋ', '노은하', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '소근소근', '궁시렁궁시렁', '이윤수', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '모자라요', '아직 잠이 모자라요', '김동민', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
--○ 세션 설정 변경
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
--==>> Session이(가) 변경되었습니다.
--○ 확인
SELECT *
FROM TBL_BOARD;
--==>>
/*
1 아~~~ 힘들다 10분만 쉬었다 올께요 문정환 java006$ 2023-10-29 23:01:27
2 아~ 졸리다 10분만 자고 올께요 정한울 java006$ 2023-10-29 23:01:29
3 아~ 웃겨 하루하루가 재미있어요 노은하 java006$ 2023-10-29 23:01:31
4 보고싶다 범구가 너무너무 보고싶어요 김수환 java006$ 2023-10-29 23:01:33
5 배고파요 점심을 먹었는데 배고파요 김민지 java006$ 2023-10-29 23:01:36
6 아직 남아있네요 두 시간 반이나 남아있네요 이윤수 java006$ 2023-10-29 23:01:39
7 그만하고싶다 그냥 넘어갈까.... 김호진 java006$ 2023-10-29 23:01:43
8 아~ 배아파 ㅋㅋㅋㅋㅋ 노은하 java006$ 2023-10-29 23:01:46
9 소근소근 궁시렁궁시렁 이윤수 java006$ 2023-10-29 23:01:49
10 모자라요 아직 잠이 모자라요 김동민 java006$ 2023-10-29 23:01:53
*/
--○ 커밋
COMMIT;
--==>> 커밋 완료.
--○ 게시물 삭제
DELETE
FROM TBL_BOARD
WHERE NO = 1;
--==>> 1 행 이(가) 삭제되었습니다.
DELETE
FROM TBL_BOARD
WHERE NO = 6;
--==>> 1 행 이(가) 삭제되었습니다.
DELETE
FROM TBL_BOARD
WHERE NO = 8;
--==>> 1 행 이(가) 삭제되었습니다.
DELETE
FROM TBL_BOARD
WHERE NO = 10;
--==>> 1 행 이(가) 삭제되었습니다.
--○ 확인
SELECT *
FROM TBL_BOARD;
--==>>
/*
2 아~ 졸리다 10분만 자고 올께요 정한울 java006$ 2023-10-25 15:28:18
3 아~ 웃겨 하루하루가 재미있어요 노은하 java006$ 2023-10-25 15:31:05
4 보고싶다 범구가 너무너무 보고싶어요 김수환 java006$ 2023-10-25 15:31:44
5 배고파요 점심을 먹었는데 배고파요 김민지 java006$ 2023-10-25 15:32:34
7 그만하고싶다 그냥 넘어갈까.... 김호진 java006$ 2023-10-25 15:37:46
9 소근소근 궁시렁궁시렁 이윤수 java006$ 2023-10-25 15:38:50
*/
--○ 게시물 작성
INSERT INTO TBL_BOARD VALUES
(SEQ_BOARD.NEXTVAL, '집중합시다', '저는 전혀 졸리지 않아요', '임하성', 'java006$', DEFAULT);
--==>> 1 행 이(가) 삽입되었습니다.
--○ 게시물 삭제
DELETE
FROM TBL_BOARD
WHERE NO = 7;
--==>> 1 행 이(가) 삭제되었습니다.
--○ 확인
SELECT *
FROM TBL_BOARD;
--==>>
/*
2 아~ 졸리다 10분만 자고 올께요 정한울 java006$ 2023-10-29 23:01:29
3 아~ 웃겨 하루하루가 재미있어요 노은하 java006$ 2023-10-29 23:01:31
4 보고싶다 범구가 너무너무 보고싶어요 김수환 java006$ 2023-10-29 23:01:33
5 배고파요 점심을 먹었는데 배고파요 김민지 java006$ 2023-10-29 23:01:36
9 소근소근 궁시렁궁시렁 이윤수 java006$ 2023-10-29 23:01:49
11 집중합시다 저는 전혀 졸리지 않아요 임하성 java006$ 2023-10-29 23:03:46
*/
--○ 커밋
COMMIT;
--==>> 커밋 완료.
--○ 게시판의 게시물 리스트 조회
SELECT NO "글번호", TITLE "제목", NAME "작성자", CREATED "작성일"
FROM TBL_BOARD;
--==>>
/*
2 아~ 졸리다 정한울 2023-10-25 15:28:18
3 아~ 웃겨 노은하 2023-10-25 15:31:05
4 보고싶다 김수환 2023-10-25 15:31:44
5 배고파요 김민지 2023-10-25 15:32:34
9 소근소근 이윤수 2023-10-25 15:38:50
11 집중합시다 임하성 2023-10-25 16:06:23
*/
SELECT ROW_NUMBER() OVER(ORDER BY CREATED) "글번호"
, TITLE "제목", NAME "작성자", CREATED "작성일"
FROM TBL_BOARD;
--==>>
/*
1 아~ 졸리다 정한울 2023-10-25 15:28:18
2 아~ 웃겨 노은하 2023-10-25 15:31:05
3 보고싶다 김수환 2023-10-25 15:31:44
4 배고파요 김민지 2023-10-25 15:32:34
5 소근소근 이윤수 2023-10-25 15:38:50
6 집중합시다 임하성 2023-10-25 16:06:23
*/
SELECT ROW_NUMBER() OVER(ORDER BY CREATED) "글번호"
, TITLE "제목", NAME "작성자", CREATED "작성일"
FROM TBL_BOARD
ORDER BY 4 DESC;
--==>>
/*
6 집중합시다 임하성 2023-10-25 16:06:23
5 소근소근 이윤수 2023-10-25 15:38:50
4 배고파요 김민지 2023-10-25 15:32:34
3 보고싶다 김수환 2023-10-25 15:31:44
2 아~ 웃겨 노은하 2023-10-25 15:31:05
1 아~ 졸리다 정한울 2023-10-25 15:28:18
*/