SQL에서 view는 SQL 쿼리의 결과 셋을 기반으로 만들어진 일종의 가상 테이블이다.
view는 실제 테이블과 같이 행과 열을 가지고 있는데, 이 때 뷰에 속한 각 필드들은 데이터베이스에 들어 있는 하나 이상의 실제 테이블로부터 온다. view table을 생성함으로써 SQL 쿼리 또는 함수를 추가 하여, 해당 데이터가 마치 하나의 테이블에서 온 것처럼 만들 수 있다.
또한, 뷰는 데이터를 물리적으로 저장하는 것이 아니라 CREATE VIEW
명령어로 뷰를 정의할 때 AS
절 다음에 등장하는 쿼리문 자체를 저장한다.
뷰는 접근 단순화 & 보안을 높이는 데 필요하다.
여러 테이블을 조인하는 길고 복잡한 쿼리문을 통해 데이터를 조회해야 하는 경우, 해당 쿼리문을 매번 작성하는 일은 번거로운 일이다. 뷰 테이블을 이용하면 해당 쿼리문을 뷰 테이블로 만들어 놓고 뷰를 하나의 테이블인 것처럼 조회할 수 있어 편하다.
또한, 동일한 테이블에 접근하는 여러 다른 사용자들이 있다면 사용자들마다 서로 다른 뷰에 접근하도록 여러 뷰를 정의할 수 있다. 이를 통해 특정 사용자만 특정 뷰에 접근할 수 있도록 접근을 제한함으로써 보안을 높이는 것이 가능하다.
그러나 뷰에도 제약 사항은 있다.
단순 뷰는 INSERT, UPDATE, DELETE를 자유롭게 사용할 수 있다. 하지만 함수, UNION, GROUP BY 등을 사용한 복잡한 뷰인 경우 해당 명령문들을 사용하는 것이 불가능하다.
데이터베이스는 유저가 쿼리할 때마다 view를 매번 recreate하기 때문에 view는 항상 최신의 데이터를 보여준다.
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
예시
CREATE VIEW [developer employees] AS
SELECT name, duty
FROM employees
WHERE role = 'developer';
이제 developer employees
라는 뷰 테이블이 생성되었으며 해당 뷰를 원래 존재하는 테이블인 것처럼 쿼리하는 것이 가능하다.
아래의 예시처럼 서브쿼리를 이용해서 view table을 만드는 것도 가능하다.
CREATE VIEW [Developers Above Average Salary] AS
SELECT name, duty
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
이렇게 생성된 view table도 당연히 원래 존재하는 테이블인 것처럼 쿼리할 수 있다.
SELECT * FROM [Developers Above Average Salary];
CREATE OR REPLACE VIEW
문을 이용해 수정하는 것이 가능하다.
CREATE OR REPLACE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
CREATE VIEW
문과 유사한 방법을 사용한다.
아래 예시에서는 developer employees
뷰에 year_of_entry
열을 추가했다.
CREATE OR REPLACE VIEW [developer employees] AS
SELECT name, duty, year_of_entry
FROM employees
WHERE role = 'developer';
뷰를 삭제하는 것은 일반 테이블을 삭제하는 쿼리와 유사하게 DROP VIEW
를 사용한다.
DROP VIEW [devloper employees];
참고
https://www.w3schools.com/sql/sql_view.asp