CREATE VIEW
CREATE VIEW는 SELECT 문을 캡슐화한 이름 붙은 뷰를 만들어요.
출처: 문서
본문
SELECT 문을 캡슐화한 이름 붙은 뷰를 만들어요.
문법
CREATE [TEMPORARY] VIEW [IF NOT EXISTS] [schema-name.]view-name
AS select-statement;
설명
뷰는 SELECT 문으로 정의된 가상 테이블이에요. 디스크에 데이터를 저장하지 않아요 — 뷰를 조회할 때마다 Turso가 기반이 되는 SELECT를 실행해요. 뷰는 복잡한 쿼리를 단순하게 하고, 계속 변하는 테이블 스키마 위에서 안정적인 인터페이스를 제공하고, 어떤 컬럼이나 행이 보이는지 제한해줘요.
매개변수
| 매개변수 | 설명 |
|---|---|
TEMPORARY |
뷰를 임시 데이터베이스에 만들어요. 뷰는 현재 연결에서만 보이고, 연결이 닫히면 사라져요. TEMP도 동의어로 받아들여요. |
IF NOT EXISTS |
같은 이름의 뷰가 이미 있을 때 오류를 막아줘요. 뷰가 있으면 문은 아무 것도 하지 않아요. |
schema-name |
뷰를 만들 붙은(attached) 데이터베이스 이름. 생략하면 main 데이터베이스. TEMPORARY와 함께 쓸 수 없어요. |
view-name |
데이터베이스 안에서 고유한 뷰 이름. |
select-statement |
뷰의 내용을 정의하는 SELECT 쿼리. |
동작
- 뷰는 읽기 전용이에요. 뷰에 대한 INSERT, UPDATE, DELETE는 뷰에 INSTEAD OF 트리거가 정의되어 있지 않으면 지원되지 않아요.
- SELECT 문은
sqlite_schema테이블에 저장되고, 뷰가 참조될 때마다 파싱돼요. - 뷰가 참조하는 테이블이 삭제되거나 호환되지 않는 방식으로 바뀌면, 그 뷰에 대한 쿼리는 오류를 만들어요.
예제
흔한 쿼리 단순화하기
CREATE VIEW active_users AS
SELECT id, name, email
FROM users
WHERE status = 'active';
-- Use the view like a table
SELECT * FROM active_users WHERE name LIKE 'A%';
집계 뷰
CREATE VIEW department_stats AS
SELECT
department,
COUNT(*) AS employee_count,
AVG(salary) AS avg_salary
FROM employees
GROUP BY department;
SELECT * FROM department_stats ORDER BY avg_salary DESC;
세션용 임시 뷰
CREATE TEMP VIEW my_tasks AS
SELECT id, title, due_date
FROM tasks
WHERE assignee = 'alice';
더 알아보기 (Learn more)
- CREATE MATERIALIZED VIEW - 미리 계산된 결과를 디스크에 저장하는 뷰
- DROP VIEW - 뷰 제거하기
- SELECT - 뷰 정의에 쓰이는 쿼리 문법
- CREATE TRIGGER - 뷰를 쓰기 가능하게 만드는 INSTEAD OF 트리거