오라클에서는 NULL값을 체크하여 다른 값으로 치환하는 함수가 있다.

 

먼저, 테이블을 생성하고 샘플데이터를 넣어준다.

CREATE TABLE SAMPLE(
  name VARCHAR2(20),
  age INTEGER
);
INSERT INTO SAMPLE VALUES('홍길동',15);
INSERT INTO SAMPLE VALUES('강길동',NULL);
INSERT INTO SAMPLE VALUES('박길동','');
INSERT INTO SAMPLE VALUES('최길동',17);

 

NAME AGE
홍길동 15
강길동 (null)
박길동 (null)
최길동 17

※  오라클에서는 NULL과 빈문자열 ''이 모두 NULL로 처리가 된다.

 

1. NVL

사용방법 : NVL(표현식1,표현식2)

- 표현식1의 결과값이 NULL이면 표현식2의 값을 출력한다.

- 단, 표현식1과 표현식2의 결과 데이터 타입이 같아야한다.

 

ex01. AGE컬럼이 NULL값일 경우 0으로 치환한다.

-> SELECT NAME,NVL(AGE,0) AS AGE FROM SAMPLE;

 

NAME AGE
홍길동 15
강길동 0
박길동 0
최길동 17

 

2. NVL2

사용방법 : NVL2(표현식,표현식1,표현식2)

- 표현식의 값이 NULL이 아닐 경우에는 표현식1의 값을 반환하고, NULL일 경우에는 표현식2의 값을 반환한다.

 

ex01. AGE컬럼이 NULL값일 경우 'NULL'로 NULL값이 아니면 'NOT NULL'로 치환한다.

-> SELECT NAME,NVL2(AGE,'NOT NULL','NULL') AS AGE FROM SAMPLE;

 

NAME AGE
홍길동 NOT NULL
강길동 NULL
박길동 NULL
최길동 NOT NULL

 

3. NULLIF

사용방법 : NULLIF(표현식1,표현식2)

- 표현식1과 표현식2가 같으면 NULL값을 , 같지 않으면 표현식1을 리턴한다.

 

ex01. AGE컬럼 값이 15이면 NULL값을 출력

-> SELECT NAME,NULLIF(AGE,15) AS AGE FROM SAMPLE;

 

NAME AGE
홍길동 (null)
강길동 (null)
박길동 (null)
최길동 17

 

AGE컬럼값이 15인 홍길동에 AGE 컬럼값이 NULL로 치환된다.

 

 

3. COALESCE

사용방법 : COALESCE(표현식1,표현식2,표현식3...)

- 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타낸다.

- 표현식1이 NULL이 아니면 표현식1값을 그렇지 않으면 표현식2,표현식3...값을 반환한다.

- 단, COALESCE안에 사용되는 값들의  데이터 타입이 같아야한다.

 

ex01. AGE컬럼 값이 NULL이면 0을 출력

-> SELECT NAME,COALESCE(AGE,0) AS AGE FROM SAMPLE;

 

NAME AGE
홍길동 15
강길동 0
박길동 0
최길동 17

 

외래키란?

-외래키는 다른 릴레이션의 기본키를 참조하는 속성을 말한다.

외래키 특징

- NULL값과 중복값이 허용된다.

- 테이블 내 외래 키 여러개 허용된다.

- 참조되는 값이 변경되면 참조하는 값도 변경된다.

- 외래키는 기본키의 일부가 될 수 있다.

- 참조할수 있는 컬럼은 기본키(PK) 이거나 UNIQUE 만 가능하다.

- 외래키는 db에서 참조 무결성을 보장하기 위해 사용

※ 참조 무결성 

  기본키와 참조키간의 관계가 항상 유지됨을 보장

  참조되는 테이블의 행을 이를 참조하는 참조키가 존재하는 한 삭제될 수 없고, 기본키도 변경 불가능하다.

 

 

외래키 설정

- 테이블 생성 시 FK를 정의한다.

- FK가 정의된 테이블이 자식 테이블, 참조되는 테이블이 부모 테이블이다.

- 부모 테이블의 참조되는 컬럼에 존재하는 값만 입력 가능하다.

- 데이터 타입이 반드시 일치해야한다.

 

[방법1]

CREATE TABLE 테이블(
컬럼 데이터타입 CONSTRAINT 제약조건이름 FOREIGN KEY 
REFERENCES 참조할_테이블 (참조할_컬럼)
[ON DELETE CASCADE | ON DELETE SET NULL]
....

[방법2] 

CREATE TABLE 테이블(
…
CONSTRAINT 제약_조건_이름 FOREIGN KEY (컬럼)
REFERENCES 참조할_테이블 (참조할_컬럼)
[ON DELETE CASCADE | ON DELETE SET NULL]
);

 

- ON DELETE CASCADE : Master 삭제 시 Child도 같이 삭제한다.

ON DELETE SET NULL : Master 삭제 시 Child 해당 필드에 NULL값이 들어간다.

ON DELETE SET Default : Master 삭제 시 Child 해당 필드에 Default 값이 들어간다.

ON DELETE Restrict : Child 테이블에 PK값이 없는 경우에만 Master 삭제 허용

ON DELETE No Action : 참조무결성을 위반하는 삭제/수정 액션을 취하지 않음

+ Recent posts