-
[SQLite] 뷰 (VIEW)Software/SQLite 2018. 3. 25. 16:33반응형
우리는 앞서 내부 조인(Inner Join)부터 외부 조인(Outer Join)까지 다양한 조인 연산들에 대해서 알아 보았다. 당시 우리가 조인 연산에 사용한 테이블은 단 두개로 그리 복잡한 SQL 구문을 작성하지는 않았었다. 그러나 만약 테이블 수가 많아 지고 한 쿼리 구문 내 여러개의 조인 연산들이 들어가게 되면 SQL 구문 작성이 어려워 질 뿐만 아니라 이해하기 어려워 질 가능성이 크다.
이렇게 복잡해진 SQL 구문을 조금 더 쉽고 단순하게 만들어 주기 위한 방법으로 뷰(VIEW)라는 가상 테이블을 만드는 방법이 있다. 이 가상 테이블은 검색 부분을 제외만을 제외하고 나머지 조인 연산 구문을 포함하여 생성되었기에 가상 테이블로의 질의문은 매우 단순해 질 수 있는 장점이 있다.
- 뷰 생성
뷰(VIEW)를 생성하는 방법은 아래와 같다. 참고로 뷰의 이름의 경우 테이블 이름과 동일하게 데이터 베이스 내에서 유일한 값을 가져야 하므로 IF NOT EXISTS 문을 넣어 해당 뷰 이름이 없는 경우에만 생성하도록 하는 것이 좋다.
CREATE VEIW IF NOT EXISTS [뷰 이름] AS [SELECT 문]
그럼 한번 실제로 한번 뷰를 생성해 보도록 하겠다. 먼저 간단하게 car 테이블에 있는 name과 price, 그리고 carBrand 테이블에 있는 brandName을 포함하는 뷰를 한번 만들어 보도록 하겠다.
sqlite> CREATE VIEW IF NOT EXISTS car_brand_view
...> AS
...> SELECT cars.name, cars.price, carBrand.brandName
...> FROM cars, carBrand
...> WHERE cars.brand_id = carBrand.brand_id;
한 번 잘 생성 되었는 지 확인해 보도록 하자.
sqlite> select * from cars;
car_id brand_id name price
---------- ---------- ---------- ----------
1 1 Sonata 1500000
3 2 K5 1500000
4 2 K3 1200000
5 2 K7 2200000
6 NULL 320d 4000000
sqlite> select * from carBrand ;
brand_id brandName
---------- ----------
1 Hyundai
2 Kia
10 BMW
11 Benz
12 Audi
sqlite> SELECT * FROM car_brand_view;
name price brandName
---------- ---------- ----------
Sonata 1500000 Hyundai
K5 1500000 Kia
K3 1200000 Kia
K7 2200000 Kia
name, price, brandName 컬럼을 가지는 car_brand_view이름의 뷰가 정상적으로 생성되었음을 확인하였다. 그리고 우리는 아래와 같이 내부 조인 연산을 통해 얻어 낼 수 있었는 결과를
sqlite> SELECT cars.name, cars.price, carBrand.brandName
...> FROM cars INNER JOIN carBrand
...> ON cars.brand_id = carBrand.brand_id
...> WHERE carBrand.brandName = "Kia";
name price brandName
---------- ---------- ----------
K5 1500000 Kia
K3 1200000 Kia
K7 2200000 Kia
아래와 같이 매우 단순화 된 질의문을 고칠 수 있게 되었다.
sqlite> SELECT * FROM car_brand_view
...> WHERE brandName = "Kia";
이처럼 뷰를 이용하면 복잡한 질의나 SQL 구문을 쉽고 단순하게 작성할 수 있고 이러한 SQL 구문을 쉽게 재사용할 수도 있다. 또한 사용자가 필요로 하는 일부 필드만을 조회할 수 있도록 뷰를 생성하여 필요한 데이터만 조회할 수도 있다. 그리고 AS 문을 이용하여 출력 형식을 변경하여 결과값을 도출해 내는 일도 가능하다.
다만 뷰는 읽기만 가능하며 레코드를 입력하거나 수정/삭제는 불가능 하다.
(사실 트리거를 이용하면 원본 테이블 데이터의 수정이 가능하나 직접적인 수정은 불가능하다.)
- 임시 뷰 생성
TEMPORARY 키워드를 사용하여 임시 뷰 생성이 가능한데 이 임시 뷰는 데이터베이스를 오픈(Open) 한 프로세스 내에서만 유효하며 만약 해당 프로세스가 이 데이터 베이스를 닫으면 (Close) 자동으로 삭제 된다.
CREATE TEMPORARY VIEW [뷰 이름].....;
- 뷰 삭제
뷰 삭제는 기존의 테이블 삭제와 동일하게 DROP 문을 이용하여 가능하다.
DROP VIEW [뷰 이름];
반응형'Software > SQLite' 카테고리의 다른 글
[SQLite] 트랜잭션 (TRANSACTION) (0) 2018.05.09 [SQLite] 트리거 (TRIGGER) (0) 2018.04.16 [SQLite] 테이블 제약 조건 (0) 2018.03.19 [SQLite] 인덱스(INDEX) (0) 2018.03.19 [SQLite] 외부 조인 (OUTER JOIN) (0) 2018.01.20 댓글