MSSQL CASE 조건문 사용 방법 및 예제 샘플

조건문이란 평소 사용하는 프로그램 언어로 말하면 if문이 대표적입니다.

SQL에서도 조건문을 사용할 수 있습니다.

 

CASE 문법

CASE 문법에는 단순 CASE 문과 검색 CASE 문이 있습니다.

단순 CASE문은 값이 참인가 거짓인가만을 구별합니다.

쿼리를 심플하게 작성할 수 있습니다.

검색 CASE문은 단순 CASE문보다 여러 가지 응용을 하기 편리합니다.

저 또한 여러 가지 복잡한 조건문을 작성할 때에는 검색 CASE문을 사용하지만 가능하면 가독성이 좋고 심플한 단순 CASE문을 사용하려고 합니다.

 

단순 CASE문과 검색 CASE문

--단순 CASE문
CASE gender
	WHEN '남' THEN 1
	WHEN '여' THEN 2
	ELSE 99
END

--검색 CASE문
CASE
	WHEN gender = '남' THEN 1
	WHEN gender = '여' THEN 2
	ELSE 99
END

 

CASE문을 사용할 때 주의점입니다.

・조건은 명확하게

・ELSE도 작성

 

잘못 작성된 예를 보도록 하겠습니다.

-- 반환값은 0밖에 반환되지 않음
CASE
	WHEN gender = '남' OR gender = '여' THEN 0
	WHEN gender = '남' THEN 1
	WHEN gender = '여' THEN 2
	ELSE 99
END

-- '남'또는'여' 이외의 값인 경우 NULL이 반환
-- NULL을 반환하는 경우라고 ELSE NULL을 작성하는 것이 좋음.
CASE
	WHEN gender = '남' THEN 1
	WHEN gender = '여' THEN 2
END

 

 

CASE문 실제 사용

SELECT
	id,
	title,
	publish_date,
	CASE 
		WHEN publish_date > CURRENT_TIMESTAMP() - INTERVAL 7 DAY THEN 1 
		ELSE 0 
	END AS is_new
FROM news
ORDER BY publish_date DESC
LIMIT 20

 

예를 들어 새로운 공지사항에 [NEW] 마크를 붙이고 싶은 경우입니다.

날짜가 오늘로부터 7일 이내일 경우 1, 그렇지 않을 경우는 0을 설정하고 있습니다.

CASE로 판정한 곳에 is_new라고 이름을 설정하여 두었습니다.

<!-- 위 SQL 실행 결과를 취득 후 변수 $news에 대입했다고 가정-->
<?php foreach ($news as $id => $data): ?>
	<li>
	<?php
		echo $data['publish_date'];
		echo $data['title']; 
		if ($data['is_new']): ?>
			<span class="icon">NEW</span>
		<?php endif; ?>
	</li>
<?php endforeach; ?>

 

화면에 출력해주는 부분에서 취득한 is_new을 if문을 사용하여 [NEW] 마크를 출력해주고 있습니다.

만약 SQL에서 CASE문을 사용하지 않았다면 아래와 같이 화면 출력 부분 내에서 판정을 해야 합니다.

<?php
	if ($data['publish_date'] 7일 이내인지 판정): 
?>

 

물론 SQL에서 CASE문으로 판정해서 플러그를 설정해서 가져오는 것이 무조건 효율이 좋다고는 말할 수 없습니다.

저도 출력 화면(PHP 등등) 내에서 조건문을 만들어 하는 경우도 많습니다.

어디까지나 SQL에서도 조건문인 CASE문을 사용하여 값을 취득할 수 있다는 것을 알기 위해서입니다.

댓글