여러 컬럼이 하나의 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를 사용하면 부모테이블의 레코드가 삭제될 때 참조하는 모든 자식의 테이블의 레코드를 함께 삭제한다.
- 사용법 )
- 컬럼단위 )
컬럼명 데이터형(크기) constraint 제약사항명 references 참조할테이블명(참조컬럼)on delete cascade;
- 테이블단위 )
constraint 제약사항명 foreign key(적용컬럼) references 참조할테이블명(참조컬럼) on delete cascade;
unique
- null을 허용하면서 컬럼값이 유일해야 할 때.
- 컬럼단위 제약사항, 테이블 단위 제약사항 두 가지로 사용할 수 있다.
- 값이 없을 수도 있고, 있다면 유일해야할 때 사용(카드번호, 이메일,,)
- 문법 )
- 컬럼단위
create table 테이블명 (
컬럼명 데이터형(크기) constraint UK_테이블명_컬럼명 unique
- 컬럼단위
create table 테이블명 (
컬럼명 데이터형 (크기),
.
.
constraint UK_테이블명_컬럼명 unique(적용컬럼)
check조건
- 컬럼에 개발자가 원하는 값으로 추가해야할 때
- 컬럼단위 제약사항, 테이블 단위 제약사항 두 가지로 사용할 수 있다.
- 제약사항명을 생략하여 주로 컬럼단위 제약사항으로 사용할 수 있다.
- check조건에서 유효성 검증 할 때에는 check조건이 사용되는 컬럼에서만 사용할 수 있다.
- 문법 )
- 컬럼단위 )
- create table 테이블명(
컬럼명 데이터형(크기) constraint 제약사항명 check ( 조건 )
컬럼명 데이터형(크기) -- 조건에 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 user 계정명 account lock(unlock);
- 테이블의 변경
- 컬럼 추가
- 추가된 컬럼은 테이블의 가장 마지막 컬럼으로만 추가된다.
- 문법 )
- alter table 테이블명 add 컬럼명 데이터형(크기) 컬럼단위 제약사항
- 컬럼단위 제약사항 : 레코드의 존재유무에 따라 사용가능한 제약사항이 다르다.
- 컬럼 삭제
- 문법 )
- alter table 테이블명 drop 컬럼명;
- 데이터형 변경
- 레코드가 존재 : 동일 데이터형 에서 크기만 변경된다.
- 레코드가 존재하지 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 제약사항
- alter table 테이블명 disable constraint 제약사항
테이블 결합하기
- 여러 테이블의 레코드를 한번에 모아서 보는 것.
- 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 Query 문법 )
- select 컬럼명, 테이블명.컬럼명,
from 테이블명 alias
inner join 조인할테이블명 alias
on 조인조건
- 테이블명.컬럼명 : alias가 사용되지 않으면 테이블.컬럼명으로 사용
alias가 사용되면 alias명.컬럼명으로 사용
- inner join oracle 문법 )
- select 컬럼명
from 테이블명 alias, 조인할 테이블명 alias ,,,,
where (조인조건) and (검색조건)
Driving table
- 조인할 때 키가 되는 테이블



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