백엔드/Database

TIL 정리_117(Oracle 문법2)

ran4 2022. 7. 7. 14:41

https://ranprog.tistory.com/138

Oracle 문법의 내용을 보충 및 추가 

 


Global Temporary Table(임시테이블 생성)

실제 데이터는 저장하지 않는다 작업을 마치면 자동으로 지운다

 

ON COMMIT delete ROWS;

커밋을 하면 데이터가 삭제된다

 

-> 같은 계정이어도 다른 창으로(세션) 검색하면 내용이 보이지 않는다

 

 

읽기 전용 테이블로 변경하기

alter table 테이블명 read only;

 

Join 두 개의 테이블을 엮는다

Oracle join 문법

select a col1, b col1 from table1 a, table2 b where a.col2 = b.col2;

 

ANSI join (범용 문법)

select a.col1, b.col2 from table1 a INNER JOIN table2 b ON a.col2 = b.col2;

 

Cartesian Produce(카티션 곱)

조인 대상 테이블들의 조건이 누락되었을 경우 발생. 해당 조인에 참여하는 모든 대상 행을 다 출력한다

데이터를 복제하고자 하는 경우 일부러 사용하기도 한다

 

 

EQUL join(등가 join)

emp 테이블과 dept 테이블을 조회하여 출력

 

Oracle

select e.empno, e.ename, d.dname from emp e, dept d where e.deptno = d.deptno;

 

ANSI

select e.empno, e.ename, d.dname from emp e join dept d ON e.deptno = d.deptno;

 

**잘못 입력한 경우 r 혹은 /을 치면 수정한 내용이 반영되고 다시 실행된다

7번라인 오류라고 나오는 경우 7 (한칸 띄운 후 수정한 내용을 입력)

r 또는 >/을 입력 후 enter를 치면 수정한 내용이 반영되어 다시 실행된다

 

 

NON-Equi Join(비등가 join)

=를 사용하지 않고 사이에 있거나 크거나 작은것을 조회한다

 

Oracle

select s.name "STU_NAME", o.total "SCORE", h.grade "CREDIT" from student s, score o, hakjum h where s.studno = o.studno and o.total >= h.min_point and o.total <= h.max_point;

 

Ansi

select s.name "STU_NAME", o.total "SCORE", h.grade "CREDIT" from student s JOIN score o ON s.studno = o.studno and score o JOIN hakjum h ON o.total >= h.min_point and o.total <= h.max_point;

 

 

OUTTER Join

 

Oracle outer join

select s.name "STU_NAME", p.name "PROF_NAME" from student s, professor p where s.profno = p.profno(+);

 

Ansi

select s.name "STU_NAME", p.name "PROF_NAME" from student s LEFT OUTER JOIN professor p ON s.profno = p.profno;

>>oracle은 where에서 + 부호를 붙이고 ANSI는 from 절에서 JOIN으로 결정한다

기준이되는 컬럼에 따라 LEFT OUTER JOIN / RIGHT OUTER JOIN으로 나눠진다 

 

 

SELF Join

하나의 테이블에서 컬럼을 불러온다 -> 자기 자신과 Join

 

Oracle 

select e1.ename "ENAME", e2.ename "MGR_ENAME" from emp e1 , emp e2 where e1.mgr = e2.empno;

 

ANSI

select e1.ename "ENAME", e2.ename "MGR_ENAME" from emp e1 JOIN emp e2 ON e1.mgr = e2.empno;

 


제약조건 관리하기

제약조건 DISABLE(해제) 하기 -> DISABLE NOVALIDATE 사용

alter table 테이블명 DISABLE NOVALIDATE CONSTRAINT SYS_코드; 

-> NOVALIDATE의 경우 이미 들어간 데이터는 변경이 되지 않는다(관여x) 이후부터 제약이 적용된다

 

ENABLE VALIDATE는 이미 할당된 데이터에도 제약이 적용된다

-> 이미 잘못된 데이터가 존재할때 enable validate를 하는 경우 오류가 난다

 

 

INDEX 인덱스

order by는 정렬은 되지만 부하가 많다 -> 실행을 하고나서 정렬이 된다 (후 정렬) 

index를 사용한다 -> 데이터를 집어 넣을 때 미리 정렬을 해서 집어넣는다 (선 정렬)

 

인덱스 구조와 작동 원리(B-TREE 인덱스 기준) : 주소를 미리 만들어 놓는다

 

1 UNIQUE INDEX 문법 

CREATE UNIQUE INDEX 인덱스명 ON 테이블 이름(컬럼명 1 ASC|DESC, 컬럼명, ....);

 

