
온/오프라인 상관 없이 약속은 잘 지켜야한다.
어떤 약속들은 누군가에게 큰 영향을 줄 수도 있다.
논리적인 가상 테이블 객체.
Select문의 from 절에 위치해서 테이블 처럼 사용된다.
하지만 실제 데이터를 저장하고 있는 테이블은 아니다.
복잡한 조건의 문장을 쉽게 단순화해서 사용할 수 있다.
보안에 이점이 있다. (컬럼의 비공개)
create or replace view [스키마명.]뷰이름 as select 문장;
-- view 만들기
create or replace view aaa as
select first_name || ' ' || last_name, email, hire_date from employees;
-- view 사용
select * from aaa;
select iname from aaa;
view 테이블에서 데이터를 수정하는 것은 권장할 일이 아니다.
view는 데이터를 수정할 수 있기에, 제한사항을 부여할 일이 생긴다.
with read only 를 부여하면 view에 읽기만 가능한 권한이 부여된다.
집계함수,분석함수,group by , order by,의사컬럼(가짜 컬럼)을 사용하여,
서브쿼리로 작성된 뷰는 뷰를 통한 데이터 변경을 허용하지 않는다.
뷰에서의 데이터 무결성(뷰를 통해서 데이터 입력, 삭제, 수정을 일정부분 제한) 기능
-> with check option.
create or replace view test_view as
select employee_id,first_name,last_name,email,hire_date,job_id,department_id
from employees where department_id in (10,20,30)
with check option;
-- id 값을 40을 넣을때
insert into test_view values ( 333,'sarang33','kim33','kimsarang33',sysdate,'IT_PROG',40);
/*
Error report -
ORA-01402: view WITH CHECK OPTION where-clause violation
*/
임시 테이블, 저장된 객체가 아니다.
쿼리가 실행되면 사라진다.
select * from (select * from employees);
예제
-- 테이블 생성
create table seqTest (
numbering number(10) constraint seqTest_num_pk primary key,
dataCol varchar2(10) not null
);
-- 올드 스쿨
-- 최대의 값을 선택해 1을 더한다음, 데이터 추가하는 넘버링 식 (old)
-- 쓰면 안되는 이유 : DB 데드락 유발. 데이터가 동시에 입력하는 경우, 오류 발생
insert into seqtest values (1,'bbbb');
insert into seqtest(numbering,datacol) values((select max(numbering) + 1 from seqtest), 'aaaa');
select*from seqtest;
-- 최-신 기술
-- sequence 는 순서대로 자기가 기억하는 번호로 저장함.
-- 이빨 빠지는 경우도 있지만, 안정성을 위하면 훨씬 좋음.
create sequence my_seq_num
minvalue 1
maxvalue 99999999
increment by 1
start with 12;
동의어(별명).
데이터베이스 보안성(원래의 객체에 별명을 달아서 숨김(?)).
편의성 : 긴이름의 객체를 짧게 사용할 수 있다. 시노님 단위 권한 부여

-- Union 예제
select 1,2,3,4 from dual
union
select 3,4,5,6 from dual;
/*
1 2 3 4
3 4 5 6
*/
-- 부서별로 집계 / 최대급여, 최소급여 ,평균 급여 집계
select department_id,max(salary) 최대, min(salary)최소, avg(salary)평균
from employees
group by department_id, job_id
order by department_id;
오라클에서만 지원이 되었었다.
모든 DBMS에서 지원이 되고 있다.
