1.表结构
员工表
部门表
工资等级表
2. 查询
-- 2.1 查询员工 年收入 nvl(comm,0) 第一个参数如果是null就用第二个参数
select e.ename,e.sal*12+nvl(comm,0) from emp e
-- 2.2 查询是 1981年入职的员工
select * from emp e where hiredate between to_date('1981-1-1','yyyy-mm-dd') and to_date('1981-12-31','yyyy-mm-dd')
-- 2.3 使用了in函数
--查询员工编号是7369,7654,7566的员工
--方式一
select * from emp e where e.empno='7369' or e.empno='7654'
--方式二
select * from emp e where e.empno in(7369,7654)
--2.4 order by 排序
-- 排序 order by 一点要放在最后
select * from emp e order by hiredate desc
/*
排序中的空值问题
nulls last -- 将空值 放在最后
nulls first
*/
select * from emp order by comm desc nulls last;
select * from emp order by sal desc, hiredate desc;
select * from emp order by hiredate desc;
--2.5 函数
--伪表,虚表:dual 没有任何的实际意义,只是为了补全Oracle查询语法
--2.5.1 单行函数
--转为字符:to_char()
select 123,to_char(123) from dual;
select to_char(sysdate,'fmyyyy-mm-dd hh24:mi:ss') from dual;
select to_char(to_date('2026-1-1','yyyy-mm-dd'),'year') from dual;
select to_char(hiredate,'year') from emp;
-- 2.5.2 数值函数
--四舍五入
select round(15.66) from dual; -- 16
select round(15.66,1) from dual; -- 15.7
select round(15.66,-1) from dual; --20
select round(15.66,-2) from dual; --0
--数值截取
select trunc(19.99) from dual; -- 19
select trunc(15.66,1) from dual; -- 15.6
select trunc(15.66,-1) from dual; --10
select trunc(15.66,-2) from dual; --0
--数值取余
select mod(15,3) from dual; -- 0
select mod(15,4) from dual; -- 3
--2.5.3 日期函数
select sysdate from dual;
--2.5.4 转换函数
--to_char()
--to_date()
select to_number('123') from dual;
--2.5.5 通用函数
--显示员工的工作为中文
-- 方式一
select e.empno,e.ename,e.sal ,
decode(e.job,'CLERK','银行专员','SALESMAN','销售员','MANAGER','职业经理人','其他')
from emp e
2.6 多行函数
select avg(sal) from emp -- 求员工平均工资
select trunc(avg(sal)) from emp -- 求员工平均工资 保留整数部分
select trunc(avg(sal),2) from emp -- 求员工平均工资 保留两位小数
2.7 常用 总要的
/*
总结:在分组统计时候,在select 出现的普通字段,在group by 中必须出现
在group by中出现的普通字段,在select 中可以不出现
*/
--2.7.1 查询每个部门的人数
-- 2.7.2 查询 每个部门的平均工资
--2.7.2 查询部门人数大于 4的 部门
-- 2.7.3 查询部门平均工资大于 2000的部门
/*
having跟where条件区别:
where条件在分组之前查询条件,having在分组后得到结果对结果进一步筛选
*/