풀스택 과정 day13_DBMS

정유섭·2022년 4월 24일
0

2022.4.22.(금)

VIEW( 뷰 )

Sequence( 시퀀스 )


1. view(뷰)

1-1. 뷰 란?

- 하나의 가상 테이블이라고 생각

- 작업을 하다 보면 자주 조회하는 데이터들이 존재한다. 한 테이블에 데이터가
  있으면 조회하기 편하겠지만, 그렇지 않은 경우가 있다. 여러 테이블을 join 하여
  가져오면 쿼리가 복잡한 경우도 있다. 이런 경우 쿼리로 뷰를 만들어 놓고
  사용하면 편리하다.

- 뷰는 보안에도 유리하다. 테이블에 데이터를 노출시키고 싶지 않을 때,
  뷰를 사용하여 보여줄 데이터만 뷰로 제공할 수 있다.

1-2. 뷰의 특징

- view는 table과 유사하며, 테이블처럼 사용한다.

- 테이블과는 달리 데이터를 저장하기 위한 물리적인 공간이
  필요하지 않은 가상 테이블이다. 

- 데이터를 물리적으로 갖지 않지만, 논리적인 집합을 갖는다.

- 테이블과 마찬가지로 select , insert , update , delete 명령이 가능하다.

1-3. 뷰 예제

-- 1.    50번 부서, job_id가 ST_CLERK, 연봉이 40000 이상인 사람들의 
--       사번, last_name, department_id, hire_date
CREATE VIEW s_man( emp_id, last_name, dept_id, hire_date )
   AS    SELECT   EMPLOYEE_ID , LAST_NAME , DEPARTMENT_ID , HIRE_DATE 
      FROM    EMPLOYEES e 
      WHERE    DEPARTMENT_ID = 50
      AND    JOB_ID = 'ST_CLERK'
      AND    SALARY * 12 >= 40000
;      

SELECT * FROM S_MAN sm ;
-- 2.     50번 부서 사원들의 사번, 'first_name last_name'(이어서 출력), department_id, hire_date
CREATE VIEW full_name( emp_id, name, dept_id, hire_date )
   AS    SELECT    EMPLOYEE_ID , FIRST_NAME || ' ' || LAST_NAME , DEPARTMENT_ID , HIRE_DATE 
      FROM    EMPLOYEES e 
      WHERE    DEPARTMENT_ID = 50
;

SELECT * FROM FULL_NAME fn ;
-- 3.   사번, 이름, 부서번호, 부서명, 입사일 출력 view 생성
CREATE VIEW all_data( emp_id, name, dept_id, dept_name, hire_date )
   	  AS SELECT    e.EMPLOYEE_ID , FIRST_NAME || ' ' || LAST_NAME ,
            	   e.DEPARTMENT_ID , d.DEPARTMENT_NAME , e.HIRE_DATE 
      FROM    EMPLOYEES e 
         LEFT OUTER JOIN DEPARTMENTS d    ON e.DEPARTMENT_ID = d.DEPARTMENT_ID 
ORDER BY e.EMPLOYEE_ID          
;

-- DROP VIEW all_data ;

SELECT * FROM ALL_DATA ad ;

2. 시퀀스( Sequence )

- 연속적인 번호를 만들어주는 기능

- 시퀀스란 자동 순차적으로 증가하는 순번을 반환하는 데이터베이스 객체이다.

- 보통 PK값의 중복을 방지하기 위해 사용한다.

- 예를 들어, 게시판의 글이 하나 추가될 때마다 글번호(PK)가 생겨야 한다고 할 때,
  만약 100번까지 글 번호가 생성되었다면, 그 다음 글이 추가가 되었을 경우
  글 번호가 101인 하나의 row를 생성해 주어야 한다. 이 때, 101이라는 숫자를 
  얻으려면 기존 글 번호 중 가장 큰 값에 +1을 하는 로직을 어딘가에는 넣어야 한다.
  이 때, 시퀀스를 사용하면 이러한 로직이 필요 없이 데이터베이스에 row가 추가될 때마다
  자동으로 +1을 시켜주어 매우 편리하다.

2-1. 시퀀스 생성

create sequence 시퀀스이름
	increment by n 	: 증가값을 설정, ex) 2 : 2씩 증가, 기본값 : 1
	start with n	: 시작값 설정, 기본값 : 1
	maxvalue n | nomaxvalue : 시퀀스 최대값 설정 | 무한대
	minvalue n | nominvalue : 시퀀스 최소값 설정 | 무한대
    
	cycle | no cycle		: cycle로 지정하면, maxvalue에 도달했을 때
						  	  다시 minvalue부터 시작하게 된다.
						  	  기본값은 nocycle
                              
	cache n | nocache		: 시퀀스의 속도를 개선하기 위하여 캐싱여부 지정

** cache : 속도를 증가시키기 위해서 sequence 번호를 한 번에 여러 개씩 메모리에 올려놓고
		   작업을 한다. 이것을 사용하면 매번 sequence 번호를 생성하는 것보다 빠르기 때문에
		   사용한다. cache 20 -> 1~20번 까지의 시퀀스 번호를 생성

2-2. 시퀀스 생성

-- sequence
-- 제품번호 생성하는 시퀀스 만들기
CREATE SEQUENCE seq_serial_no
INCREMENT BY 1
START WITH 100
MAXVALUE 110
MINVALUE 99
CYCLE 
cache 3
;

CREATE TABLE good(
   good_no      number(3),
   good_name   varchar2(10)
) ;

SELECT * FROM GOOD ;

-- nextval : 다음 값
INSERT INTO GOOD VALUES ( seq_serial_no.nextval, '제품1' );

-- 시퀀스 삭제
DROP SEQUENCE seq_serial_no ;

-- currval : 시퀀스 현재값
SELECT   seq_serial_no.currval
FROM   dual
;

profile
도비는 자유에요!😝

0개의 댓글