//뷰, VIEW
- 개념적인(논리적인) 데이터 구조
- 쿼리 문장을 뷰로 정의해서 사용하면 간단하게 사용할 수 있다.
- 데이터베이스 객체 중 하나
- 가상 테이블, 뷰 테이블 등..
- 테이블처럼 사용한다.★★★★
- SQL을 저장한 객체(select 결과셋 데이터를 저장한 객체X / select문을 저장한 객체 O)
- 호출될 때마다 저장된 SQL이 실행된다.(실시간 가상 테이블)
- 2개 이상의 테이블을 사용해서 생성 가능 > 복합뷰
- ★★★★★읽기 전용 테이블(insert, update, delete도 실행은 되지만 절대 사용 금지!!)
- 역할(목적)
1. 쿼리 단순화 > 가독성 향상
2. 보안 관리
3. 쿼리를 다른 사용자(hr 등)과 공유
4. 재사용
create view 뷰명
as
select문;
create or replace view 뷰명 > or replace는 쓰는 것을 권장
as
select문
CREATE VIEW NOTICEVIEW
AS
SELECT N.ID, N.TITLE, N.WRITER_ID, M.NAME WRITER_NAME, COUNT(C.ID) CNT FROM MEMBER M
RIGHT OUTER JOIN NOTICE N ON M.ID = N.WRITER_ID
LEFT OUTER JOIN "COMMENT" C ON N.ID = C.NOTICE_ID
GROUP BY N.ID, N.TITLE, N.WRITER_ID, M.NAME;
SELECT * FROM NOTICEVIEW WHERE TITLE LIKE '%J%';
create or replace view 대여체크
as
select
m.name as mname,
v.name as vname,
to_char(r.rentdate, 'yyyy-mm-dd') as rentdate,
case
when r.retdate is not null then '반납 완료'
else '미반납'
end as state,
case
when r.retdate is null
then round(sysdate - (r.rentdate + (select period from tblGenre where seq = v.genre)))
end as 연체일수,
case
when r.retdate is null
then round((sysdate - (r.rentdate + (select period from tblGenre where seq = v.genre)))
* g.price * 0.1)
end as 연체금 -- 대여가격(10%) x 연체일
from tblRent r
inner join tblVideo v
on v.seq = r.video
inner join tblMember m
on m.seq = r.member
inner join tblGenre g
on g.seq = v.genre
order by state asc;
select * from 대여체크;
'데이터베이스(DB) > Oracle' 카테고리의 다른 글
[Oracle] 시퀀스(Sequence) (0) | 2023.02.22 |
---|---|
[Oracle] 제약사항 (0) | 2023.02.22 |
[Oracle] 유니온(UNION) (0) | 2023.02.21 |
[Oracle] 조인(JOIN) (0) | 2023.02.21 |
[Oracle] 서브 쿼리 (0) | 2023.02.20 |