他们都用在
SELECT
后面
假设我们有这样一张表
IF(expr1,expr2,expr3)
expr1为判断条件,符合则返回expr2,否则expr3
我们有一个这样的要求,查询表中的人员,大于20的打印✔,小于等于20的打印✖
SELECT `name`,IF(age>20,"✔","✖") FROM student;
执行语句,我们会得到
也就是说select
后面的IF
也相当于一列,满足和不满足的都有相应的打印
一般
case
结合when
,else
,end
使用一起使用,其中else
可以省略,end
不可以省略,他也相当于一列
他有两种写法
写法一
CASE case_value
WHEN when_value THEN statement_list
WHEN ...
ELSE statement_list
END;
写法二
CASE
WHEN expr1 THEN statement_list
WHEN ...
ELSE statement_list
END;
固定值(第一种写法)
SELECT `name`,
CASE `age`
WHEN "30" THEN "age是30"
ELSE "age不是30"
END AS "描述"
FROM student LIMIT 10;
表达式(第二种写法)
这里其实就是将字段写在
WHEN
的后面
SELECT `name`,age,
CASE
WHEN age > 20 THEN "age大于20"
ELSE "age小于20"
END AS "描述"
FROM student LIMIT 10;
根据
sql
的执行顺序,点击,他会先进行分组,对于分组后的数据进行select后语句的执行
SELECT age,GROUP_CONCAT(`name`) AS 姓名,SUM(IF(sex="male",1,2))
FROM student
GROUP BY age;
执行结果
执行顺序
根据sql的执行顺序,执行的流程大致如下
GROUP_CONCAT
函数来间接进行查看他与if的使用差不多,这里就不做过多介绍了
IFNULL(expr1,expr2)
expr1
为判断的值expr2
为当判断的值为空的时候,返回expr2