뷰(VIEW) (가상 테이블)
데이터 엑세스를 제한하고 복합한 질의를 쉽게 작성하기 위해서 테이블을 재생성하며
데이터 접근을 제한하고 그 질의를 쉽게 작성할 수 있도록 도와준다.
VIEW 생성
CREATE [OR REPLACE] VIEW 뷰이름 AS 쿼리;
ex)
CREATE OR REPLACE VIEW emp10_view
as SELECT empno, id_number, ename name, sal * 12 ann_salary FROM emp WHERE deptno = 10;
VIEW를 통한 데이터 변경
일반적으로 Views는 조회용으로 많이 사용되지만 아래와 같이 데이터를 변경할 수 있다.
ex)
UPDATE emp10_view SET name='SCOTT' WHERE id_number=7839;
SELECT * FROM emp10_view; --변경된 데이터 확인한다.
SELECT * FROM emp; --emp테이블의 KING이 SCOTT으로 변경된다.
INSERT INTO emp10_view (id_number,name,ann_salary)
VALUES (8000,'JOHN',19000);
-> 가상 열(ann_salary)은 사용할 수 없습니다. 오류 발생한다.
INSERT INTO emp10_view (id_number,name)
VALUES (8000,'JOHN');
->가상 열을 제외하면 삽입 가능하다.
SELECT * FROM emp10_view;
->10번 부서만 보여지게 제한이 걸려서 삽입한 것이 안 보여진다.
SELECT * FROM emp;
-> emp테이블에 1행이 추가되어있다.
with read only (읽기 전용 뷰를 생성하는 옵션)
create or replace view emp20_view
as SELECT empno id_number,ename name,sal*12 ann_salary
FROM emp
WHERE deptno=20
with read only;
UPDATE emp20_view SET name='DAVID' WHERE id_number=7902;
읽기 전용이기 때문에 수정 불가능하다.
view 삭제
drop view emp10_view;
Sequence : 유일한 값을 생성해주는 오라클 객체
시퀀스를 생성하면 기본키와 같이 순차적으로 증가하는 컬럼을
자동적으로 생성할 수 있다. 보통 primary key 값을 생성하기
위해서 사용한다.
create sequence test_seq
start with 1
increment by 1
maxvalue 100000;
시작 값이 1이고 1씩 증가하고, 최대값 100000이 되는 시퀀스 생성
currval : 현재 값을 반환
nextval : 현재 시퀀스 값의 다음 값 반환
SELECT test_seq.nextval FROM dual;
SELECT test_seq.currval FROM dual;
시퀀스의 수정
alter sequence sequence_name
increment by n
maxvalue n | nomaxvalue
minvalue n | nominvalue
cycle | nocycle
start with는 수정할 수 없음
시퀀스 삭제
drop sequence sequence_name;
인덱스(index)
인덱스는 원하는 정보의 위치를 빠르고, 정확하고, 지능적으로 알아낼수 있는 방법을 제공한다.
테이블의 컬럼에 대한 제약 조건을 설정할 때 primary key, unique로 설정하면 oracle은 자동으로 이 컬럼에 대해 unique index를설정한다.
인덱스 만들기
자동 : 데이블 정의에 PRIMARY KEY 또는 UNIQUE 제약 조건을 정의
하면 고유 인덱스가 자동으로 생성
수동 : 사용자가 열에 고유하지 않은 인덱스를 생성하여 행에 대한
액세스 시간을 줄일 수 있다.
유일한 값을 가지는 컬럼에 인덱스 설정 : unique index
CREATE UNIQUE INDEX dname_idx ON dept (dname);
유일한 값을 가지지 않는 컬럼에 인덱스 설정 : non unique index
CREATE INDEX emp_ename_idx ON emp (ename);
인덱스 생성이 필요한 경우
- 열에 광범위한 값이 포함된 경우
- 열에 널 값이 많이 포함된 경우
- WHERE절 또는 조인 조건에서 하나 이상의 열이 함께 자주 사용되는 경우
- 큰 테이블에서 대부분의 질의에 의해 검색되는 행이 2%~4% 미만인 경우
인덱스를 생성하지 않아야 할 경우
- 테이블이 작은 경우
- 열이 질의의 조건으로 자주 사용되지 않은 경우
- 대부분의 질의가 테이블에 있는 행의 2% ~ 4% 이상을 검색할 경우
- 테이블이 자주 갱신되는 경우
- 인덱스화된 열이 표현식의 일부로 참조되는 경우
동의어 : 동의어(객체의 다른 이름)를 생성하여 객체 액세스를 단순화한다.
- 다른 사용자가 소유한 테이블을 쉽게 참조한다.
- 긴 객체 이름을 짧게 만든다.
CREATE SYNONYM synonym_name FOR object;
동의어 생성
CREATE SYNONYM emp20 FOR emp20_view;
SELECT * FROM emp20_view;
SELECT * FROM emp20;
동의어 삭제
DROP SYNONYM emp10;
'ORACLE SQL' 카테고리의 다른 글
| ORACLE SQL-기본문법8 (0) | 2022.11.03 |
|---|---|
| ORACLE SQL-기본문법7 (0) | 2022.11.03 |
| ORACLE SQL-기본문법6 (0) | 2022.11.03 |
| ORACLE SQL-기본문법5 (0) | 2022.11.01 |
| ORACLE SQL-기본문법4 (0) | 2022.10.31 |