[SQL] 데이터 품질 높이기 - CHECK

·2025년 7월 16일

SQL

목록 보기
122/126

💡 체크(check) 제약이란?

사용자가 허락한 데이터만 입력 또는 수정할 수 있게 하는 제약


📌 check 제약조건 거는 방법

alter table 테이블명
add constraint 제약조건명 check(컬럼명 조건);


실습1. emp 테이블에 월급에 9000 이상의 데이터는 입력 또는 수정되지 못하도록 체크 제약을 거시오

alter table emp
 add constraint emp_sal_ck check(sal between 0 and 9000);


-- 에러발생
-- ORA-02290: 체크 제약조건(C##SCOTT.EMP_SAL_CK)이 위배되었습니다
update emp
 set sal = 9500
 where ename='KING';

문제1. emp 테이블에 부서번호가 10번,20번,30번 외에 다른 부서번호는 입력 또는 수정할 수 없도록 제약을 거시오

alter table emp
 add constraint emp_deptno_ck check(deptno in (10,20,30));
 
 
-- 에러발생
-- ORA-02290: 체크 제약조건(C##SCOTT.EMP_DEPTNO_CK)이 위배되었습니다
update emp
 set deptno = 50
 where ename='KING';

문제2. (현업사례) emp21 테이블에 email 에 check 제약을 거는데 이메일에 @와 . 을 포함하지 않는 이메일은 입력 또는 수정되지 않도록 체크제약을 거시오

alter table emp21
add constraint emp21_email_ck check( email like '%@%.%' );

문제3. (현업사례) emp21 테이블에 통신사 컬럼에 check 제약을 거는데 통신사가 SKT, KT, LG, SKT알뜰,KT알뜰,LG알뜰 외에는 입력 또는 수정되지 못하도록 체크제약을 거시오

alter table emp21
 add constraint emp21_telecom_ck check(telecom in 
  										 ('SKT', 'KT', 'LG', 'SKT알뜰', 'KT알뜰', 'LG알뜰') );

실습2. 다음의 DEPT901 테이블을 생성하는데 부서위치에 DALLAS,CHICAGO,BOSTON만 입력 또는 수정되게끔 체크 제약을 걸어서 생성하시오

create table dept901
( deptno number(10),
  dname varchar2(20),
  loc varchar2(20),
  constraint dept901_loc_ck check(loc in ('DALLAS', 'CHICAGO', 'BOSTON')));

문제1. emp21 테이블에 걸려있는 체크제약들을 모두 삭제하시오

alter table emp21
 drop constraint emp21_email_ck;
 
alter table emp21
 drop constraint emp21_telecom_ck;

0개의 댓글