✅ 뷰(View)란?
**"가짜 테이블"**이야!
실제로 데이터를 저장하지는 않고, 진짜 테이블을 보는 창문 같은 것이야.
🎨 예시로 쉽게 설명!
진짜 테이블:
📋 CUSTOMERS라는 테이블이 있고, 거기에는 이름, 나이, 주소, 전화번호 등등이 있어.
근데 나는 이 중에 이름, 나이만 자주 보고 싶어!
그래서 이렇게 말해:
"이름하고 나이만 따로 보여주는 **창문(view)**을 만들어줘!"
그게 바로 VIEW야!
SELECT 문으로 만든 결과를 가짜 테이블처럼 저장하는 것!
✅ 왜 뷰를 사용할까?
| 이유 | 설명 |
| 🔒 보안 | 민감한 정보(예: 비밀번호, 급여 등)를 숨길 수 있어요. |
| 🔁 편의성 | 복잡한 SELECT문을 매번 안 쓰고, 뷰 이름만 쓰면 돼서 편해요. |
| 🔄 재사용성 | 여러 명이 같은 뷰를 사용하면 일관된 결과를 얻을 수 있어요. |
| 🧼 정리정돈 | 너무 많은 테이블을 깔끔하게 뷰로 정리할 수 있어요. |
✅ 뷰 만드는 방법
CREATE VIEW 뷰이름 AS
SELECT 열1, 열2, ...
FROM 테이블이름
WHERE 조건;
예시:
CREATE VIEW VIP_CUSTOMERS AS
SELECT MEM_ID, MEM_NAME, MEM_MILEAGE
FROM CUSTOMERS
WHERE MEM_MILEAGE >= 3000;
→ 이제 VIP_CUSTOMERS라는 가짜 테이블이 생긴 거야!
진짜 테이블은 CUSTOMERS, 근데 그걸 일부만 보여주는 창문이 VIP_CUSTOMERS야!
✅ 뷰 사용하는 방법
SELECT * FROM VIP_CUSTOMERS;
진짜 테이블처럼 사용할 수 있어!
✅ 뷰의 단점은?
- 데이터를 직접 저장하진 않아!
- 어떤 뷰는 **수정이 불가능(읽기 전용)**할 수 있어!
- 진짜 테이블이 바뀌면 뷰도 같이 바뀌어 (자동 반영)
✅ 뷰 수정 / 삭제
- 수정할 때:
CREATE OR REPLACE VIEW 뷰이름 AS
SELECT ...
- 삭제할 때:
DROP VIEW 뷰이름;
좋아! 이번엔 오라클 뷰(View)에서 자주 쓰이는 옵션들인
✅ WITH CHECK OPTION
✅ WITH READ ONLY
두 가지를 아주 쉽게 설명해줄게!
✅ 1. WITH CHECK OPTION
📌 뭔데?
"이 뷰에서 조건에 맞는 데이터만 수정할 수 있어!" 라는 뜻이야.
🎯 왜 써?
만약 뷰에서 조건 걸어놨는데,
그 조건을 깨뜨리는 수정을 하면 안 되니까 막아주는 역할이야.
CREATE VIEW vip_customers AS
SELECT * FROM customers
WHERE mem_mileage >= 3000
WITH CHECK OPTION;
이 뷰는 마일리지가 3000 이상인 고객만 보여줘.
그런데!
UPDATE vip_customers
SET mem_mileage = 2000
WHERE mem_id = 'user01';
이렇게 하면 마일리지가 3000 미만이 되니까 뷰 조건을 어기게 되지?
🔥 오류 발생!
왜? WITH CHECK OPTION이 걸려 있어서
"마일리지 3000 이상"이라는 조건을 깨는 수정은 못하게 막음!
✅ 2. WITH READ ONLY
📌 뭔데?
이 뷰는 그냥 보기만 가능!
🔒 수정(INSERT, UPDATE, DELETE)은 절대 안 돼!
🎯 왜 써?
민감한 데이터를 다룰 때,
누가 실수로라도 데이터를 수정 못 하게 하고 싶을 때 사용해!
📋 예시로 보기
CREATE VIEW only_view AS
SELECT mem_id, mem_name
FROM customers
WITH READ ONLY;
이 뷰는 단순히 회원 정보만 보여주는 뷰야.
이제 아래처럼 수정하면?
UPDATE only_view
SET mem_name = '바보'
WHERE mem_id = 'user01';
🔥 오류 발생!
이유? 이 뷰는 읽기 전용이니까! (WITH READ ONLY 때문!)
✅ 두 개 차이 비교!
| 구분 | WITH CHECK OPTION | WITH READ ONLY |
| 목적 | 조건을 유지하며 수정 가능하게 함 | 아예 수정 못 하게 막음 |
| INSERT/UPDATE 가능? | 가능하지만 조건을 지켜야 함 | 불가능 |
| DELETE 가능? | 가능 | 불가능 |
| 주로 사용 예 | 일부 조건 데이터만 보여주는 뷰 | 완전히 잠궈야 할 뷰 |
같이 쓰기도 가능할까?
YES!
CREATE VIEW vip_view AS
SELECT * FROM customers
WHERE mem_mileage >= 3000
WITH CHECK OPTION
WITH READ ONLY;
이건 보기만 가능하고, 수정도 조건을 지켜야만 가능하다는 뜻인데
실제로는 WITH READ ONLY 때문에 아예 못 고침!
'대덕인재 > Oracle' 카테고리의 다른 글
| [Oracle D-16] 비트맵 인덱스(Bitmap Index) (0) | 2025.04.22 |
|---|---|
| [Oracle D-16] 시퀀스(Sequence) (0) | 2025.04.22 |
| [Oracle D-15] Oracle 객체 (0) | 2025.04.21 |
| [Oracle D-15] 집합연산자(Set Operators) (0) | 2025.04.21 |
| [Oracle D-12] ANSI JOIN (0) | 2025.04.19 |