流程控制语句:选择结构
概念:就是根据某个判断条件,如果该条件满足,就执行代码1,否则执行代码2
关键字:case when then else end
语法:
select case 字段名 when 值1 then 值2 else 值3 end from 表名
执行流程:
根据case字段名的值 和when后面的值进行对比,如果相同就执行then后面的值2,如果不同执行else值3
类似java中的switch语句
-- 查询职业英文显示对应的中文
select ename, case job
when "manager" then '经理'
when "salesman" then '销售'
else "其他员工" end,job
from emp;
if语句
关键字:if(arg1,arg2,arg3)
执行流程: 如果arg1为0 或者null 或者空字符串 或者false 则返回arg3 否则返回arg2
类似java三目运算符 a>b?a:b
select if(0,1,2); -- 2
select if(1,1,2); -- 1
select if(null,1,2); -- 2
select if(false,1,2); -- 2
select if("",1,2); -- 2
select if(" ",1,2); -- 2
select if("1",1,2); -- 1
select if(-1,1,2); -- 1
ifnull语句(很重要)
关键字:ifnull(arg1,arg2);
执行流程:如果arg1不是null,就返回arg1,否则返回arg2
select ifnull(null,10); -- 10
select ifnull(123,10); -- 123
-- mysql里面null和任何数运算结果还是null
select null+8; -- null
select null+"123"; -- null
聚合函数:
avg 平均数
max 最大
min 最小
sum 求和
count 总记录数
-- 查看公司员工的平均收入(sal+comm)是多少???
select avg(sal+comm) from emp; -- 1950 逻辑不对,comm存在null,而null+sal的话结果是null
select avg(sal+ifnull(comm,0))from emp; -- 2043.18
-- 查看收入最高的员工
select max(sal+ifnull(comm,0)) from emp; -- 正确
select max(sal+comm) from emp; -- 2650 逻辑不对
-- 查看30号部门人的工资总和
select sum(sal+ifnull(comm,0)),deptno from emp where deptno = 30;
-- 查看20号部门中,底薪超过2000元的人数?
select count(*) from emp where sal>2000 and deptno = 20;
count(*) count(1) 一样,推荐用count(1) 阿里的开发手册是推荐用count(1)
count(字段) 会忽略null值得统计
select count(*) from emp; -- 11
select count(1) from emp; -- 11
select count(ename) from emp; -- 11
select count(comm) from emp; -- 4