즐겁게 배우는 SQL 10. 뷰
본 포스트는 박재호님의 유튜브 강의(링크)를 보고 일부 발췌하여 정리한 내용입니다.
사용된 자료, 샘플 데이터 등은 모두 SQLite Tutorial에서 확인할 수 있습니다.
1. 뷰란?
뷰의 정의는 '저장된 쿼리의 결과물'이다.
조금 더 풀어서 설명하면 쿼리를 데이터베이스 안에 이름이 붙은 객체로 취급한다는 뜻이다.
예를 들어 엄청나게 긴 쿼리문을 사용해야 할 때, 이 쿼리문을 매번 타이핑하거나 메모장같은 곳에 저장해 놓고 복붙한다면 매우 귀찮을 것이다.
이를 해결하기 위해 쿼리문을 저장해 놓고 이를 불러와서 다시 사용할 수 있도록 한 것이 뷰이다.
또한 뷰는 그 자체로 하나의 테이블처럼 취급되기 때문에 원하는 데이터의 원본은 그대로 두고 자유롭게 컬럼을 추가/삭제가 가능하므로 운영, 관리 측면에서도 편리하다.
한 가지 주의할 점은 뷰는 읽기 전용이기 때문에 CRUD 중 R만 사용 가능하므로, 데이터 자체를 조작할 수는 없다.
뷰를 생성하는 sql문은 다음과 같다.
CREATE [TEMP] VIEW [IF NOT EXISTS] view_name[(column-name-list)]
AS
select-statement;
TEMP
는 활성화하게 되면 현재 DB가 열린 세션에서만 볼 수 있고, 세션을 끝내면 데이터도 사라진다.
AS
이후에 일반적인 select 쿼리문을 작성하면 된다.
SELECT
trackid,
tracks.name,
albums.Title AS album,
media_types.Name AS media,
genres.Name AS genres
FROM
tracks
INNER JOIN albums ON Albums.AlbumId = tracks.AlbumId
INNER JOIN media_types ON media_types.MediaTypeId = tracks.MediaTypeId
INNER JOIN genres ON genres.GenreId = tracks.GenreId;
이 sql문을 가지고 뷰를 생성해 보자.
CREATE VIEW v_tracks
AS
SELECT
trackid,
tracks.name,
albums.Title AS album,
media_types.Name AS media,
genres.Name AS genres
FROM
tracks
INNER JOIN albums ON Albums.AlbumId = tracks.AlbumId
INNER JOIN media_types ON media_types.MediaTypeId = tracks.MediaTypeId
INNER JOIN genres ON genres.GenreId = tracks.GenreId;
뷰가 생성되었고, 테이블에서 쿼리하듯이 뷰인 v_tracks
에서도 select문을 사용해 데이터를 쿼리할 수 있을 것이다.
이번에는 새로운 컬럼이 추가된 뷰를 생성해 볼 것이다.
CREATE VIEW v_albums (
AlbumTitle,
Minutes
)
AS
SELECT albums.title,
SUM(milliseconds) / 60000
FROM tracks
INNER JOIN
albums USING (
AlbumId
)
GROUP BY albums.title;
sqlite의 경우, 어떤 뷰를 만들었는지 목록을 보고 싶다면 아래 sql문을 사용하면 된다.
SELECT name from sqlite_master
WHERE type ='view'
2. 뷰 제거
테이블을 제거하는 것이 간단한 것처럼, 뷰를 제거하는 것도 간단하다.
DROP VIEW [IF EXISTS] [schema_name.]view_name;
Author And Source
이 문제에 관하여(즐겁게 배우는 SQL 10. 뷰), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jiffydev/즐겁게-배우는-SQL-10.-뷰저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)