AVG 平均值
COUNT 计数
MAX 最大值
MIN 最小值
SUM 合计
练习
–有多少员工?
—有多少种工资
–多少个部门
–查询员工总数、雇佣时间范围、工资最高、工资总额、平均工资
GROUP BY 子句语法
可以使用GROUP BY子句将表中的数据分成若干组
Having
不能在 WHERE 子句中使用组函数(聚合函数)。
可以在 HAVING 子句中使用组函数(聚合函数)。
练习
—查询每个部门员工的平均工资,最高工资工资总额 ,按总额高低排序
— 查询各部门 文员的每月工资开销
----查询每部门各岗位的平均工资
----查询每部门各岗位的工资总额超过2500的信息
------每个部门的名称、地址,工资总额
hw_SqlF:
--scott账号是锁定的,1.解锁 2.密码过期,修改密码
--查找30号部门的销售人员
select * from emp where deptno = 30 and job = 'SALESMAN';
-- 查询出30号部门的销售人员和文工
select * from emp where deptno = 30 and (job = 'SALESMAN' or job = 'CLERK');
--查找SMITH的职工
select * from emp where ename = 'SMITH';
---查询不是30号部门的非销售人员
select * from emp where deptno != 30 and job != 'SALESMAN';
---查询工资范围在1500-3000员工姓名
select ename from emp where sal between 1500 and 3000;
--in关键字 找出 MANAGER ANALYST PRESIDENT的员工
select * from emp where job in ('MANAGER','ANALYST','PRESIDENT');
--模糊查询 查询出 姓名以A开头或者 姓名包含R字母的员工
select * from emp where ename like 'A%' or ename like '%R%';
----找出没有奖金的员工
select * from emp where comm = 0 or comm is null;
----找出有奖金的员工
select * from emp where comm > 0;
---查询20号部门的雇员,按收入高低排序
--排序默认是:顺序asc desc倒序
select * from emp where deptno = 20 order by sal asc;
select * from emp where deptno = 20 order by sal desc;
---查询员工工资,按部门内收入高低倒序排序-----------排序要排两个字段一个部门一个收入
select * from emp order by deptno asc ,sal desc;
Class_SqlF:
---------------------------函数 1.聚合函数 2.普通函数
-- 聚合函数
--AVG 平均值
--COUNT 计数--用来统计数据条数 count()里面可以填 * 也可以填 1
--MAX 最大值
--MIN 最小值
--SUM 合计
--查询20号部门的平均工资
select avg(sal) from emp where deptno=20;
--统计20号部门有多少员工
select count(*) from emp where deptno = 20;
--查询20号部门的最高工资是多少
select max(sal) from emp where deptno = 20;
--查询20号部门的最低工资是多少 使用多个函数!!
select min(sal),count(1),max(sal),avg(sal) from emp where deptno = 20;
--合计20号部门一个月要发多少工资
select sum(sal) from emp where deptno = 20;
--2.单行函数 每一行数据都会使用一次
--nvl(x,value)如果x为空,返回value,否则返回X
select e.*,(e.sal + nvl(e.comm,0)) as coucomm from emp e;
--有多少员工?
select count(*) from emp;
---有多少种工资
select count(*) from (select DISTINCT sal from emp);
--有多少总工资 sum()
select sum(sal) from emp;
--有多少种工资
--1.查询出剔除重复数据的工资
select DISTINCT sal from emp;
--2.算出种类数量,查询出刚刚的结果表
select count(*) from (select DISTINCT sal from emp);
select count(DISTINCT sal) from emp;
--多少个部门
select count(*) from (select DISTINCT deptno from emp);
select count(*) from dept;
--查询员工总数、雇佣时间范围、工资最高、工资总额、平均工资
select count(*),max(sal),sum(sal),avg(sal) from emp;
select count(*),min(hiredate)||'-'||max(hiredate) shijianfanwei,max(sal),sum(sal),avg(sal) from emp;
--------------------group by 子句语法--------
--1.是给数据进行分组
--2.使用在where子句后面
--3.在group by返回的参数中 如果没有使用聚合函数的话都要在group by子句后面出现
--4.在group by出现的可以不在select返回参数中出现
--查询每个部门的平均工资 就要部门开始进行分组
select deptno,avg(sal) from emp group by deptno;
--3.
select deptno,job,avg(sal) from emp group by deptno,job;
-----------------------------having---------
--having子句紧跟在group by 子句后面
--having也是过滤条件
--必须跟在group by 后面使用使用,没有group by就不能有having
--having可以使用聚合函数查询过滤,可是where不能使用
--查询出10号和20号各个部门的总工资
select deptno,sum(sal) from emp group by deptno having deptno in (10,20);
select deptno,sum(sal) from emp where deptno in (10,20) group by deptno;
--查询出各个部门总工资大于10000的部门
select deptno,sum(sal) from emp group by deptno having sum(sal)>10000;
---查询每个部门员工的平均工资,最高工资工资总额 固定工资+奖金,按总额高低排序 order by放在最后面
select avg(sal),max(sal),sum(sal+nvl(comm,0)) ze from emp group by deptno order by ze desc;
--- 查询各部门 文员的每月工资开销
select sum(sal+nvl(comm,0)) from emp where job='CLERK' group by deptno;
----查询每部门各岗位的平均工资
select deptno,job,avg(sal) from emp group by deptno,job order by deptno;
----查询每部门各岗位的工资总额超过2500的信息 where 条件中不能使用聚合函数,所以只能用having
select deptno,job,sum(sal) from emp group by deptno,job having sum(sal)>2500 order by deptno;
--1.题目要求做什么事情
--2.搞清楚每个关键字的用法
------每个部门的名称、地址,工资总额