조건 분기는 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 )