CREATE OR REPLACE VIEW 뷰이름 AS SELECT문;
뷰(VIEW)
: 하나 이상의 테이블의 데이터를 기반으로 하는 가상의 테이블
- 단순화: 복잡한 쿼리를 단순화하여 사용자가 쉽게 데이터에 접근할 수 있도록 한다.
- 보안: 특정 열이나 행을 숨길 수 있어 사용자에게 필요한 데이터만 노출할 수 있다.
- 재사용성: 자주 사용하는 쿼리를 뷰로 정의해 놓으면 코드의 재사용이 가능해진다.
- 데이터 일관성: 뷰를 통해 여러 사용자나 애플리케이션이 동일한 데이터 집합을 사용할 수 있다.
예시
뷰 생성
CREATE OR REPLACE VIEW VW_EMP_INFO
--REPLACE: 없으면 만들고 있으면 덮어쓰기(ORACLE에만 있는 기능, 다른 곳에서는 ALTER를 쓰거나 DROP을 해야함.)
AS
SELECT EMPLOYEE_ID EMPID,
FIRST_NAME||' '||LAST_NAME EMPNAME,
PHONE_NUMBER PHONE,
EMAIL EMAIL,
TO_CHAR(HIRE_DATE, 'YYYY-MM-DD') HIREDATE,
DEPARTMENT_ID DEPTID
FROM EMP0;
이때 권한을 부여하지 않은 상태에서 쿼리를 실행 시키면 다음과 같은 오류가 발생한다.
⚠️오류 보고 - ORA-01031: 권한이 불충분합니다
🔎명령 프롬프트나 WINDOWS POWERSHELL에서 권한을 부여한다.
GRANT CONNECT, RESOURCE, CREATE VIEW TO 권한을 부여할 접속명;
더보기
SQLPLUS /NOLOG
CONN /SYSDBA
GRANT CONNECT, RESOURCE, CREATE VIEW TO HDG;
VIEW는 구조나 제약조건에 따라 테이블의 데이터를 추가하거나 삭제, 수정이 가능하다.
INSERT INTO VW_EMP_INFO
VALUES((SELECT MAX(EMPID)+1 FROM VW_EMP_INFO), '이순신', '010-0001-0001', 'GENERALLEE', SYSDATE, NULL);
⚠️오류 보고 - SQL 오류: ORA-01733: 가상 열은 사용할 수 없습니다
01733. 00000 - "virtual column not allowed here"
뷰 수정
UPDATE VW_EMP_INFO
SET DEPTID=60
WHERE EMPID=208;
=>사원의 번호가 208인 사람의 부서번호를 60으로 UPDATE한다.
뷰삭제
📍데이터 삭제
DELETE FROM VW_EMP_INFO
WHERE EMPID=208;
📍 뷰 삭제
DROP VIEW VW_EMP_INFO;
뷰와 테이블의 차이점
테이블 | 뷰 | |
데이터 저장 방식 | 실제 데이터를 저장하는 구조 | 데이터를 저장하지 않고, SELECT 쿼리를 통해 정의된 결과 집합을 제공한다. |
수정 가능성 | 데이터를 직접 삽입, 수정, 삭제할 수 있다. | 일반적으로 뷰를 통해서는 직접 수정할 수 없다. (특정 조건을 만족하는 뷰는 수정이 가능할 수도 있음.) |
사용 목적 | 데이터의 기본 저장소로 사용된다. | 데이터 접근을 단순화하거나 특정 데이터를 필터링하여 보여주는 용도로 사용된다. |
성능 | 직접적인 데이터 접근이 가능하므로 성능이 좋다 | 뷰를 호출할 때마다 기본 테이블의 데이터를 조회하므로 성능이 저하될 수 있다. |
구조 | 고정된 구조를 가지며, 열과 데이터 타입이 명확하게 정의되어 있다. | 동적인 구조를 가지며, 정의된 쿼리에 따라 결과가 달라질 수 있다. |
'SQL' 카테고리의 다른 글
[SQL] DB LOCK (0) | 2024.09.09 |
---|---|
[SQL] TRRIGER(트리거), TRANSACTION(트랜잭션) (0) | 2024.09.09 |
[SQL]PIVOT(행을 열로 전환) (4) | 2024.09.06 |
[sql]제약조건, 데이터 삽입∙수정∙삭제 (2) | 2024.09.05 |
[SQL]테이블 생성, 삭제, 변경 (0) | 2024.09.05 |