条件表达式:
case 字段:
when 值1 then 值
when 值1 then 值
else
默认值
end
case...when 通用写法 mysql和oracle中都可以使用
Oracle特有的写法:decode(字段,if1,then1,if2,then2,else1)
---给表中姓名取一个中文名
写法1:
select
case ename
when 'SMITH' then '刘备'
when 'ALLEN' then '诸葛'
else
'路人甲'
end "中文名"
from emp;
写法2:
select decode(ename,'SMITH','刘备','ALLen','诸葛','SCOTT','曹操','路人乙') from emp;
分组排序:
分组表达式:group by
select 分组条件,分组之后的操作 from 表名 group by 分组条件 having 条件过滤;
----查询分组统计所有部门的平均工资,找出平均工资大于2000的部门
1.查询所有部门的平均工资
select deptno,avg(sal) from emp group by deptno;
2.过滤出大于2000的部门
select deptno,avg(sal) from emp group by deptno having avg(sal) > 2000;
出错:
select deptno,avg(sal) aafrom emp group by deptno having aa > 2000;
注:
SQL的编写顺序:
select from .. where.. group by .. having .. order by
SQL的执行顺序:
from ..where ..group by ..having..select..order by
where和having的区别:
where后边不可以接聚合函数,可以接单行函数
having在group by之后执行,可以接聚合函数