CASE 문으로 데이터 변환하기

 

1. CASE문 (검색)

 

CASE문의 사용법)

CASE WHEN 조건식1 THEN 식1
[WHEN 조건식2 THEN 식2...]
[ELSE 식3]
END

예시)

SELECT a, CASE WHEN a IS NULL THEN 0 ELSE a END "a(null=0)" FROM sample37;

a열 값이 null이면 0을 반환하고 아니면 그냥 a를 그대로 반환한다.

 

 

- COALESCE

NULL 값을 처리하는 경우는 COALESCE 함수를 사용하는 편이 더 쉽다.

COALESCE 함수는 처음으로 NULL이 아닌 컬럼 값을 만나면 그 컬럼값을 리턴하는 함수이다.

모두 NULL이 되면 가장 마지막 인수의 값을 리턴한다.

SELECT a, COALESCE (a,0) FROM sample37;

 

2. 또 하나의 CASE문

CASE문은 '검색 CASE'와 '단순 CASE' 두 개 구문으로 나눌 수 있다.

 

단순 CASE SYNTAX)

CASE 식1
	WHEN 식2, THEN 식3
    [WHEN 식4 THEN 식5...]
    [ELSE 식6]
END

단순 CASE 예)

SELECT a AS "코드",
CASE a
	WHEN 1 THEN '남자'
    WHEN 2 THEN '여자'
    ELSE '미지정'
END AS "성별" FROM sample37;

CASE 문에서 비교할 항목인 a를 지정했으므로 WHEN에는 비교할 값만 기술하면 된다.

 

 

검색 CASE 예)

SELECT a AS "코드",
CASE
	WHEN a=1 THEN '남자'
    WHEN a=2 THEN '여자'
    ELSE '미지정'
END AS "성별" FROM sample37;

 

3. CASE를 사용할 경우 주의사항

CASE문은 SELECT구 뿐만 아니라 어디에서든 사용할 수 있다.

WHERE 구에서 조건식의 일부로 사용될 수도 있고 ORDER BY 구나 SELECT 구에서도 사용할 수 있습니다.

 

- ELSE 생략

ELSE를 생략하면 ELSE NULL이 되어 NULL 값이 반환될 수 있음.

따라서 ELSE는 생략하지 않고 지정하는 편이 낫다.

 

- WHEN에 NULL 지정하기

NULL을 지정하려면 WHEN 조건에 IS NULL을 사용해야 하는데,

이 때 단순 CASE문이 아닌 검색 CASE문을 사용해야 한다.

단순 CASE문은 특성상 = 연산자로 비교하게 되기 때문이다. ( a = IS NULL 이 되어 식이 이상해져서 그런 것 같다)

 

CASE
    WHEN a = 1 THEN '남자'
    WHEN a = 2 THEN '여자'
    WHEN a IS NULL THEN '데이터 없음'
    ELSE '미지정'
END

 => NULL 값을 비교할 때는 검색 CASE문을 사용해야 한다.

 

 

- DECODE NVL

Oracle에서는 이 같은 디코드(변환) 해주는 DECODE 함수가 있다. (Oracle 전용)

CASE문은 표준 SQL로 규정되어 있어 많은 데이터베이스 제품에서 사용 가능.

 

NULL 값을 변환하는 함수로 Oracle에는 NVL 함수, SQL Server에서는 ISNULL 함수가 이헤 해당한다.

표준 SQL에 규정되어 있는 함수는 COALESCE 함수이다.(권장!?)

 

 

행 추가하기 - INSERT

INSERT INTO 테이블명 (열1, 열2, ...) VALUES (값1, 값2, ...);

- NOT NULL 제약이 걸려있는 열은 NULL값을 허용하지 않는다.

- DEFAULT 값을 정할 수 있고, 열을 지정하지 않으면 디폴트 값으로 행이 추가된다.

+ Recent posts