조건문이란 평소 사용하는 프로그램 언어로 말하면 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문을 사용하여 값을 취득할 수 있다는 것을 알기 위해서입니다.
댓글