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"。