개발로그필름
[SQL] VIEW 본문

1. VIEW란?
- SQL에서 가상의 테이블을 의미
- 실제 데이터를 저장하지 않지만, 기존 테이블의 데이터를 특정한 형태로 보여주는 역할을 한다
- 특정 조건을 만족하는 데이터를 자주 조회해야 한다면 매번 복잡한 SELECT 문을 실행하는 대신 VIEW를 만들어 놓고 간단하게 사용할 수 있다
2. VIEW를 사용하는 이유
✅ 코드 단순화: 복잡한 SELECT 문을 단순하게 사용할 수 있음
✅ 보안 강화: 원본 테이블의 일부 데이터만 노출 가능
✅ 재사용성 증가: 여러 쿼리에서 동일한 VIEW를 활용 가능
✅ 가독성 향상: SQL 코드가 더 읽기 쉬워짐
3. VIEW 기본 사용법
(1) VIEW 생성 (CREATE VIEW)
CREATE VIEW view_name AS
SELECT column1, column2
FROM table_name
WHERE condition;
✅ view_name: 생성할 VIEW의 이름
✅ table_name: 원본 테이블 이름
✅ condition: 특정 조건을 지정할 수도 있음
예제
CREATE VIEW active_users AS
SELECT id, name, email
FROM users
WHERE status = 'active';
✔ active_users VIEW는 users 테이블에서 status='active'인 사용자만 조회할 수 있다
4. VIEW 사용하기
VIEW는 일반 테이블처럼 SELECT 문을 사용해서 조회할 수 있다
SELECT * FROM active_users;
✔ active_users VIEW는 users 테이블을 직접 조회하는 것처럼 사용할 수 있다
5. VIEW 수정 (CREATE OR REPLACE VIEW)
VIEW를 수정할 때는 CREATE OR REPLACE VIEW를 사용하면 된다
CREATE OR REPLACE VIEW active_users AS
SELECT id, name, email, created_at
FROM users
WHERE status = 'active';
✔ 기존 VIEW를 삭제하지 않고 바로 수정 가능
6. VIEW 삭제 (DROP VIEW)
VIEW를 삭제하려면 DROP VIEW를 사용
DROP VIEW active_users;
✔ VIEW를 삭제하면 더 이상 사용할 수 없다
7. VIEW의 단점
❌ INSERT, UPDATE, DELETE 제한: VIEW는 읽기 전용인 경우가 많음
❌ 퍼포먼스 이슈: 원본 테이블이 크면 VIEW 조회 속도가 느릴 수 있음
❌ 복잡한 VIEW: 너무 많은 조인을 포함하면 성능 저하 가능
하지만, WITH CHECK OPTION을 사용하면 업데이트가 가능한 VIEW를 만들 수도 있음!
CREATE VIEW modifiable_view AS
SELECT id, name, status
FROM users
WHERE status = 'active'
WITH CHECK OPTION;
✔ WITH CHECK OPTION을 사용하면, status='active'를 유지하는 범위 내에서만 데이터 변경 가능
8. 최신 SQL 표준 및 주요 DBMS 지원
VIEW 지원 여부
✅ MySQL, PostgreSQL, SQL Server, Oracle 등 대부분의 DBMS에서 지원
✅ 최신 SQL 표준에서도 VIEW는 계속 사용 가능
✅ MySQL 8.0+, PostgreSQL 14+, SQL Server 2019+에서 최적화된 VIEW 기능 제공
9. 결론
📌 VIEW는 가상의 테이블로, 데이터 조회를 더 쉽고 효율적으로 할 수 있는 기능!
📌 보안, 코드 단순화, 재사용성 증가 등의 장점이 있음!
📌 INSERT/UPDATE/DELETE 제한이 있을 수 있으므로, 사용 목적을 잘 고려해야 함!
📌 최신 MySQL, PostgreSQL, SQL Server에서도 강력하게 지원됨!
'IT > SQL' 카테고리의 다른 글
[SQL] DATETIME과 TIMESTAMP의 차이점: 언제, 어떻게 사용할까? (0) | 2025.03.14 |
---|---|
[SQL] ON DELETE RESTRICT (0) | 2025.03.12 |
[SQL] SELECT문 실행 순서 (0) | 2025.03.11 |
[SQL] SUBSTRING() 함수 (0) | 2025.03.10 |
[SQL] 년, 월, 일 컬럼 값(date)만 있을 때 요일을 어떻게 조회하지? (0) | 2025.03.05 |