데이터에 안전하게 접근 하는 방법, 뷰.

티스토리 메뉴 펼치기 댓글수0

Dev Center/DB + JSP start

데이터에 안전하게 접근 하는 방법, 뷰.

seanhigher
댓글수0
여러개의 테이블에서 원하는 데이터를 얻어내기 위해서는 조인 연산을 통해서 결과를 얻어낼 수 있다. 하지만, 똑같은 데이터를 얻어내기 위해서 매번 조인 연산을 해야 한다는 것은 매우 불합리한 일임을 쉽게 느끼게 될 것이다.



VIEW.
뷰는 실제로 존재하는 테이블과는 조금 차이가 있다. 테이블은 데이터를 갖고 있지만, 뷰는 갖고 있지 않다. 그리고 조인 연산으로 데이터를 가져오게 되면, 식의 조건에 맞는 테이블의 형태로 데이터를 보여주게 된다. 이렇게 조인과 셀렉트 연산으로 보여지는 가상의 테이블을 영구적으로 만들어 놓는 것을 뷰라고 정의할 수 있다.


뷰 생성하기.
뷰를 생성하는 방법은 테이블을 만드는 방법과 비슷하다.

CREATE VIEW 뷰이름;
CREATE OR REPLACE VIEW 뷰이름;

두번째의 쿼리는 동일한 이름의 뷰가 이미 정의되어 있을 경우 이전의 것에 그대로 덮어서 생성을 하게 된다. 이전것과는 상관없이 무조건 생성하는 것이다. 하지만 이것은 단지 뷰만 만들어 놓으것이다. 어떠한 형태와 구조도 없고, 당연히 데이터도 없다. 아직은 아무런 쓸모가 없는 것이다. 이뷰에 데이터를 넣어주어야 뷰로서의 기능을 발휘하게 된다.

CREATE VIEW 뷰이름 AS SELECT * FROM 대상테이블;

위의 쿼리문을 실행하게 되면, 대상테이블에 있던 데이터가 새로운 뷰 안에 포함되게 된다. 하지만, 이렇게 테이블을 그대로 뷰로 옮겨놓는 것은 뷰의 가능성을 무시하는 처사라고 할 수있다. 일반적으로는 AS 절 이후의 셀렉트문을 여러개의 테이블에서 조인을 하거나, 원하는 컬럼들만 추출하여 새로운 테이블을 만든것과 같은 효과를 주어 사용을 하게 된다.

CREATE VIEW 뷰이름 AS
    SELECT e.employee_id, e.last_name, e.salary, e.department_id, d.department_name
        FROM employee e, department d WHERE e.department_id = d.department_id
            ORDER BY salary DESC;

위와 같은 방법으로 뷰를 생성해 놓으면 다시는 부서의 이름을 얻어내기 위해 조인을 하는 수고는 덜게 될 것이다.


인라인 뷰의 사용.
테이블을 조인하기에도 적당하지 않고, 뷰를 만들기에도 한번만 사요을 해야 하는 것이 있다면... 서브쿼리와 비슷한 형태로 인라인 뷰 기능을 이용하면 된다. 서브 쿼리는 어떠한 결과 값을 반환하여 WHERE, HAVING 과 같은 조건절에 사용되는 반면, 인라인뷰는 조건에 맞는 테이블 자체를 반환하기 때문에 FROM 절에 값으로 사용할 수 있다.

SELECT employee_id, last_name, hire_date
    FROM (SELECT employee_id, last_name, hire_date, FROM employee ORDER BY hire_date)
        WHERE employee_id <= 50;

인라인 뷰는 위와 같은 형식으로 사용하는 것이 가능하다. 조금더 발전적인 형태로는 인라인 뷰와, 서브쿼리, 조인연산을 적절하게 사용하게 된다면, 원하는 데이터라면 어떠한 것이라도 가져오는 것이 가능할 것이다.

맨위로