MySQL:if语句、if...else语句、case语句,使用方法解析
if语句做为表达式使用,语法格式如下:
IF(expr1,expr2,expr3)
说明:
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。
例子:
select *,if(age=1,"男","女") as ages from user;
当然如果作为表达式的话,if也可以用CASE when来实现的:
/* 下面这个将输出:男 */
SELECT CASE 1
WHEN 1 THEN '男'
WHEN 2 THEN '女'
ELSE '未知'
END
as ages
/* 下面这个将输出:女 */
SELECT
CASE 2
WHEN 1 THEN '男'
WHEN 2 THEN '女'
ELSE '未知'
END
as ages
/* 下面这个将输出:未知 */
SELECT
CASE 3
WHEN 1 THEN '男'
WHEN 2 THEN '女'
ELSE '未知'
END
as ages
/* 当然还有一种写法 输出:未知 */
SELECT
CASE
WHEN 3=1 THEN '男'
WHEN 3=2 THEN '女'
ELSE '未知'
END
as ages
SELECT
CASE
WHEN 3=1 THEN '男'
WHEN 3=2 THEN '女'
WHEN (3=4 || 3!=null) THEN '测试'
ELSE '未知'
END
as ages
从上面的例子我们可以看出得很明白了,case后面的值=when后台的值,然后就会输出when后面跟的then后的值。如果都不等行的话,就输出else后的值。
IF...ELSE...做为流程控制语句使用,语法格式如下:
IF search_condition THEN
statement_list
[ELSEIF search_condition THEN]
statement_list ...
[ELSE
statement_list]
END IF
说明:
与PHP中的IF语句类似
当IF中条件search_condition成立时,执行THEN后的statement_list语句、
否则判断ELSEIF中的条件成立时,执行其后的statement_list语句、
否则继续判断其他分支。
当所有分支的条件均不成立时,执行ELSE分支。
search_condition是一个条件表达式,可以由“=、<、<=、>、>=、!=”等条件运算符组成,并且可以使用AND、OR、NOT对多个表达式进行组合。
https://blog.csdn.net/weixin_43064185/java/article/details/89554393
通常begin-end用于定义一组语句块,在各大数据库中的客户端工具中可直接调用,但在mysql中不可。
begin-end、流程控制语句、局部变量只能用于函数、存储过程内部、游标、触发器的定义内部。以下的'[]'表示可选内容。
1、begin-end: [begin_label:] BEGIN
[statement_list]
END [end_label]
如:
begin
select * from user;
end
2、if语句
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF
如:
BEGIN
SET b=110;
IF b>0 THEN
SELECT a+b;
END IF;
注意,end if后面要根据情况加';',有些不爽啊,不像sqlserver那样
3、while语句
[begin_label:] WHILE search_condition DO
statement_list
END WHILE [end_label]
如:
BEGIN
WHILE a<10 DO
SET a=a+1;
END WHILE;
SELECT a;
END//
4、局部变量
DECLARE var_name[,...] type [DEFAULT value]
如 declear a int(2) default 2;
注意该语句使用的地方(不能在外部程序中使用)
5、赋值语句set
SET var_name = expr [, var_name = expr] ...
如set a=5;set a=a+4;
赋值的所有操作都要使用set语句,直接使用a=5的操作是非法的
注意该语句使用的地方(不能在外部程序中使用)
6、@操作符
@a用于定义一个全局变量,该变量的生命周期只在本次连接。
set @a=3;赋值语句
set @a=b语句可存在于任何语句块中