데이터베이스 뷰
IT 위키
더 많은 작업
- 관계형 데이터베이스에서 기본 테이블로부터 파생하여 만든 가상의 테이블
- 사용자에게 접근이 허용된 제한된 데이터만 보여주기 위해 구성
- 저장장치 내에 물리적으로 존재하지 않지만 사용자 입장에선 동일하게 보여짐
- 데이터 임시 열람, 보안적인 목적으로 제한된 범위 내 데이터 제공 등의 목적으로 사용될 수 있다.
"뷰 정의에 ORDER BY를 쓸 수 없다", "뷰는 ALTER문으로 변경할 수 없다"는 정보처리기사 등 이론 시험에서 자주 나오는 설명이지만, 모든 DBMS에 맞는 말은 아니다.
| 구분 | 오라클 | SQL Server |
|---|---|---|
| 뷰 정의 SELECT의 ORDER BY | 쓸 수 있다 | TOP 절(또는 OFFSET 절)과 함께 쓸 때만 쓸 수 있다 |
| ALTER VIEW로 정의(SELECT문) 변경 | 할 수 없다. CREATE OR REPLACE VIEW로 다시 정의한다. ALTER VIEW는 재컴파일(COMPILE)이나 제약조건 변경에 쓴다 |
할 수 있다. ALTER VIEW 뷰이름 AS SELECT ...
|
CREATE VIEW V_EMP AS
SELECT 사번, 이름, 급여 FROM EMP WHERE 부서 = 'IT'
ORDER BY 급여 DESC; -- 오류 없이 만들어진다
SELECT * FROM V_EMP; -- 박민수 6000, 김철수 5000 순서로 나온다
ALTER VIEW V_EMP AS SELECT 사번 FROM EMP;
-- ORA-00922: missing or invalid option
CREATE OR REPLACE VIEW V_EMP AS
SELECT 사번, 이름 FROM EMP ORDER BY 사번; -- 정의는 이렇게 바꾼다
CREATE VIEW V_EMP AS
SELECT 사번, 이름, 급여 FROM EMP ORDER BY 급여 DESC; -- 오류
CREATE VIEW V_EMP AS
SELECT TOP (3) 사번, 이름, 급여 FROM EMP ORDER BY 급여 DESC; -- 가능
ALTER VIEW V_EMP AS
SELECT 사번, 이름 FROM EMP; -- 정의 변경 가능
- SQL Server에서 TOP과 함께 쓴 ORDER BY는 어떤 행을 고를지만 정한다. 뷰를 조회한 결과가 그 순서로 나온다는 보장은 없으며, 순서가 필요하면 뷰를 조회하는 쿼리에 ORDER BY를 쓴다.
- 오라클에서도 결과 순서가 꼭 필요하면 뷰를 조회하는 바깥 쿼리에 ORDER BY를 쓰는 것이 안전하다.
- 이론 시험(정보처리기사 등)의 "뷰 정의에 ORDER BY 불가, ALTER로 변경 불가"는 일반론으로 출제된다. 문제의 보기가 이 설명을 기준으로 하는지 확인한다.
- SQL 개발자 시험처럼 오라클을 기준으로 하는 문제에서는 뷰 정의에 ORDER BY를 쓸 수 있고, 정의 변경은
CREATE OR REPLACE VIEW로 한다. - 뷰의 장점: 독립성(테이블 구조가 바뀌어도 뷰를 쓰는 응용은 그대로), 편리성(복잡한 질의를 단순하게), 보안성(보여 줄 칼럼·행만 공개)