DB/sql

14. Object

wooweee 2023. 4. 17. 00:26
728x90

object

  • 종류
    • table, sequence, index, view, synonym, progrem unit

    • sequence : nextval, currval
      • 생성
      • insert문에서 column명에 사용
      • 변경, 삭제 가능

    • index
      • column 생성시 자동으로 rowId로 생성

      • user가 index 생성시,
        • 논리적, 물리적 독립적 테이블
        • rowId, index column 값을 가진다.
        • 해당 조건을 검색시 b-tree를 통해서 빠르게 탐색

      • 사용 조건
        • where, join 많이 쓸 때
        • 기본 data 값이 많고 찾는 데이터가 10~15%
    • view
      • method()
      • orderby 사용 못함
      • dml 수행 못함
      • 객체, 실제 값 존재 안함
      • 자주 쓰이는 join table을 쉽게 사용할 때
      • 생성 방법
      • 사용 방법

    • syonym
      • table 명이 있지만 별명을 줘서 별명으로도 접근 가능하도록함

 

1. sequence

  • 생성, 수정, 삭제 가능
  • 수정시 주의 사항
    • maxvalue는 변경전보다 크거나 같아야한다.
    • start with 옵션은 변경 불가

 

 

  • 문법
    • increment by n -- n만큰 증가
    • start with n : 생성되는 첫번째 sequence 번호, default 1
    • maxvalue n : 생성가능한 최대값
    • nomaxvalue n : 기본 옵션 값 존재 10e27
    • minvalue n : 생성가능한 sequence의 최소값
    • nominvalue : 최소값을 1로 지정
    • cycle | nocycle : pk는 nocycle
    • cache | nocache


    • nextval : 사용 가능한 다음 sequence 값을 반환
    • currval: 현재 sequence 값을 포함
--sequence 생성
CREATE sequence seq
INCREMENT by 1
start with 1
MAXVALUE 9
nocache
CYCLE 
;

--sequence 제거
drop sequence seq;

--sequence 변경
ALTER sequence seq
increment by 3
-- start with은 이미 시작된 상태에선 변경 불가
MAXVALUE 999 -- 변경전 보다 작을 수 없다.
nocycle
nocache
;


--sequence 생성 확인
SELECT * FROM user_sequences; -- dictionary 접두사 기능

--내가 만든 table에서 연습
SELECT * from MYTABLE m ;

TRUNCATE table student.mytable;

INSERT into STUDENT.MYTABLE m 
(id, name)
values(seq.nextval, 'a'); --sequence 이용

-- nextval을 참조한다.
SELECT seq.currval from dual;

 

2. index

  • column 생성시 자동으로 rowId로 생성

  • user가 index 생성시,
    • 논리적, 물리적 독립적 테이블
    • rowId, index column 값을 가진다.
    • 해당 조건을 검색시 b-tree를 통해서 빠르게 탐색

  • 사용 조건
    • where, join 많이 쓸 때
    • 기본 data 값이 많고 찾는 데이터가 10~15%
    • 비용기준 최적화를 하기 때문에 index 규칙을 항상 따르지 않는다.

 

-- index 생성
create index myIndex
on myTable(id)
;

-- index 제거
drop index myIndex;

-- index 조회
SELECT * 
from ind
;

 

2.1. 인덱스 활용하기

 

  • index가 사용안되는 조건이 존재
    1. index column 비교전 변형 일어나는 경우
    2. 부정 조건 기술
    3. null로 비교할 경우 - index는 null을 저장하지 않음

 

-- 컬럼 변형
select id, name, TITLE from s_emp e
where SALARY*12 = 24000;
;
-- 컬럼 변형 안쓰는 방법 - index 사용
select id, name, TITLE from s_emp e
where SALARY = 24000/12;
;


-- 부정
select id, name, TITLE from s_emp e
where title <> '사원'
;

-- 부정 안쓰는 방법 - index 사용
select id, name, TITLE from s_emp e
where not exists (SELECT 'x' from S_EMP se WHERE e.title = '사원')
;

 

 

3. view

  • table이나 다른 view를 기초로 한 가상 table
  • view 자체 데이터는 없지만 table 데이터를 보거나 변경할 수 있는 창과 같다.
  • 실제적으로 sql문으로 저장
  • method()
  • 자주 쓰이는 join table을 쉽게 사용할 때 사용

 

  • 생성 문법
    • create [or replace] [force | noForce] view이름  -- force : 기본 table 유무 상관없이 일단 만듬
      as subquery  -- as : subquery로 선택된 값에 대한 컬럼명
      [with check option [constraint 제약조건]] -- view에 의해 접근된 행만 입력,수정 가능
      [with read only] -- dml 수행 막음
  • 생성 특징
    • view를 정의하는 sql문에는 order by 사용 불가
    • subquery 에 join 조건, group, distinct 존재시 dml 연산 불가
-- view 생성
create view myView as --table을 생성하는 거이여서 as 사용
select id, name
from S_EMP se ;

-- view 제거
drop view myView ;

-- view 조회
SELECT * from user_views;

-- view를 통한 조회
SELECT * from myView;

 

4.syonym

  • table 명이 있지만 별명을 줘서 별명으로도 접근 가능하도록함
reate synonym mt
for myTable;

SELECT * from mt;

SELECT * from user_synonyms;

drop synonym mt;