📌 VIEW
- SELECT 문의 실행결과 (RESULT SET)를 저장하는 객체
- 실질적인 데이터를 저장하고 있지 않음!
- 테이블을 사용하는 것과 동일하게 사용
✅ 사용목적
1) 복잡한 SELECT문을 쉽게 재사용하기 위해서 사용
2) 테이블의 진짜 모습을 감출 수 있어 보안상 유리하다.
✅ 사용시 주의사항
1) 가상 테이블(실체X) 이기 때문에 ALTER 구문 사용 X
2) VIEW를 이용한 DML이 가능한 경우도 있지만 제약이 많이 따르기 때문에 조회용도로만 사용하자
[VIEW 생성 방법]
CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW 뷰이름 서브쿼리
1) OR REPLACE 옵션 : 기존에 동일한 뷰 이름이 존재하는 경우 덮어쓰고,
존재하지 않으면 새로 생성
2) FORCE / NOFORCE 옵션
FORCE :서브쿼리에 사용된 테이블이 존재하지 않아도 뷰 생성
NOFORCE : 서브쿼리에 사용된 테이블이 존재해야만 뷰 생성(기본값)
3) WITH CHECK OPTION 옵션 : 옵션을 설정한 컬럼의 값을 수정 불가능하게 함
4) WITH READ ONLY 옵션 : 뷰에 대한 조회만 가능 -> 많이 사용함
EMPLOYEE 테이블에서 모든 사원의 사번, 이름, 부서명, 직급명 조회하고
그 결과를 V_EMP 라는 뷰를 생성하시오
📌 SEQUENCE
- 순차적으로 정수 값을 생성해줌
- 자동 번호 발생기 역할을 하는 객체
- 보통 PRIMARY KEY 값을 생성하기 위해 사용한다.
[SEQUENCE 생성 방법]
CREATE SEQUENCE 시퀀스이름
[START WITH 숫자] -- 처음 발생시킬 시작값 지정, 생략하면 자동 1이 기본
[INCREMENT BY 숫자] -- 다음 값에 대한 증가치, 생략하면 자동 1이 기본
[MAXVALUE 숫자 | NOMAXVALUE] -- 발생시킬 최대값 지정 (10의 27승 -1)
[MINVALUE 숫자 | NOMINVALUE] -- 최소값 지정 (-10의 26승)
[CYCLE | NOCYCLE] -- 값 순환 여부 지정
[CACHE 바이트크기 | NOCACHE] -- 캐쉬메모리 기본값은 20바이트, 최소값은 2바이트
** 시퀀스 사용 방법 **
1) 시퀀스명.NEXTVAL : 다음 시퀀스 번호를 얻어옴.(INCREMENT BY 만큼 증가된 값)
단, 시퀀스 생성 후 첫 호출인 경우 START WITH의 값을 얻어옴
2) 시퀀스명.CURRVAL : 현재 시퀀스 번호 얻어옴
단, 스퀀스 생성 후 NEXTVAL 호출 없이 CURRVAL를 호출하면 오류 발생
223부터 시작하여 5씩 증가하는 시퀀스 생성
CREATE SEQUENCE SEQ_EMP_ID
START WITH 223
INCREMENT BY 5;
NEXTVAL 호출 1
SELECT SEQ_EMP_ID.NEXTVAL FROM DUAL; -- 223 / 최초 호출 = START WITH값 조회
-- NEXTVAL 호출 2
SELECT SEQ_EMP_ID.NEXTVAL FROM DUAL; --228 / INCREMENT BY만큼 증가한 값 조회
-- CURRVAL 호출
SELECT SEQ_EMP_ID.CURRVAL FROM DUAL; --NEXTVAL 호출 후 CURRVAL를 호출 시 오류 없음
[SEQUENCE 변경(ALTER)]
[작성법]
ALTER SEQUENCE 시퀀스이름
[INCREMENT BY 숫자] -- 다음 값에 대한 증가치, 생략하면 자동 1이 기본
[MAXVALUE 숫자 | NOMAXVALUE] -- 발생시킬 최대값 지정 (10의 27승 -1)
[MINVALUE 숫자 | NOMINVALUE] -- 최소값 지정 (-10의 26승)
[CYCLE | NOCYCLE] -- 값 순환 여부 지정
[CACHE 바이트크기 | NOCACHE] -- 캐쉬메모리 기본값은 20바이트, 최소값은 2바이트
--> 시퀀스 변경 시 시작번호는 변경할 수 없음
* 시퀀스를 잘못 다루어 번호가 공백이 있어서 다시 처음부터 시작하고 싶은 경우
--> 시퀀스 삭제 후 재 생성
위에서 만든 223부터 시작하여 5씩 증가하는 시퀀스을 5가 아닌 1로 변경하기
ALTER SEQUENCE SEQ_EMP_ID INCREMENT BY 1;
SEQUENCE 삭제
DROP SEQUENCE SEQ_EMP_ID;
VIEW 삭제
DROP VIEW V_DCOPY2;
📌 INDEX
- SQL 명령문의 검색 처리 속도를 향상시키기 위해 컬럼에 대해서 생성하는 객체
✅ 인덱스 장점
- 조회 시 전체 테이블 내용을 조회하는 것이 아닌
인덱스가 지정된 컬럼만을 이용해서 조회하기 때문에 시스템 부하가 낮아져 전체적인 성능이 향상된다.
✅ 인덱스 단점
- 데이터 변경 (UPDATE,INSERT, DELETE) 작업이 빈번한 경우 오히려 성능이 저하되는 문제가 발생
[ INDEX 생성 방법]
[작성법]
CREATE [UNIQUE] INDEX 인덱스명
ON 테이블명 (컬럼명, 컬럼명, ... | 함수명, 함수계산식);
-- 인덱스가 자동으로 생성되는 경우
--> PK 또는 UNIQUE 제약조건이 설정되는 경우
EMPLOYEE_COPY4 테이블의 EMP_NAME 컬럼에 INDEX 생성
CREATE INDEX ECOPY4_NAME_IDX
ON EMPLOYEE_COPY4(EMP_NAME);
인덱스를 이용한 조회(검색) 방법
SELECT * FROM EMPLOYEE_COPY4
WHERE EMP_NAME != '0';
* WHERE절에 인덱스가 추가된 컬럼이 언급되면 자동으로 INDEX가 활용됨
'ON > Oracle' 카테고리의 다른 글
[Oracle] 자주 까먹는 것과 작성 구문 복습 (0) | 2023.06.15 |
---|---|
[Oracle] 복습 (1) | 2023.06.06 |
[Oracle] DAY25_데이터 딕셔너리 | ALTER (0) | 2023.05.23 |
[Oracle] DAY25_데이터 딕셔너리 | 제약조건 (0) | 2023.05.23 |
[Oracle] DAY24_데이터 딕셔너리 | CREATE (0) | 2023.05.22 |