在对我们的数据表进行判断处理时,就需要使用到mysql中的分支语句。有计算机语言基础的看到分支语句脑海里面闪现出来的应该时“if..”或者是“if...else...”语句,MySQL中虽然没有这种一模一样的格式,但是却是有这种类似的函数来给我们进行调用。接下来我们去认识mysql中的4个分支函数。
目录
三,case when condition then result ...else result end alias
四,case filed when filed's value then result...else result end alias
在if函数if(condition,value1,value2)的参数列表中condition表示为条件的意思,当我们将三个参数传入进去,该函数就会进行判断,如果符合我们传入的condition条件的话,就会返回第二个参数value1,如果不符合我们传入的条件condition的话,就会返回value2。现在让我们使用具体的案例来进一步加深对该函数的理解:
现在我们有这样一张表:
从上面我们可以看到名字为“wangwu”的员工没有薪资(因为才刚进来,还没到他发工资的时候)
这个时候我们想要计算这三个人3个月后的工资是多少【注:wangwu的底薪3000】时:
SELECT * ,salary * 3 AS threemonths FROM contain_null;
我们可以看到wangwu的工资依旧是,因为我们的null参与进来我们计算并干扰到了我们的结果。这个时候我们就需要使用if判断函数先对含有null的数据进行修改,一般是将含有null的数据修改成0,接着再在这个基础上进行计算:
SELECT * ,IF(salary IS NOT NULL,salary,0) AS salary1 FROM contain_null;
或者是直接在里面计算出来,如下:
SELECT * ,IF(salary IS NOT NULL,salary *3 ,3000*2) AS threemonths FROM contain_null;
接下来我们去认识第二个函数:ifnull()
ifnull函数其实就是if(condition,value1,value2)的特殊形式,就是当我们的condition条件为所判断的数据含有零时。
ifnull函数只针对于数据含有null空值的时候:如果数据为不为null则返回value1,否则返回value2,我们之前计算wangwu的工资也可以使用这个函数:
SELECT * ,IFNULL(salary *3 ,3000*2) AS threemonths FROM contain_null;
所以也可以这么说,“ifnull是为null空值而生的函数”。
case when condition then result ...else result end alias 该语句就相当于Java中的if...else...if...else
语句。我们可以这么翻译该函数:论据 当该条件成立,返回一个对应的结果...如果是其他情况,返回其他的结果,然后再给我们的查询结果集取一个别名。
如下我们有这样一张表:
该表各字段所代表的意思如下:
接着我们使用按照成绩对上面的学生进行划分,如stu_score学生成绩总分在90分及以上判定为“优秀”,85分以上但是没有到90分为“良好”,80分以上不超过85分为“一般”,剩下的等级为“还需要努力”:
- SELECT stu_name,stu_score,CASE WHEN stu_score >=90 THEN '优秀'
- WHEN stu_score BETWEEN 85 AND 90 THEN '良好'
- WHEN stu_score BETWEEN 80 AND 85 THEN '一般'
- ELSE '还需要努力' END stu_grade
- FROM 20student;
case filed when filed's value then result...else result end alias与case when condition then result ...else result end alias 语句的不同之处在于它在论据,案例case之后直接写入了表格中的字段名,并根据该字段里面的数据进行判断,有点和我们java中的switch...case类似。
我们还是使用之前的学生表,并使用该函数对学生表进行处理:当sch_id学校id为1时,对应的学校为“麻省理工学院”,id为2对应“南洋理工大学”,id为3对应“瑞士联邦理工学院”:
- SELECT stu_name,sch_id,CASE sch_id WHEN 1 THEN '麻省理工学院'
- WHEN 2 THEN '南洋理工大学'
- WHEN 3 THEN '瑞士联邦理工学院'
- END stu_collage
- FROM 20student;
如上,当我们不使用else给其他情况的数据给值的话,默认为null。