[SQL] View

오라클/SQL 2010. 8. 24. 00:51

◆ 뷰의 개념
뷰는 기존에 생성된 테이블 또는 다른 뷰를 이용하여 생성되는 가상 테이블로 접근할 수 있는 전체 데이터 중에서 일부만 접근할 수 있도록 제한하기 위한 가상 테이블 기법.(실제 테이블이 아니다)
전체 데이터 중 일부 사용자만 접근할 수 있도록 하여 데이터의 보안사용자의 편의성을 높이기 위해 사용함.
뷰에는 인덱스를 만들지 못한다.


◆ 뷰 생성

SQL> create [or replace] [force | noforce] view 뷰명 [(alias, alias, ...)]
   as
   subquery;
OR REPLACE : 기존 뷰와 동일한 이름으로 뷰를 재생성하는 경우 내용을 덮어씀
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;
위 쿼리는 인라인 뷰를 사용하여 학과별로 학생들의 평균 키와 평균 몸무게, 학과명을 출력한다.


◆ 뷰 삭제
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

[문제] 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지원

'오라클 > 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
Posted by 겨울섬
,