관리 메뉴

프로그래밍 삽질 중

SQL 제약 조건 설명 및 예제 본문

과거 프로그래밍 자료들/SQL(Oracle)

SQL 제약 조건 설명 및 예제

평부 2021. 3. 22. 18:09

<SQL 관련 용어>

※ 관계 
-릴레이션 내에 관계 = 데이터들의 관계
- 릴레이션 간의 관계

※ 릴레이션
- 단일값, 속성은 서로 다른 이름을 가짐
- 한 속성 값은 모두 같은 도메인 값 가짐
- 중복된 튜플 허용 불가(구분 불가)

※ 키
- 수 많은 데이터를 구별할 수 있는 유일한 값
- 유일성, 최소성

 

 


※ 제약 조건 특징 1
- 테이블의 특정 열에 지정하여 제약 조건에 부합하지 않는 데이터 저장할 수 없도록 함

1) NOT NULL : 지정한 열에 NULL 허용 X, NULL을 제외한 중복은 허용

2) UNIQUE : 지정한 열이 유일한 값을 가져와야 함(중복X, NULL제외)

3) PRIMARY KEY : 지정한 열이 유일한 값(NULL 허용X), 테이블 당 하나만 지정 가능

4) FOREIGN KEY : 다른 테이블 열을 참조하여 존재하는 값만 입력 가능

5) CHECK : 설정한 조건식을 만족하는 데이터만 입력 가능


[예시 1]

CAFENAME은 NULL값을 가질 수 없다

EMPLOYEENUM은 같은 값이 있을 수 없다

PRICE의 값이 입력되지 않을 경우 기본값 10000원, 최소 값 3000원 지정함
 

 

[예시 1 답]

1
2
3
4
5
6
CREATE TABLE NEWCAFE (
CAFENAME VARCHAR(20NOT NULL,
EMPLOYEENUM NUMBER UNIQUE,
PRICE NUMBER DEFAULT 10000 CHECK(PRICE > 3000),
PRIMARY KEY(CAFENAME, EMPLOYEENUM)
);
cs

 

※ 제약 조건 특징 2

- 외래키 제약 조건은 명시해야 함(참조되는 테이블의 기본키나 UNIQUE한 경우)

- 외래 키 지정 시 ON DELETE 나 ON UPDATE 가능

<명령어>

1) RESTRICTED : 자식 릴레이션에서 참조하는 경우 부모 릴레이션(참조되는 테이블)에서 삭제 X

2) CASCADE : 자식 릴레이션의 관련 튜플을 같이 처리

3) DEFAULT : 자식 릴레이션의 관련 튜플을 미리 설정한 값으로 변경

4) NULL : 자식 릴레이션의 관련 튜플을 NULL로 설정(미리 NULL로 허가)

 

[예시 2]

부모테이블의 데이터가 삭제되는 경우 자식테이블의 데이터 연쇄 삭제

 

 

[예시 2 답]

1
2
3
4
5
6
7
8
9
CREATE TABLE NEWDRMA(
DRAMAID NUMBER NOT NULL,
DRAMANAME VARCHAR2(40),
HOURPRICE NUMBER,
ACTORS VARCHAR2(40),
BROADNUM NUMBER
PRIMARY KEY (DRAMAID),
FOREIGN KEY (BROADNUM) REFERENCES NEWDRAMA(DRAMAID) ON DELETE CASCADE
);
cs

 

 

※ ROWNUM
- 내장함수는 아니나 자주 사용됨
- 오라클에서 내부적으로(동적으로 생성되는 가상컬럼)
SQL 조회 결과의 순번을 타나냄
- 자료의 일부분만 확인, 처리하기 유용

 

[예시 3]

번호(DRAMAID)가 100이하만 출력

 

 

[예시 3 답]

1
2
3
SELECT DRAMAID "번호", DRAMANAME, HOURPRICE, BROADNUM
FROM NEWDRMA
WHERE DRAMAID <= 100;
cs

 

 

[예시 4]

방송국번호(BROADNUM)가 20~30만 출력

 

 

[예시 4 답]

1
2
3
SELECT BROADNUM "방송국 번호", DRAMANAME, HOURPRICE, BROADNUM
FROM NEWDRMA
WHERE BROADNUM BETWEEN 20 AND 30;
cs