제약의 종류 5가지
- primart key : 중복된 데이터와 null 값이 입력되지 못하게 하는 제약
- unique : 중복된데이터를 입력하지 못하게 하는 제약
- not null : null 값을 입력하지 못하게 하는 제약
- check : 정의한 데이터만 입력또한 수정 되게 하는 제약
- foreign key : 참조하는 컬럼에 거는 제약
데이터의 품질을 높이기 위해 중복된 데이터와 null 값을 입력할 수 없도록 컬럼에 제약을 걸어주는것
데이터 분석을 할때 정제 작업에 거의 80% 이상을 사용한다.
정제작업 코딩을 못하면 상당한 힘든일이라, 인내를 가지고 작업을 해야한다.
그러나 코딩을 잘하면 쉽고 재밌게 할 수 있다.
데이터를 처음부터 정제를 잘 하면 나중의 정제작업의 시간을 줄일 수 있다.
이러한 상황을 위해 고려해야 할 것은 RIMARY KEY 이다.
예시> 우리반 테이블 telecom 데이터를 입력할때 SKT, SK, sk,skt 이렇게 다양하게입력이 되었다.
이런경우sql 이 복잡해지고, 복잡한 sql 이라도 작성 할 줄 모르면 잘못된 데이터 분석을 하게 된다.그래서 처음부터 primary key 를 이용하여 sk 로만 입력 할 수 있게 한다.
제약을 거는 방법 2가지
- TABLE 을 생성할 때 제약을 거는것
- 만들어진 테이블에 제약을 거는 방법
1. TABLE 을 생성할때 제약 거는 것
예제 primary key 제약 생성 예제
create table emp20
(empno number(10) constraint emp20_empno_pk primary key,
ename varchar2(20));
→ 제약이름은 의미있게 적어주는것이 좋다. 테이블명_컬럼명_제약 , 제약의종류
방금만든 EMP20 에 데이터를 입력 해보면
insert into emp20 (EMPNO, ENAME)
values (1122, 'SCOTT');
→ insert 된다.
EMP20 테이블에 아래의 데이터를 입력해 보시오
insert into emp20 (empno, ename)
values (null, 'SMITH');
→ EMPNO 에 PK 제약이 걸려있어서 NULL 값을 입력 할 수 없다.
EMP20 테이블에 아래의 데이터를 입력 해 보시오
INSERT INTO EMP20 (EMPNO, ENAME)
VALUES(1122, 'ALLEN');
→ EMPNO 에 1122 데이터가 이미 존재하기 때문에 중복된데이터를 입력하지 못하는 조건에 위배 된다고 하며 입력이 되지 않는다.
요약하자면, EMP20 테이블의 EMPNO 의 데이터에 중복된 데이터와 NULL 값을 입력할 수 없다는게 확실하게 보장이 되었다는걸 확인 할 수 있다.
EMP20 테이블에 걸린 PRIMARY KEY 제약을 확인하는 방법
select T.table_name, T.constraint_name, C.column_name, T.constraint_type
from user_constraints t , user_cons_columns c
where t.constraint_name = c.constraint_name
and t.table_name = 'EMP20';
→ 확인 가능한 내용은
→ EMP20 테이블에 EMP20_EMPNO_PK 라는 이름으로 EMPNO 의 컬럼이 PRIMARY 제약이 걸려있다.
→ 그래서 where 절에 empno is not null 이라는 조건을 걸어 줄 필요가 없게 된다.
문제 561 dept900 테이블을 생성하는데 deptno 에 primary key 제약을 걸어 생성하고, loc, dnamd 컬럼도 생성하시오.
create table dept900
(deptno number(10) constraint dept900_deptno_pk primary key ,
loc varchar2(10),
dname varchar2(10));
문제 562 dept 데이터를 dept900에 갱신하시오
insert into dept900 (deptno, dname, loc)
select deptno, dname, loc
from dept ;
→ 주의사항, 서로 컬럼의 순서가 맞아야한다. !
문제 563 데이터 넣기~
insert into dept900 (deptno, dname, loc)
values (50, 'RESEARCH', 'SEOUL');
DEPT900 에 걸린 제약을 확인 하시오
select T.table_name, T.constraint_name, C.column_name, T.constraint_type
from user_constraints t , user_cons_columns c
where t.constraint_name = c.constraint_name
and t.table_name = 'DEPT900';
→ 현업에서 가장 중요한 SQL 이다. (데이터 분석가들이 많이 씀 )
→ 공공기관에서는 예전에 사용했던 구 SQL 때문에 현 SQL 에 제약을 걸지 않고 그대로 데이터를 이행해서 쓰는 경우가 많아서, 데이터 분석가들이 결측치 제거라던지,, 정제 작업을 아주 잘 해주어야한다.
2. 만들어진 테이블에 제약을 거는 것
alter table 테이블명
add constraint 제약컬럼이름, 제약 이름
DEPT 테이블 deptno 에 priamary key 제약을 걸기
alter table dept
add constraint dept_deptno_pk primary key(deptno);
→ deptno 컬럼에는 이제 중복된 데이터와 null 값이 입력 되지 않게 되었다.
→ 만약 기존에 제약이 위반된 데이터가 있다면 제약이 걸리지 않는다.
EMP 테이블 EMPNO 에 primary key 제약 걸기
alter table emp
add constraint emp_empno_pk primary key(empno);
이름이king 인 사원의 사원번호를 null(결측치) 로 변경 !
update emp
set empno = null
where ename = 'KING';
→ empno 에 pk 가 걸려있으므로 null (결측치) 데이터를 넣을 수 없다
'Oracle > SQL' 카테고리의 다른 글
SQL (3) 제약 NOT NULL 제약 (0) | 2021.12.05 |
---|---|
SQL (2) 제약 UNIQUE (0) | 2021.12.05 |
SQL - FLASHBACK Transaction Query (수행된 DML문의 거꾸로 돌리는 DML 문장 출력 쿼리) (0) | 2021.12.05 |
SQL - Flashback Version Query (데이터 변경내역 이력 확인) (0) | 2021.12.05 |
SQL - Flashback DROP 된 데이터 복구 (인덱스도 함께 복구) (0) | 2021.12.03 |