18장 뷰 사용하기
뷰 이해하기
뷰는 가상 테이블이다. 데이터를 가진 테이블과 달리, 동적으로 데이터를 가져오는 쿼리들을 담고 있을 뿐이다. 오직 사용될때만 !
예시로 이해하자
위 쿼리를 ProductCustomers라는 가상 테이블로 묶는다고 생각하면
과 같다. 전보다 단순해졌다. 그럼 왜 뷰를 사용할까?
왜 뷰를 사용하는가?
뷰를 사용하는 이유는 다음과 같다.
SQL 문을 재사용하기 위해
복잡한 SQL 작업을 단순화하기 위해 - 쿼리 자체에 대한 상세 내용을 몰라도 작성된 쿼리 사용이 가능하다.
완전한 테이블이 아닌, 테이블의 일부만을 노출하기 위해
데이터를 보호하기 위해 - 사용자는 전체 테이블이 아닌 특정 부분에만 접근 가능하다.
데이터 형식을 변경하기 위해 - 뷰는 원래 테이블과 다른 형식으로 데이터를 가져올 수 있다.
일반적으로 뷰는 생성 후 테이블과 같은 방식으로 사용 가능하다. SELECT 작업, 데이터 필터링, 정렬, 다른 뷰나 테이블과 조인 등...
그럼에도 뷰는 뷰일 뿐이다. 데이터를 저장하지 않고 사용될 때만 다른 테이블에서 가져와 반환한다.
뷰 규칙과 제한
다음은가장 자주 사용되는 규칙 몇 가지와 뷰 생성과 사용을 통제하기 위한 제약 사항이다.
뷰는 고유한 이름을 가져야 한다. 다른 테이블이나 뷰 이름을 사용할 수 없다.
생성 가능한 뷰의 수는 제한 없다.
뷰를 생성하기 위해 보안 권한을 가져야 한다.
뷰는 뷰를 포함할 수 있다.
많은 DBMS는 뷰 쿼리에서 ORDER BY 절의 사용을 금한다.
일부 DBMS에서는 가져오는 모든 열에 이름을 부여해야 한다. 열이 계산 필드라면 별칭..
뷰는 인덱스를 사용할 수 없다.
SQLite 같은 일부 DBMS는 뷰를 읽기 전용 쿼리로 처리한다. 뷰에서 데이터를 가져올 수 있지만 테이블에 데이터를 쓸 수는 없다.
일부 DBMS에서는 삽입 또는 업데이트한 데이터가 뷰의 범위를 벗어나는 경우 삽입과 업데이트를 불허하는 뷰를 만들 수 있다.
DBMS 마다 다른 제약 사항이 있다. 매뉴얼을 참고하자.
뷰 생성하기
뷰는 CREATE VIEW 문으로 생성한다. CREATE TABLE처럼 존재하지 않는 뷰를 생성할 때만 사용할 수 있다.
뷰 이름 바꾸기
뷰를 덮어쓰거나 업데이트하려면, 뷰를 삭제한 후 다시 생성해야 한다.
뷰 삭제는 DROP 문을 사용한다. - DROP VIEW 뷰이름;
복잡한 조인을 단순화하기 위한 뷰 생성하기
뷰를 자주 사용하는 이유 중 하나는 복잡한 SQL을 숨기기 위해서다. 복잡한 SQL은 보통 조인을 포함하고 있다. 위 예시에서 생성한 가상 테이블 ProductCustomers이다.
이렇게 생성한 테이블을 사용하면
와 같이 사용할 수 있다. 앞서 살펴본 것처럼 뷰는 복잡한 SQL 문을 매우 단순화할 수 있다. 또 필요시 재사용이 가능하다.
가져온 데이터의 형식을 변환하기 위해 뷰 사용하기
뷰는 가져온 데이터의 형식을 변환하기 위해서도 사용한다.
다음과 같은 쿼리를 주기적으로 사용한다고 가정해보자.
이를뷰를 이용해 바꾸면
와 같다. 데이터 형식을 바꾸는 로직을 한번에 묶어 언제든 재사용 가능하면서 단순화할 수 있다.
원하지 않는 데이터를 필터링하기 위해 뷰 사용하기
뷰는 WHERE 절과 함께 사용할 때도 유용하다.
예시를 보자.
계산 필드와 함께 뷰 사용하기
뷰는 계산 필드를 단수화할 때 특히 더 유용하다.
7장에서 사용한 계산 필드를 예시로 보자.
제품별 총가격 (expanded_price)을 계산한 예시는 다음과 같이 뷰로 변경할 수 있다.
뷰로 계산 부분을 묶고 조건을 사용해 기능을 분리해 사용할 수 있다.
정리하기
가상 테이블, 뷰
뷰의 특징과 사용 방법
도전 과제
주문 내역이 있는 고객의 모든 열을 포함하도록 CustomersWithOrders라는 뷰를 작성하라. 원하는 고객을 거르기 위해 Orders 테이블과 조인할 수 있다. 그 후 데이터가 맞는지 확인하기 위한 SELECT 문을 작성한다.
다음 SQL 문은 무엇이 잘못되었는가?
Last updated
Was this helpful?