Mysql教程

13.5条件判断函数

条件判断函数用来在SQL语句中进行条件判断。根据是否满足判断条件,SQL语句执行不同的分支。例如,从员工表中查询员工的业绩。如果业绩高于指定值n则输出good; 否则,输出bad。下面是各种条件判断函数的表达式、作用和使用方法。

13.5.1 IF(expr,v1,v2)函数

IF(expr,v1,v2)函数中,如果表达式expr成立,返回结果v1;否则,返回结果v2。

【示例13-51】下面从t6中查询学号(id),分数(grade)。并且,分数大于等于60,显示PASS;否则显示FAIL。SELECT语句如下

ELECT id,grade,IF(grade>=60;'PASS','FAIL') from t6;
|------+---------+-----------------------------+
|  id  |  grade  | IF(grade>=60;'PASS','FAIL') |
|------+---------+-----------------------------+
| 1001 |    90   |           PASS              |
| 1002 |    50   |           FAIL              |
| 1003 |    60   |           PASS              |
| 1004 |   NULL  |           FAIL              |
|------+---------+-----------------------------+
4 rows in set(0.00 sec)

结果显示,grade的值为90和60的记录后面显示PASS。其他后面显示为FAIL.

13.5.2 IFNULL(v1,v2)函数

IFNULL(vl,v2)函数中,如果vl的不为空,就显示vl的值;否则就显示v2的值。

【示例13-52】下面从t6中查询学号(id),分数(grade)。如果分数不为NULL,显示分数,否则,显示NO GRADE。SELECT语句如下:

SELECT id,IFNULL(grade, 'NO GRADE') FROM t6;

其中,IFNULL(grade, 'NO GRADE')表示如果grade值不为NULL,则显示grade值;否则显示“NOGRADE”。代码执行结果如下:

SELECT id,IFNULL(grade, 'NO GRADE') FROM t6;
|------+----------------------------+
|  id  |  IFNULL(grade, 'NO GRADE') |
|------+----------------------------+
| 1001 |          PASS              |
| 1002 |          FAIL              |
| 1003 |          PASS              |
| 1004 |         NO GRADE           |
|------+----------------------------+
4 rows in set(0.00 sec)

13.5.3 CASE 函数

1. CASE WHEN expr1 THEN v1 [WHEN expr2 THEN v2...] [ELSE vn] END

CASE WHEN exprl THEN vl [WHEN expr2 THEN v2...] [ELSE vn] END 函数中,CASE表示函数开始,END表示函数结束。如果表达式expr1成立时,返回vl的值。如果 表达式expr2成立时,返回v2的值。依次类推,最后遇到else时,返回vn的值。

【示例13-53】下面从t6中查询学号(id)分数(grade)。如果分数大于60,返回'GOOD'; 如果分数为60,返回‘PASS5’;其余分数返回'FAIL'。select语句如下:

SELECT id, grade,CASE WHEN grade>60 THEN 'GOOD' WHEN grade=60 THEN 'PASS1 ELSE 'FAIL' END level FROM t6;

其中,为函数部分取了个别名为level。代码执行结果如下:

mysql>SELECT id, grade,CASE WHEN grade>60 THEN 'GOOD' WHEN grade=60 THEN 'PASS1 ELSE 'FAIL' END level FROM t6;
+--------+-----------+-----------+
|   id   |   grage   |   level   |
+--------+-----------+-----------+
|  1001  |     90    |    GOOD   |
|  1002  |     50    |    FAIL   |
|  1003  |     60    |    PASS   |
|  1004  |    NULL   |    FAIL   |
+--------+-----------+-----------+
4 rows in set(0.00 sec)

结果显示,分数为90的记录返回了GOOD;分数为60的记录返回了PASS;分数为50和NULL的记录返回了FAIL。

2. CASE expr WHEN e1 THEN v1 [WHEN e2 THEN v2...] [ELSE vn] END

CASE expr WHEN el THEN vl [WHEN e2 THEN v2...] [ELSE vn] END 函数中,如果表达式expr取值等于el时,返回vl的值。如果表达式expr取值等于e2时,返回v2的值。 依次类推,最后遇到else时,返回vn的值。CASE表示函数开始,END表示函数结束。

【示例13-54】下面从t6中查询学号(id),分数(grade)。如果分数等于60,返回 GOOD;如果分数为60,返回PASS;如果分数为50,返回FAIL;其余分数返回NO GRADE。SELECT语句如下:

SELECT id, grade,CASE grade WHEN 90 THEN 'GOOD' WHEN 60 THEN 'PASS' WHEN 50 THEN 'FAIL' ELSE 'NO GRADE' END level FROM t6;

其中,为函数部分取了个别名为level。代码执行结果如下:

mysql> SELECT id, grade,CASE grade WHEN 90 THEN 'GOOD' WHEN 60 THEN 'PASS' WHEN 50 THEN 'FAIL' ELSE 'NO GRAD'END level FROM t6;
+--------+-----------+-----------+
|   id   |   grage   |   level   |
+--------+-----------+-----------+
|  1001  |     90    |    GOOD   |
|  1002  |     50    |    FAIL   |
|  1003  |     60    |    PASS   |
|  1004  |    NULL   |    FAIL   |
+--------+-----------+-----------+
4 rows in set(0.00 sec)

结果显示,分数为90的记录返回了 GOOD;分数为60的记录返回了 PASS;分数为 50的记录返回了FAIL;其他记录返回"NOGRADE"。


关注微信获取最新动态