2. NON UNIQUE INDEX : 중복이 허용된다 1의 문법에서 unique를 제외

CREATE index idx_dept2_area on dept2(area);

 

3. DESCENDING INDEX(내림차순)

CREATE INDEX idx_prof_pay ON professor(pay DESC); 

 

인덱스 생성

CREATE 인덱스 인덱스_테이블명_컬럼 on 테이블(컬럼);

 

 

View

뷰는 하나 이상의 테이블로부터 유도되어 만들어진 가상 테이블로 처리 과정중의 중간 내용이나 기본 테이블 중 일부 내용을 검색해 보여주거나 별도로 관리하고자 하는 임시 테이블이다

 

복합 뷰 (Complex View)

뷰를 만들 때 join을 이용하여 여러 개의 테이블을 조회한다

create or replace view v_emp as select e.ename, d.dname from emp e, dept d where e.deptno = d.deptno;

 

Inline View(인라인 뷰)

뷰를 만들지 않고 sql 문장의 from절에 view의 서브쿼리를 넣는다

select e.deptno, d.dname, e.sal from (select deptno, MAX(sal) sal from emp group by deptno) e, dept d where e.deptno = d.deptno;

 

Materialized View(MVIEW) 구체화 된 뷰 //Express 버전에서는 사용할 수 없는 기능이다

일반 뷰는 유저가 불러올 때마다 일일이 새로 불러왔지만 M뷰는 한 번 불러오면 계속 데이터를 읽을 수 있다

 

일반 view는 인덱스를 만들 수 없지만 MView는 데이터가 실제로 존재하기 때문에 만들 수 있다

create index idx_m_prof_pay on m_prof(pay);

 

 

Sequence

지정한 옵션에 따라 순서대로 번호를 만들어주는 객체이다

-> 시리얼 번호를 자동으로 만드는 기능이다

CREATE sequence sequence_name

 

 

Synonym 동의어

여러 사람이 데이터베이스를 공유 할 때 동의어를 만들어서 사용한다 시스템 계정에서 권한을 부여해야 사용 가능하다

create public synonym d2 for dept; //다른 사람들도 접근 가능

 

 

PL/SQL (오라클)

  • Procedural language/sql이라는 의미이다 
  • 문법은 begin으로 시작한다
  • 오라클에서 제공하는 프로그래밍 언어로 데이터 베이스 업무를 처리하기에 최적화된 언어이다
  • pl/sql안에 sql 문장이 존재한다
  • 선언부, 실행부, 예외처리부로 구성된다
  • declare(선언부) 모든 변수, 상수 선언
  • Executable 실행부 제어문, 반복문, 함수정의 등의 로직을 기술한다
  • Exception 예외처리 실행도중 에러 발생시 해결하는 문장들을 기술한다
  • Anonymous PL/SQL Block과 Stored PL/SQL Block이 있다 (익명 블럭과 저장된 블럭)

 

**PL/SQL은 기본적으로 처리된 결과를 출력하지 않기 때문에 set serveroutput on; 을 활성화 해야한다

 

 

PL/SQL 커서

  • 오라클 서버에서 sQL문을 실행할때마다 처리를 위한 메모리 공간을 사용한다
  • -> 커서를 사용한다 
  • 묵시적 커서 : 자동생성, 1행만 저장가능 사용자는 생성 유무를 알 수 없다
  • 명시적 커서 : 직접 생성, 여러 개의 행을 처리하고자 할 떄 사용한다
  • 커서이름%rowcount 
  • 선언(CURSOR) - 오픈(OPEN) - 데이터추출(fetch) - 사용종료(close)를 해야한다

 

 

Trigger (PL/SQL)

참조 관계에 있는 두 테이블에서 하나의 테이블에 삽입, 삭제, 갱신 등의 연산으로 테이블의 내용이 바뀌었을 때
데이터의 일관성과 무결성 유지를 위해서 이와 관련된 테이블도 연쇄적으로 변경이 이루어질 수 있도록 한다

-> 특정 사건이 발생될때마다 묵시적으로 해당 PL/SQL 블럭이 실행된다

 

 

'백엔드 > Database' 카테고리의 다른 글

Jdbc(ojdbc) 초기 세팅 | TIL_132  (0) 2022.08.10
TIL 정리_131(Jdbc - ojdbc)  (0) 2022.08.08
TIL 정리_116(Oracle 문법)  (0) 2022.07.05
TIL 정리_114(SQL 문법/ORACLE)  (0) 2022.07.01
TIL 정리_113(데이터베이스&SQL 문법)  (0) 2022.06.29