여러 컬럼이 하나의 Primary key로 구성

테이블 단위 제약사항만 가능.

create table 테이블명(
 컬럼명 테이터형(크기),
 constraint 제약사항명 primary key(적용컬럼,,,,)
);

foreign key(외래키, 참조키)

다른 테이블의 Pk, unique컬럼 값으로만 컬럼 값이 구성됭어야 할 때.
null을 허용. 값이 있을 때에는 부모테이블에 존재하는 값으로만 저장 가능.
테이블간의 관계가 생성.(PK-부모테이블, FK-자식테이블)
컬럼단위 제약사항, 테이블단위 제약사항 두 가지로 사용가능.
하나의 테이블에 FK는 여러 개를 가질 수 있다.
자식테이블은 컬럼명은 달라도 되나, 부모테이블의 데이터 형과 크기는 동일하게 설정.

create table 테이블명(
 컬럼명 데이터형(크기) 
 constraint FK_테이블명_컬럼명
 references 참조할 테이블명(참조컬럼)
);

-테이블단위 제약사항

create table 테이블명(
 컬럼명 데이터형(크기) 
 constraint FK_테이블명_컬럼명 foregin key(적용컬럼명)
 references 참조할 테이블명(참조컬럼)
);

on delete cascade

on delete cascade 를 사용하면 부모테이블의 레코드가 삭제될 때 참조하는 모든 자식의 테이블의 레코드를 함께 삭제.

* 컬럼단위
컬럼명 데이터형(크기)
constraint 제약사항명
references 참조할 테이블명(참조컬럼) on delete cascade;

* 테이블단위
constraint 제약사항명
foregin key(적용컬럼)
references 참조할 테이블명(참조컬럼)
on delete cascade;

unique

null을 허용하면서 컬럼값이 유일해야 할 때.
컬럼단위 제약사항, 테이블 단위 제약사항 두 가지로 사용할 수 있다.
값이 없을 수도 있고, 있다면 유일해야할 때 사용(카드번호, 이메일,,,,)
하나의 테이블에 unique는 여러 개를 설정할 수 있다.
FK로 참조할 수 있다.

* 컬럼단위
create table 테이블명(
 컬럼명 테이터형(크기),
 constraint UK_테이블명_컬럼명 unique(적용컬럼)
);

check 조건

컬럼에 개발자가 원하는 값으로 추가해야 할 때.
컬럼단위 제약사항, 테이블 단위 제약사항 두 가지로 사용 가능.
제약사항명을 생략하여 주로 컬럼단위 제약사항으로 사용 가능.

* 컬럼단위
create table 테이블명(
 컬럼명 데이터형(크기) constraint 제약사항명 check(조건)
 //조건에 사용되는 컬럼은 check가 붙어있는 컬럼만 사용할 수 있고, 다른 컬럼은 사용 불가능.
 컬럼명 데이터형(크기)
);

* 테이블 단위
create table 테이블명(
 컬럼명 데이터형(크기),
 constraint 제약사항명 check(조건)
);

not null 조건

컬럼에 값을 반드시 입력해야 하는 경우
컬럼단위 제약사항으로만 사용가능.

create table 테이블명(
 컬럼명 데이터형(크기) not null
);

default

insert시 컬럼이 생략되면 설정한 값으로 레코드를 추가할 때
제약사항이 아님 => user_tab_cols DD에서 확인가능.(data_default column)
컬럼단위 설정 가능.

create table 테이블명(
 컬럼명 데이터형(크기) default 기본값
);

alter

DDL
테이블 변경, 제약사항 변경, 계정 비번 변경 등 다양한 일 가능.

계정의 비번을 변경

모든 계정은 자신의 비번을 변경할 수 있다.
관리자는 모든 계정의 비번을 변경할 수 있다.

alter user 계정명 indentified by 비번;

테이블의 변경

-컬럼 추가
추가된 컬럼은 테이블의 가장 마지막 컬럼으로만 추가

alter table 테이블명 add 컬럼명 데이터형(크기) 컬럼단위제약사항
//레코드의 존재유무에 따라 사용가능한 제약사항이 다르다.

-컬럼삭제

alter table 테이블명 drop column 컬럼명;

-데이터형 변경
레코드가 존재 : 동일 데이터형에서 크기만 변경.
레코드가 존재 X : 데이터형 자체를 변경

alter table 테이블명 modify 컬럼명 데이터형(크기) 컬럼단위제약사항

-컬럼명 변경

alter table 테이블명 rename column 이전컬럼명 to 변경할 컬럼명

-테이블명 변경

alter table 테이블명 rename to 변경할 테이블명

제약사항 변경

-제약사항 추가 : 테이블단위 제약사항의 문법가능

alter table 테이블명 add constraint 제약사항명 제약사항종류(적용컬럼)

-제약사항 삭제 :

alter table 테이블명 drop constraint 제약사항명

-제약사항 활성화, 비활성화

alter table 테이블명 enable constraint 제약사항
                    disable

테이블 결합하기

여러 테이블의 레코드를 한번에 모아서 보기
union, join

