◆ 뷰의 개념
뷰는 기존에 생성된 테이블 또는 다른 뷰를 이용하여 생성되는 가상 테이블로 접근할 수 있는 전체 데이터 중에서 일부만 접근할 수 있도록 제한하기 위한 가상 테이블 기법.(실제 테이블이 아니다)
전체 데이터 중 일부 사용자만 접근할 수 있도록 하여 데이터의 보안과 사용자의 편의성을 높이기 위해 사용함.
뷰에는 인덱스를 만들지 못한다.
◆ 뷰 생성
SQL> create [or replace] [force | noforce] view 뷰명 [(alias, alias, ...)]
as
subquery;
OR REPLACE : 기존 뷰와 동일한 이름으로 뷰를 재생성하는 경우 내용을 덮어씀as
subquery;
ALIAS : 기본 테이블의 컬럼명과 다르게 지정한 뷰의 컬럼명
FORCE : 기본 테이블의 존재 여부에 상관없이 뷰 생성
NOFORCE : 기본 테이블이 존재할 경우에만 뷰 생성.(기본값)
◆ 인라인 뷰(Inline View)
from절에 서브쿼리를 사용하여 생성한 임시 뷰를 의미.
인라인 뷰는 일회용이다. 해당 쿼리에서만 쓰고, 외부에서는 불러올 수 없다.
SQL> select dname, avg_height, avg_weight
from (select deptno, avg(height) avg)height, avg(weight) avg_weight
from student
group by deptno) s,
department d
where s.deptno = d.deptno;
위 쿼리는 인라인 뷰를 사용하여 학과별로 학생들의 평균 키와 평균 몸무게, 학과명을 출력한다.from (select deptno, avg(height) avg)height, avg(weight) avg_weight
from student
group by deptno) s,
department d
where s.deptno = d.deptno;
◆ 뷰 삭제
SQL> drop view 뷰명;
◆ 뷰와 관련된 데이터 딕셔너리
- USER_VIEWS : 사용자가 생성한 모든 뷰를 볼 수 있다.
[문제] 사원테이블(temp)에서 해당 사원의 연봉이 동일한 직급을 가진 사원의 평균연봉보다 많이 받는 사원의 사번, 이름, 연봉을 출력하세요.
SCOTT> select a.emp_id,
2 a.emp_name,
3 a.salary
4 from temp a,
5 (select lev, avg(salary) avgsal
6 from temp
7 group by lev) b
8 where a.lev = b.lev
9 and a.salary > b.avgsal
EMP_ID EMP_NAME SALARY
---------- ---------- ----------
19960101 홍길동 72000000
19930331 정도령 70000000
19950303 이순신 56000000
SCOTT> select a.emp_id,
2 a.emp_name,
3 a.salary
4 from temp a,
5 (select lev, avg(salary) avgsal
6 from temp
7 group by lev) b
8 where a.lev = b.lev
9 and a.salary > b.avgsal
EMP_ID EMP_NAME SALARY
---------- ---------- ----------
19960101 홍길동 72000000
19930331 정도령 70000000
19950303 이순신 56000000
[문제] temp, tdept 테이블에서 에서 아래처럼 emp_id, emp_name 컬럼을 출력하도록 출력결과를 3~6번까지 줄의 데이터만 출력하세요.
SCOTT> select a.no,
2 a.emp_id,
3 a.emp_name,
4 b.dept_name
5 from (select rownum no,
6 emp_id,
7 emp_name,
8 dept_code
9 from temp
10 ) a,
11 tdept b
12 where a.no between 3 and 6
13 and a.dept_code = b.dept_code
NO EMP_ID EMP_NAME DEPT_NAME
---------- ---------- ---------- --------------------
3 19970201 박문수 총무
4 19930331 정도령 기술지원
5 19950303 이순신 H/W지원
6 19966102 지문덕 S/W지원
SCOTT> select a.no,
2 a.emp_id,
3 a.emp_name,
4 b.dept_name
5 from (select rownum no,
6 emp_id,
7 emp_name,
8 dept_code
9 from temp
10 ) a,
11 tdept b
12 where a.no between 3 and 6
13 and a.dept_code = b.dept_code
NO EMP_ID EMP_NAME DEPT_NAME
---------- ---------- ---------- --------------------
3 19970201 박문수 총무
4 19930331 정도령 기술지원
5 19950303 이순신 H/W지원
6 19966102 지문덕 S/W지원
'오라클 > SQL' 카테고리의 다른 글
[SQL] 인덱스의 단점 (2) | 2010.08.24 |
---|---|
[SQL] Index (0) | 2010.08.24 |
[SQL] Data Dictionary (0) | 2010.08.19 |
[SQL] DDL(Data Definition Language) (0) | 2010.08.19 |
[SQL] TCL(Transaction Control Language) (0) | 2010.08.19 |