CREATE VIEW

CREATE VIEW

이 문서는 SQLite에서 CREATE VIEW 문을 사용하여 뷰를 정의하는 방법을

출처: 문서

본문

1. 구문

create-view-stmt:

CREATE TEMP TEMPORARY VIEW IF NOT EXISTS schema-name . view-name ( column-name ) AS select-stmt ,

select-stmt:

WITH RECURSIVE common-table-expression , SELECT DISTINCT result-column , ALL FROM table-or-subquery join-clause , WHERE expr GROUP BY expr HAVING expr , WINDOW window-name AS window-defn , VALUES ( expr ) , , compound-operator select-core ORDER BY LIMIT expr ordering-term , OFFSET expr , expr

common-table-expression:

table-name ( column-name ) AS NOT MATERIALIZED ( select-stmt ) ,

compound-operator:

UNION UNION INTERSECT EXCEPT ALL

expr:

literal-value bind-parameter schema-name . table-name . column-name unary-operator expr expr binary-operator expr function-name ( function-arguments ) filter-clause over-clause ( expr ) , CAST ( expr AS type-name ) expr COLLATE collation-name expr NOT LIKE GLOB REGEXP MATCH expr expr ESCAPE expr expr ISNULL NOTNULL NOT NULL expr IS NOT DISTINCT FROM expr expr NOT BETWEEN expr AND expr expr NOT IN ( select-stmt ) expr , schema-name . table-function ( expr ) table-name , NOT EXISTS ( select-stmt ) CASE expr WHEN expr THEN expr ELSE expr END raise-function

filter-clause:

FILTER ( WHERE expr )

function-arguments:

DISTINCT expr , * ORDER BY ordering-term ,

literal-value:

CURRENT_TIMESTAMP numeric-literal string-literal blob-literal NULL TRUE FALSE CURRENT_TIME CURRENT_DATE

over-clause:

OVER window-name ( base-window-name PARTITION BY expr , ORDER BY ordering-term , frame-spec )

frame-spec:

GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING RANGE ROWS UNBOUNDED PRECEDING expr PRECEDING CURRENT ROW expr PRECEDING CURRENT ROW expr FOLLOWING expr PRECEDING CURRENT ROW expr FOLLOWING EXCLUDE CURRENT ROW EXCLUDE GROUP EXCLUDE TIES EXCLUDE NO OTHERS

raise-function:

RAISE ( ROLLBACK , expr ) IGNORE ABORT FAIL

type-name:

name ( signed-number , signed-number ) ( signed-number )

signed-number:

+ numeric-literal -

join-clause:

table-or-subquery join-operator table-or-subquery join-constraint

join-constraint:

USING ( column-name ) , ON expr

join-operator:

NATURAL LEFT OUTER JOIN , RIGHT FULL INNER CROSS

ordering-term:

expr COLLATE collation-name DESC ASC NULLS FIRST NULLS LAST

result-column:

expr AS column-alias * table-name . *

table-or-subquery:

schema-name . table-name AS table-alias INDEXED BY index-name NOT INDEXED table-function-name ( expr ) , AS table-alias ( select-stmt ) ( table-or-subquery ) , join-clause

window-defn:

( base-window-name PARTITION BY expr , ORDER BY ordering-term , frame-spec )

frame-spec:

GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING RANGE ROWS UNBOUNDED PRECEDING expr PRECEDING CURRENT ROW expr PRECEDING CURRENT ROW expr FOLLOWING expr PRECEDING CURRENT ROW expr FOLLOWING EXCLUDE CURRENT ROW EXCLUDE GROUP EXCLUDE TIES EXCLUDE NO OTHERS

2. 설명

CREATE VIEW 명령은 미리 작성된 SELECT 문에 이름을 지정해요. 뷰가 생성되면 다른 SELECT의 FROM 절에서 테이블 이름 대신 사용할 수 있어요.

"CREATE"와 "VIEW" 사이에 "TEMP" 또는 "TEMPORARY" 키워드가 있으면 생성된 뷰는 그 뷰를 생성한 데이터베이스 연결에서만 보이고, 데이터베이스 연결이 닫히면 자동으로 삭제돼요.

schema-name이 지정되면 뷰는 지정된 데이터베이스에 생성돼요. VIEW에 schema-name과 TEMP 키워드를 함께 지정하는 것은 오류예요. 단, schema-name이 "temp"인 경우는 예외예요. 스키마 이름이 지정되지 않고 TEMP 키워드도 없으면 뷰는 기본 데이터베이스에 생성돼요.

뷰는 DELETE, INSERT 또는 UPDATE를 할 수 없어요. SQLite에서 뷰는 읽기 전용이에요. 하지만 많은 경우 뷰에 INSTEAD OF 트리거를 사용하여 같은 작업을 수행할 수 있어요. 뷰는 DROP VIEW 명령으로 제거해요.

view-name 뒤에 column-name 목록이 오면 그 목록이 뷰의 열 이름을 결정해요. column-name 목록이 생략되면 뷰의 열 이름은 select-stmt의 결과 집합 열 이름에서 파생돼요. column-name 목록을 사용하는 것이 권장돼요. 또는 column-name 목록을 생략하려면 뷰를 정의하는 SELECT 문의 결과 열에 "AS column-alias" 구문을 사용하여 명확한 이름을 지정해야 해요. SQLite는 자동 생성된 열 이름에 의존하는 뷰를 만들 수 있게 허용하지만, 열 이름 생성 규칙은 인터페이스의 정의된 일부가 아니며 향후 SQLite 릴리스에서 변경될 수 있으므로 사용하지 않는 것이 좋아요.

column-name 목록 구문은 SQLite 버전 3.9.0(2015-10-14)에서 추가됐어요.

더 알아보기 (Learn more)