데이터베이스

[DB]10. 객체

CodeJaram 2023. 6. 9. 14:25

[객체]

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