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>

variable_ifnull1

参考サイト
6.3.1.4. フロー制御関数