IF(expr1,expr2,expr3)
expr1 が TRUE(expr1 <> 0 および expr1 <> NULL)の場合 IF() は expr2 を返し、
それ以外の場合は expr3 を返す。 IF() は、使用されているコンテキストに応じて、数値または文字列を返す。
IFNULL(expr1,expr2)
expr1 が NULL でない場合は expr1 を返し、それ以外の場合は expr2 を返す。IFNULL() は、
使用されているコンテキストに応じて、数値または文字列を返す。
※これは、MS SQLでいうISNULLにあたる。
mysql> SELECT IFNULL(@a, '@a is NULL');
+--------------------------+
| IFNULL(@a, '@a is NULL') |
+--------------------------+
| @a is NULL |
+--------------------------+
1 row in set (0.00 sec)
mysql> SELECT IF(@a,@a,'@a is null');
+------------------------+
| IF(@a,@a,'@a is null') |
+------------------------+
| @a is null |
+------------------------+
1 row in set (0.00 sec)
mysql> SET @a = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT IF(@a,@a,'@a is null');
+------------------------+
| IF(@a,@a,'@a is null') |
+------------------------+
| 1 |
+------------------------+
1 row in set (0.00 sec)
mysql> SELECT IF(@a,@a,'@a is null');
+------------------------+
| IF(@a,@a,'@a is null') |
+------------------------+
| 1 |
+------------------------+
1 row in set (0.00 sec)
mysql>
mysql> SELECT IF(STRCMP('test','test1'),'no','yes');
+---------------------------------------+
| IF(STRCMP('test','test1'),'no','yes') |
+---------------------------------------+
| no |
+---------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT IF(STRCMP('test','test'),'no','yes');
+--------------------------------------+
| IF(STRCMP('test','test'),'no','yes') |
+--------------------------------------+
| yes |
+--------------------------------------+
1 row in set (0.00 sec)
mysql>
参考サイト
6.3.1.4. フロー制御関数