MySQLプロセス関数

5266 ワード

プロセス関数はMySQLの比較的よく使われる関数で、ユーザーはこのような関数を使って1つのSQL文の中で条件の選択を実現することができて、このように効率を高めることができます.
以下にMySQLの条件に関するプロセス関数を示します.
関数#カンスウ#
機能
IF(expr1,expr2,expr3)
expr 1が真であればexpr 2を返し、そうでなければexpr 3を返す
IFNULL(expr1,expr2)
expr 1がNULLでない場合、expr 1を返します.そうでない場合、expr 2を返します.
CASE WHEN [value1] THEN[result1]… ELSE[default] END
valueが真の場合result 1を返します.そうでない場合defaultを返します.
CASE [expr] WHEN [value1] THEN[result1]… ELSE[default] END
exprがvalue 1に等しい場合はresult 1を返し、そうでない場合はdefaultを返します.
次の例では、従業員の分類をシミュレートし、まず従業員給与表を作成します.
create table salary(userid int, salary decimal(9,2));
insert into salary values (1,1000),(2,2000),(3,3000),(4,4000),(5,5000),(1,null);
mysql> select * from salary;
+--------+---------+
| userid | salary |
+--------+---------+
| 1 | 1000.00 |
| 2 | 2000.00 |
| 3 | 3000.00 |
| 4 | 4000.00 |
| 5 | 5000.00 |
| 1 | NULL |
+--------+---------+
6 rows in set (0.00 sec)
, .
IF(expr1,expr2,expr3) : 2000 , "high' ; 2000 , 'low' .
mysql> select if(salary>2000, 'high', 'low') from salary;        
+--------------------------------+
| if(salary>2000, 'high', 'low') |
+--------------------------------+
| low                            |
| low                            |
| high                           |
| high                           |
| high                           |
| low                            |
+--------------------------------+
6 rows in set (0.00 sec)
IFNULL(expr1,expr2) : NULL , NULL , NULL 0 .
mysql> select ifnull(salary,0) from salary;
+------------------+
| ifnull(salary,0) |
+------------------+
|          1000.00 |
|          2000.00 |
|          3000.00 |
|          4000.00 |
|          5000.00 |
|             0.00 |
+------------------+
6 rows in set (0.00 sec)
CASE WHEN [value1] THEN[result1]… ELSE[default] END : case when..then .
mysql> select CASE WHEN salary<=2000 THEN 'low' else 'high' END  from salary;
+---------------------------------------------------+
| CASE WHEN salary<=2000 THEN 'low' else 'high' END |
+---------------------------------------------------+
| low                                               |
| low                                               |
| high                                              |
| high                                              |
| high                                              |
| high                                              |
+---------------------------------------------------+
6 rows in set (0.00 sec)
CASE [expr] WHEN [value1] THEN[result1]… ELSE[default] END : , 、 、 3 。 , ,
mysql> select CASE salary WHEN 1000 THEN 'low' when 2000 THEN 'mid' ELSE 'high' END from salary;
+-----------------------------------------------------------------------+
| CASE salary WHEN 1000 THEN 'low' when 2000 THEN 'mid' ELSE 'high' END |
+-----------------------------------------------------------------------+
| low                                                                   |
| mid                                                                   |
| high                                                                  |
| high                                                                  |
| high                                                                  |
| high                                                                  |
+-----------------------------------------------------------------------+
6 rows in set (0.00 sec)