상세 컨텐츠

본문 제목

오라클 추가 필기 JOIN , 제약조건 , 트랜잭션의 특징 2014년 12월29일

관리X 과거글

by 까먹기전에 2014. 12. 29. 10:43

본문

반응형

공통된 컬럼의 연관관계가 성립되는 데이터들을 SQL문장에서 연결하여 조회하는 것을 

★★JOIN★★ 이라고 한다


------------from에 써야함-----------------------------------------------------------


INNER JOIN 테이블명 on 조인조건 INNER JOIN 테이블명 on 조인조건


★★OUTER JOIN★★

A(+) = B

A테이블에 행이 부족해서 B의 데이터가 다 안나올때

NULL 값을 추가해서 B의 데이터가 다 나오게 해준다

(+) 붙는쪽에 NULL행을 추가해줌

그냥 행이 긴 테이블 위치에 맞춰서 left outer or rigth outer 선언하면 됨


ex)A가 15row , B가 14row 일때 A가 기준이 되어야하니깐

A a LEFT OUTER B b;

B b RIGHT OUTER A a;


집계함수 ---> max , min , sum , count , average ,표준편차 , 분산 

group by 컬럼명 --> 컬럼명값을 기준으로 집계함수를 적용해줌

having ---> (select절에 조건을 사용하여 결과를 제한할떄는 where절에 사용하지만) 

그룹의 결과를 제한 할때는 having 절을 사용해야한다.

order by 를 사용하려면 제일 뒤에 사용해야한다.

--------------------------------------------------------------------


subquery 과 subquery 사이의 집합연산

UINION 행들의 합집합

UNION ALL         ``

INTERSECT 중복을 제거해준다. 교집합

MINUS 행들의 차집합


Outer query의 테이블과 Inner Subquery의 테이블이 조인

된 형태를 Co-related Subquery 라고 하며 다음의 순서로 실행된다.

1) Outer query의 테이블에서 행(또는 다음 행)을 하나 읽는다. 더 이상 읽을

행이 없으면 끝난다.

2) 1)에서 읽은 행의 데이터를 이용하여 Subquery를 수행한다.

3) 2)의 결과값으로 Outer query의 WHERE 절이 만족되는 지 확인하여 만족

되면 선택하고 아니면 버린다.

4) 1)번으로 돌아간다.



create table s_ord09

AS

select * from s_ORD

where date_ordered LIKE '92/09%'


s_ord 에서 나온 결과값을 table s_ord09 라는 이름의 테이블로 만든다.


START WITH : 첫 번째로 조회할 행의 조건을 명시하며, 첫 번째로 조회된

행들의 레벨은 1 이된다. manager_id IS NULL 이라는 조건은 회사의 사

장을 조회하는 것이다.

-. CONNECT BY : 다음 번에 조회할 행의 조건을 명시한다. PRIOR id 란 직

전 레벨에 찾아진 행들의 id 값을 의미한다. 즉, PRIOR id = manager_id

란 전 레벨의 id 가 다음 찾을 행의 manager_id 와 같은 행들을 찾는 것이

다.

-. 이와 같은 계층 구조 질의는 더 이상 CONNECT BY 절을 만족하는 다음 레

벨의 행들이 존재하지 않을 때까지 진행된다.


----------------------------------제약조건----------------------------------------------

name varchar2(20) not null ->name컬럼에 데이터입력시 null 값 입력 금지

컬럼레벨 -> 컬럼명 CONSTRAINT 제약조건이름 제약조건

talbe레벨 -> 컬럼명 CONSTRAINT 제약조건이름 제약조건(컬럼명)

->not null은 안됨  table레벨 제약조건을 걸때는 프라이머리키 여러개 선언가능함

컬럼명 CONSTRAINT 제약조건이름 제약조건(id,name)

//not null 에는 제약조건이름 안함 , 테이블에는 x , 컬럼생성할때만 제약조건이름넣음

primary key -> not null 안되해줘도 됨 자동 not null되고, 테이블당 primary key 1번만 가능

->근데 table레벨 제약조건을 걸때는 프라이머리키 여러개 선언가능함

unique 고유값을 가져야함 null데이터는 넣어줘도 됨. 인덱스 안만듬, not null 해줘도됨

ssn char(13) not null constraint uk-member_ssn unique

deptno number(3) references dept(deptno) -> member.deptno는 포리너키이고 dept.deptno(프라이머리키)를 참조한다.


프라이머리키를 where절로 조건을 주고 검색을 하면 index값으로 검색해서 값을 보여줌

테이블을 뒤지지 않기때문에 속도가 빠름.



CONSTRAINT fk_s_delivery_ordid_item_id

   FOREIGN KEY(ord_id,item_id) REFERENCES 

   S_ITEM(ord_id, item_id)

복합키에 대한 foreign key 제약조건 생성


check( grade IN ('A' , 'B' , 'C' , 'D') --> In안에 값 외에는 전부 false


desc 테이블명 -> 테이블과 제약조건 확인


update emp

set deptno =70 , ename 'hong'

where empno=7369;

부모키를 참조하기때문에 deptno=70은 안된다.


-. 트랜잭션(Transaction)은 다음의 4가지 속성을 갖는다.

1) 원자성(Atomicity) : 트랜잭션은 연산들을 전부 실행하든지 전혀 실행하지

않아야지 일부만 실행해서는 안된다. All or Nothing

2) 일관성(Consistency) : 트랜잭션이 성공적으로 실행되면 데이터베이스 상

태는 모순되지 않고 일관된 상태가 된다.

3) 격리성(Isolation) : 트랜잭션 실행 도중의 연산 결과는 다른 트랙잭션에서

접근할 수 없다.

4) 영속성(Durability) : 트랜잭션이 성공적으로 완료되면 그 결과는 영속적이

다.



관련글 더보기