초급의 끄적거림

[SQL] View 본문

DB/Oracle

[SQL] View

codingD 2019. 7. 23. 22:31

[View (뷰)]

⊙ 물리적 테이블 : 사용자가 create 에 의해 생성한 실제 존재하는 테이블

⊙ 논리적 테이블 : 사용자가 SQL문에 의해 가공한 테이블

⊙' 테이블A'와 '테이블B'는 물리 테이블, '뷰C' 는 두개의 테이블을 이용하여 생성한 뷰

 

1) 정의

 ⊙ 테이블에 대한 가상의 테이블(=논리적 테이블)로써 테이블처럼 직접 데이터를 소유하지 않고 검색시에 이용할 수 있도록 정보를 담고 있는 객체, 테이블 정보의 부분집합


2) 사용목적

 ⊙ 테이블에 대한 보안 기능을 설정해야 하는 경우

 ⊙ 복잡하며 자주 사용하는 질의 SQL문을 보다 쉽고 간단하게 사용해야 하는 경우


3) 뷰 생성 권한 부여 (권한을 주지 않을 경우, 뷰를 만들 수 없을 수도 있음)

 

 cmd>sqlplus / as sysdba                        - 최고권력자 sysdba로 로그인해서 권한을 줘야 함
 SQL>grant create view to java0514

4) 뷰 생성 형식

 

 creat or replace view 뷰이름
 as
    [SQL문] (view에다가 등록시키고 싶은 sql문 넣기)

★정리 ★ create or replace view 뷰이름 as 실제로실행할SQL명령어

 → replace : 이미 존재하는 뷰의 내용을 수정함


5) 뷰 생성하기

 

 create view test_view
 as
    select * from emp;

 <테이블, 뷰 목록 확인>

 select * from tab;

 table 물리적 테이블
 view 논리적 테이블

6) 뷰 삭제하기 

 ⊙ drop view 뷰이름;


7) 예제

 7-1) 뷰생성

 

 create or replace view test_view

 as

     select empno, ename, job, sal, deptno

     from emp;

 

 7-2) 뷰로 등록된 SQL문 실행 (만들어진 emp에서 empno, ename, job, sal, deptno를 가져와 보임) - 생성된 뷰는 테이블처럼 사용가능

select * from test_view;

 

 

7-3) 뷰의 세부 정보 확인 (데이터 사전)

  ⊙ select * from user_view;


 8) as 명령어

select ename as 이름

        ,sal 급여

        , hiredate 입사일

from emp;

 

 

 

 

 


 9) 예제

  9-1) emp 테이블의 이름을 AA로 바꿔서 사용

① select * from emp AA;

② select * from emp AA order by AA.ename;     - AA의 ename 을 기준으로 정렬

  = select * from emp order by java0514.emp.ename;   -java0514 : 우리가 원래 들어가 있는 첫번째인데 생략, AA를 쓰지 않는다면 풀네임은 emp.ename;

 

 9-2)

① select * from emp where ename='무궁화'; 

 - deptno만보고 '무궁화'가 경리팀인지 총무팀인지 알수 없기 때문에 부서테이블과의 조인이 필요

 

② select emp.name, emp.deptno, dept.* 

from emp join dept

on emp.deptno=dept.deptno;

 - emp 테이블과 dept가 조인하여 emp의 deptno와 dept의 deptno가 같을 때 emp테이블의 이름, 부서번호, dept 테이블의 모든 것을 조회할 것

 

③  과 동일한 결과

select AA.ename, AA.deptno, BB.*

from emp AA join dept BB

on AA.deptno=BB.deptno;              - emp 테이블 명칭 : AA, dept 테이블 명칭 : BB (대소문자 불문 but 한글X)

 

→ 이런식으로 줄줄이 다 쓰게 되면 헷갈리고 힘듦, 이것을 한번에 만들어 놓고 끌어다 쓰기 쉽게 하는 것 : view


10) 9-2 의 내용을 veiw로 만들어줌

 create or replace view test2_view

 as

    select AA.ename, AA.deptno, BB.dname, BB.loc

    from emp AA join dept BB

    on AA.deptno=BB,.deptno;

 

select * from test2_view;

 

 

 create or replace view test2_view
 as
    select AA.ename, AA.deptno, BB. *
    from emp AA join dept BB
    on AA.deptno=BB,.deptno;

ORA-00957: duplicate column name 00957. 00000 - "duplicate column name"
▶ 테이블 조인시 양쪽 테이블에 존재하는 칼럼은 자신의 소속을 알려줘야함, 위에서처럼 BB.* 를 쓰게 되면 지정없이 다 들어가서 컬럼 이름이 중복된다고 하는 오류가 발생

 

select emp.ename, emp.deptno, dept.dname

from emp join dept

on emp.deptno=dept.deptno;   

 - 조인을 통해 부서명까지 확인할 수 있게 됨

 

 

 

 

 

 

 select ename, sal, deptno, dname

 from(select emp.ename, emp.deptno, dept.dname from emp join dept

        on emp.deptno = dept.deptno) AA

 where AA.deptno=10;

'DB > Oracle' 카테고리의 다른 글

[SQL] join 1  (0) 2019.07.24
[SQL] Index  (0) 2019.07.24
[SQL] 서브쿼리 (Sub Query)  (0) 2019.07.23
[SQL] group 외 예제  (0) 2019.07.23
[SQL] 함수  (0) 2019.07.22
Comments