赞
踩
IF表达式:IF(expr1,expr2,expr3),如果expr1为TRUE(expr1 <> 0 and expr1 <> NULL),则IF()返回值为expr2,否则返回值为expr3;IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定;
IFNULL语句:IFNULL(expr1,expr2),假如expr1不为null,则返回expr1,否则返回expr2;
IF…ELSE…语句:
- IF search_condition THEN
- statement_list
- [ELSEIF search_condition THEN]
- statement_list ...
- [ELSE statement_list]
- END IF
search_condition表示条件,如果成立时执行THEN后面的statement_list语句,否则执行ELSE后面的statement_list语句。
search_condition是一个条件表达式,可以由条件运算符组成(" = 、 < 、<= 、 > 、 >= 、!= "),也可以使用AND、OR、NOT对多个表达式进行组合。
ELSEIF 分支块可以在IF与[END IF]之间根据条件的数目追加多个。对于多重条件分支结构来说,只有第一个为了 TRUE 的条件才会得到执行。
- SELECT name,IF(sex=1,'男','女')sex FROM students;
-
- SELECT COUNT(IF(sex=1,1,NULL)) 男生人数,COUNT(IF(sex=0,1,NULL))女生人数 FROM students;
-
- SELECT IFNULL(price,0) price FROM goods WHERE goodsId='3';
-
- -- 返回结果:0
- SELECT IFNULL(SUM(price),0) FROM goods WHERE goodsId=3;
-
- ##
- CREATE PROCEDURE sp_search_employee(IN p_depart INT)
- BEGIN
- IF p_depart = 1 THEN
- SELECT fname,lname,depart from employee where depart = '研究部';
- ELSEIF p_depart = 2 THEN
- SELECT fname,lname,depart from employee where depart = 'AC部';
- ELSEIF p_depart = 3 THEN
- SELECT fname,lname,depart from employee where depart = 'IT部';
- ELSEIF p_depart = 4 THEN
- SELECT fname,lname,depart from employee where depart = '人事部';
- ELSE
- SELECT fname,lname,depart from employee where depart = '经理部';
- END IF;
- END;
-

Case when语句能在SQL语句中织入判断逻辑,类似于Java中的if else语句,分为简单函数和条件表达式。
简单函数:CASE 字段 WHEN 预期值 THEN 结果1 ELSE 结果2 END; 如果字段值等于预期值,则返回结果1,否则返回结果2
SELECT name,(CASE sex WHEN 0 THEN '女' ELSE '男' END) sex FROM score
条件表达式:CASE WHEN condition THEN result1 ELSE result2 END;
语句中的condition是条件判断,如果该判断结果为true,那么CASE语句将返回result,否则返回result2,如果没有ELSE,则返回null。CASE与END之间可以有多个WHEN…THEN…ELSE语句。END表示CASE语句结束。
- # SQL 语句
- SELECT name,(CASE sex WHEN 0 THEN '女' ELSE '男' END) sex FROM score;
-
-
- CREATE PROCEDURE sp_search_employee(IN p_depart INT)
- BEGIN
- CASE p_depart
- WHEN 1 THEN
- SELECT fname,lname,depart from employee where depart = '研究部';
- WHEN 2 THEN
- SELECT fname,lname,depart from employee where depart = 'AC部';
- WHEN 3 THEN
- SELECT fname,lname,depart from employee where depart = 'IT部';
- WHEN 4 THEN
- SELECT fname,lname,depart from employee where depart = '人事部';
- ELSE
- SELECT fname,lname,depart from employee where depart = '经理部';
- END CASE;
- END;
-
- # 处理NUll
- -- 正确
- case when date is null then 'A' else 'B' end
- -- 不论date是否为null,返回都是 B,也就是判断的都为非null(即使date真的是null)
- case date when nu ll then 'A' else 'B' end

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。