공부/오늘 배운것

22.10.31.Mon - View 와 Sequenece

Doil98 2022. 10. 31. 17:47

오전 :

keywords

  • 온라인에서의 약속
  • db : view
  • group by
  • 집계함수

약속

온/오프라인 상관 없이 약속은 잘 지켜야한다.
어떤 약속들은 누군가에게 큰 영향을 줄 수도 있다.

view

논리적인 가상 테이블 객체.
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 테이블에서 데이터를 수정하는 것은 권장할 일이 아니다.

view 제한사항 부여

  • read only
  • with check option

view는 데이터를 수정할 수 있기에, 제한사항을 부여할 일이 생긴다.
with read only 를 부여하면 view에 읽기만 가능한 권한이 부여된다.

집계함수,분석함수,group by , order by,의사컬럼(가짜 컬럼)을 사용하여,
서브쿼리로 작성된 뷰는 뷰를 통한 데이터 변경을 허용하지 않는다.

뷰에서의 데이터 무결성(뷰를 통해서 데이터 입력, 삭제, 수정을 일정부분 제한) 기능
-> with check option.

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
*/

inline-view

임시 테이블, 저장된 객체가 아니다.
쿼리가 실행되면 사라진다.

select * from (select * from employees);

sequence

numbering

예제

-- 테이블 생성
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;

Synonym (시노님)

동의어(별명).

사용하는 이유

데이터베이스 보안성(원래의 객체에 별명을 달아서 숨김(?)).
편의성 : 긴이름의 객체를 짧게 사용할 수 있다. 시노님 단위 권한 부여

종류

  • 공개 (public)
    • 타 사용자가 접근권한이 없다면 볼 수 없음.
  • 비공개 (private)

점심 : 야무지게 먹어야징

오후 :

keywords

  • 집합연산자
  • 계층형 쿼리

집한연산자

  • Union (합집합)
  • Intersect (교집합 연산자)
  • Minus (차집합)
-- Union 예제
select 1,2,3,4 from dual
union
select 3,4,5,6 from dual;
/*
1    2    3    4
3    4    5    6
*/

집계함수

  • sum
  • min
  • max
  • couont
  • avg
  • stddev
  • variance
-- 부서별로 집계 / 최대급여, 최소급여 ,평균 급여 집계
select department_id,max(salary) 최대, min(salary)최소, avg(salary)평균
from employees
group by department_id, job_id
order by department_id;

계층형 쿼리

오라클에서만 지원이 되었었다.
모든 DBMS에서 지원이 되고 있다.