union

테이블을 수직으로 결합하여 검색할 때 사용.
컬럼의 수, 데이터 형이 일치해야 한다.

union : 중복된 데이터를 보여주지 않는다.
union all : 중복된 데이터를 보여준다.

select 컬럼명,,,
from 테이블명
union [all]   //컬럼의 수와 데이터 형이 일치하면 에러가 발생하지 않는다.
select 컬럼명,,,
from 테이블명

join

서로 다른 테이블의 컬럼을 옆으로 붙여서 조회하는 것.
inner join, outer join, cross join, self join이 존재
조인 조건을 잘 못 설정하면 모든 레코드들이 곱해져서 조회되는 cartesian product이 발생.
ANSI문법과 Oracle join 문법 두가지를 제공.
Driving 테이블을 잘못 선정하면 조인 시간이 증가할 수 있다.

inner join

서로 다른 테이블에서 동일한 데이터만 가져오는 조인.
한쪽 테이블에만 데이터가 존재하면 조회되지 않는다.(모든 데이터를 볼 수 없다.)

select 컬럼명,,,
from 테이블명
inner join 조인할 테이블명
on 조인조건
inner join 조인할 테이블명
on 조인할 테이블명
...
where 검색조건

ANSI

select empno, ename, deptno, dname, loc
from emp
inner join dept
on deptno=deptno; //어떤 테이블에 존재하는 컬럼인지 알 수 없다. => 테이블명.컬럼명



inner join

서로 다른 테이블에 동일한 값이 있을 때만 검색결과를 만드는 조인

ANSI Query

사원이 존재하는 부서만 사원번호, 사원명, 부서번호, 부서명 위치 검색.

select 컬럼명, 테이블명.컬럼명, alias.컬럼명// alias가 사용되면 alias.컬럼명으로만 사용.
              //alias가 사용되지 않으면 테이블명.컬럼명으로 사용. alias가 부여되면 테이블명은 사용할 수 없다. 
from 테이블명 alias
inner join 조인할테이블명 alias
on 조인조건
...

Oracle 문법

select 컬럼명, 테이블명.컬럼명, alias.컬럼명
from 테이블명 alias, 조인할 테이블명 alias,,,
where (조인조건) and (검색조건)

Driving

select e.empno, e.ename, e.hiredate, e.deptno, d.deptno, d.dname, d.loc
from emp e
inner join dept d
on e.deptno = d.deptno;//Driving 테이블이 되면 FK레코드 수 만큼 full scan 수행

Driving 선정기준

관계가 있는 테이블에서는 PK컬럼이 driving 테이블이 되는 것이 좋다.
관계가 없는 테이블에서는 레코드의 수가 적거나, 다양성이 적은 컬럼이 되는 것이 좋다.

outer join

한쪽 테이블에만 레코드가 존재하더라도 조회가능.

* ANSI

select 컬럼명, 테이블명.컬럼명, alias.컬럼명
from  테이블명 alias
종류 outer join 조인할 테이블명 alias
//left, right, full <= 레코드가 존재하는 테이블 선택

***

* Oracle 문법
조인 조건에 (+)를 사용
레코드가 존재하지 않는 칼럼에 (+) 사용

select
from
where 조인 조건//alias.컬럼명(+) = alias.컬럼명

self join

테이블 하나를 조인하는 것.
Non-EQUI join유형으로 사용.
조회용도의 목적과 조건 용도의 목적으로 테이블을 구분하여 사용

select
from 테이블명(조회용도), 조인할 테이블명(조건용도)
where

sequence

순차적으로 증가하는 번호를 저장하고 있는 객체
user_sequences DD에서 생성된 시퀀스의 정보를 확인할 수 있다.
currval(현재번호), nextval(다음번호) pseudo column으로 현재 번호 또는 다음 번호를 얻을 수 있다.

문법

* 시퀀스 생성
create sequence 시퀀스명
increment by 증가값
start with 시작값
maxvalue 끝값
cache 메모리에 올려놓을 번호 수(기본 20)
반복여부( 반복 : cycle, 반복X : nocycle )

* 시퀀스 검색
select * from user_sequences;

* 시퀀스 삭제
drop sequence 시퀀스;
  • 시퀀스 번호 얻기
* 현재 번호 얻기
메모리에 시퀀스가 올라있지 않으면 error 발생
시퀀스명.currval(시퀀스를 접속자 세션에 올리는 일은 할 수 없고, 올라와있는 시퀀스의 현재값만 사용가능.)

* 다음 번호 얻기
시퀀스명.nextval
시퀀스가 메모리에 올라있음?
Y : 시퀀스의 cache가 모두 소진되었나?
	Y: File영역의 last_number를 변경한 후 접속자 세션으로 시퀀스 객체를 			올리고 다음 번호 얻는다.
    N: 접속자 세션의 시퀀스 번호를 다음 번호로 변경한 후 번호를 얻는다.
    
N : File영역의 시퀀스 객체를 접속자 세션에 올린 후 다음 번호를 얻는다.

0개의 댓글