[객체]
1. 객체: 데이터베이스 내에 존재하는 논리적인 저장구조
예)테이블, 뷰, 인덱스, 시퀀스, 함수, 프로시저
2. 뷰(VIEW): 가상의 테이블, 하나 이상의 테이블을 조회하는 SELECT문 저장하는 객체,
물리적 데이터 저장X
-편리성: 자주 사용하는 SELECT문장 저장
-보안성: 테이블의 특정 데이터를 노출시키지 않기 위해 사용
● 뷰 생성: CREATE VIEW 뷰 이름 AS SELECT문
● 뷰 삭제: 이름 DROP VIEW 뷰 이름
● 뷰 조회: SELECT * FROM 뷰 이름
[실습]
--실습1. 부서별최고급여 뷰를 만들고 해당 뷰를 사용하여
--부서별로 가장 높은 연봉을 가진 직원들의 정보 출력
--부서ID, 최고급여 출력, 부서ID 기준으로 정렬, 최고급여 별칭만들기
CREATE VIEW 부서별최고급여 AS
SELECT DEPARTMENT_ID, MAX(SALARY) AS 최고급여
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
ORDER BY DEPARTMENT_ID;
3. 시퀀스(SEQUENCE): 특정 규칙에 맞는 연속 숫자를 생성하는 객체, 계속해서 다음
번호를 만들어주는 역할, 주로 PK의 컬럼 등에 유일한 값을 만들 때 사용 예)대기순번표, 직원번호
● 시퀀스 생성: CREATE SEQUENCE 시퀀스 이름
CREATE SEQUENCE NUM1;
● 시퀀스 옵션
CREATE SEQUENCE 직원ID_NUM
START WITH 100--시작 숫자
INCREMENT BY 2--증가 숫자
MAXVALUE 120--최대값
MINVALUE 100--최솟값
NOCYCLE--반복여부
;
● 시퀀스 삭제: DROP SEQUENCE 시퀀스 이름
DROP SEQUENCE 직원ID_NUM;
● 시퀀스 사용
--시퀀스테스트에 직원ID_NUM 시퀀스 사용
INSERT INTO 시퀀스테스트 VALUES(직원ID_NUM.NEXTVAL);
4. ROWNUM: 테이블의 행에 임시로 부여되는 일련번호
● 행의 개수를 제한하는 용도로 사용한다.
● 반드시 1을 포함해서 1부터 출력해야 한다. BETWEEN 6 AND 10 불가
● 1을 포함하지 않고 출력하고 싶을 때는 인라인뷰를 활용한다.
5. TOP-N: ROWNUM+인라인뷰를 조합하여 상위 N개의 데이터만 출력
정렬처리가 완료된 가공된 테이블을 인라인뷰에 넣고 ROWNUM을 조건으로 사용한다.
(실습)급여가 높은 상위 5명 출력
SELECT *
FROM(SELECT FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE SALARY IS NOT NULL
ORDER BY SALARY DESC)
WHERE ROWNUM <=5;
6. 페이징 기술: ROWNUM+TOP-N, 데이터를 일부만 보여주는 기술
예) 페이지 1 클릭: 1~20개, 2클릭: 21~40개 ->20개 단위로 나눠서 게시글을 보여줌
SELECT *
FROM (SELECT *
FROM 게시판
ORDER BY 게시판번호)
WHERE ROWNUM<=20;
[실습]게시판 번호 기준 21~40번 출력
--게시판번호를 기준으로 21~40번(페이지 2번) 게시글의 모든 컬럼 출력하기
--인라인뷰 2번 사용
--ROWNUM은 1부터 40번까지 보여줌
--한 번 더 인라인뷰를 사용해 21번부터 보여주도록 ROWNUM제한
SELECT *
FROM(SELECT ROWNUM AS RN, 게시글.*
FROM (SELECT *
FROM 게시판
ORDER BY 게시판번호)게시글
WHERE ROWNUM<=40)
WHERE RN>=21;
[실습]게시판 번호 기준 10페이지 게시글 출력
--게시판 번호를 기준으로 10페이지 게시글의 모든 컬럼 출력하기
--N: 페이지번호
SELECT *
FROM(SELECT ROWNUM AS RN, 게시글.*
FROM (SELECT *
FROM 게시판
ORDER BY 게시판번호)게시글
WHERE ROWNUM<=20*10)
WHERE RN>=20*(10-1)+1;
--인라인뷰1: 게시판번호로 먼저 정렬
--인라인뷰2: ROWNUM의 개수를 원하는 만큼 가져오기 위해 컬럼 형태로 지정
'데이터베이스' 카테고리의 다른 글
[DB]9.TCL&DCL (0) | 2023.06.08 |
---|---|
[DB]8.DML&서브쿼리 (1) | 2023.06.07 |
[DB]7. DDL (1) | 2023.06.06 |
[DB]6. JOIN (0) | 2023.06.05 |
[DB]5. GROP BY&HAVING절 (0) | 2023.06.01 |