조건 분기는 if else처럼 SQL에서도 컬럼의 데이터 값을 비교하여 처리할 수 있습니다. 컬럼 필드 선택 부분에 CASE WHEN ~ 문장을 넣어주면 됩니다.
| 쿼리 문법 |
CASE WHEN 조건1 THEN 값1 WHEN 조건2 THEN 값2 WHEN 조건3 THEN 값3 ELSE 값4
END AS 별칭
12.6.1 쿼리 실습
다음은 Id 값에 따라서 서수 번호를 NO라는 이름으로 처리하는 예제 쿼리입니다.
| 예제 쿼리 |
select FirstNAme,LastName,
case
when Id>= 5 then '5th'
when Id>= 4 then '4th'
when Id>= 3 then '3th'
when Id>= 2 then '2th'
else '1th'
end as No
from members;
출력은 FirstNAme, LastName, No 형태로 3개의 컬럼이 출력이 됩니다.
| 콘솔 실습 화면 |
mysql> select FirstNAme,LastName,
-> case
-> when Id>= 5 then '5th'
-> when Id>= 4 then '4th'
-> when Id>= 3 then '3th'
-> when Id>= 2 then '2th'
-> else '1th'
-> end as No
-> from members;
+-----------+----------+-----+
| FirstNAme | LastName | No |
+-----------+----------+-----+
| lee | hojin | 1th |
| NULL | jiny | 2th |
| kim | james | 3th |
| jung | eric | 4th |
+-----------+----------+-----+
4 rows in set (0.00 sec)
No 컬럼은 별칭으로 선언되어 처리를 합니다. 별칭 기능은 나중에 다시 학습하겠습니다.
12.6.2 PHP 실습
PHP 코드를 통하여 조건 분기 쿼리를 실행해 봅니다.
예제 파일 | where-09.php
<?php
include "dbinfo.php";
include "mysql.class.php";
// ++ Mysqli DB 연결.
$db = new JinyMysql();
$queryString = "select FirstNAme,LastName,
case
when Id>= 5 then '5th'
when Id>= 4 then '4th'
when Id>= 3 then '3th'
when Id>= 2 then '2th'
else '1th'
end as No
from members;";
if($rowss = $db->selectRowss($queryString)){
echo "tables fields = ". count($rowss) . "<br>";
for($i=0;$i<count($rowss);$i++){
echo $i."=";
print_r($rowss[$i]);
echo "<br>";
}
}
?>
화면 출력
mysql connected!
쿼리성공] select FirstNAme,LastName, case when Id>= 5 then '5th' when Id>= 4 then '4th' when Id>= 3 then '3th' when Id>= 2 then '2th' else '1th' end as No from members;
tables fields = 6
0=stdClass Object ( [FirstNAme] => lee [LastName] => hojin [No] => 1th )
1=stdClass Object ( [FirstNAme] => hojin [LastName] => lee [No] => 2th )
2=stdClass Object ( [FirstNAme] => kim [LastName] => james [No] => 3th )
3=stdClass Object ( [FirstNAme] => jiny [LastName] => 1234 [No] => 5th )
4=stdClass Object ( [FirstNAme] => jiny [LastName] => 1234 [No] => 5th )
5=stdClass Object ( [FirstNAme] => jiny [LastName] => 123400 [No] => 5th )