美文网首页
第三天上午、分组、多表内连接、子查询(分页)查询

第三天上午、分组、多表内连接、子查询(分页)查询

作者: 别学编程 | 来源:发表于2020-08-06 06:25 被阅读0次

    分组查询

    聚合函数sum求和,avg平均值,count统计函数,max最大值,min最小值

    求和和求平均值
    表结构
    image.png
    下面测试下没有奖金的员工是否参与数值计算,下图四张图片中可以看出空值是不参与计算的
    图1
    图2
    图3
    图4
    分组group by,分组注意:select后面只能出现分组的列,后面可以有聚合函数
    分组查询
    ----练习
    --1统计每年入职的人数:年份,人数
    select to_char(hiredate,'YYYY') 年,count(empno)
    from emp
    group by to_char(hiredate,'YYYY');
    
    --练习
    --1.统计每年入职的人数:年份,人数
    select to_char(hiredate,'YYYY') 年,count(empno)
    from emp
    group by to_char(hiredate,'YYYY');
    --2. 按照职务job对人数进行统计
    select job,count(empno) from emp group by job;
    --3. 统计每个部门的平均工资,按平均工资降序排列
    select deptno,avg(sal) 平均工资
    from emp
    group by deptno
    order by 平均工资 DESC;
    --4. 获取同一个上司下的人数
    select mgr,count(deptno)
    from emp
    group by mgr;
    --获取同一部门下,同一个上司下的人数
    SELECT DEPTNO,MGR,count(empno)
    from emp
    group by deptno,mgr;
    

    要注意函数的使用方法,特别注意

    注意事项
    --显示非销售人员工作名称及从事同一工作雇员的月工资总和
    --
    select job,sum(sal)
    from emp
    where job != 'salesman'
    group by job
    having sum(sal) >= 5000
    order by sum(sal);
    

    多表查询、内连接查询

    从两张表中查询记录


    多表查询

    例题

    --例题
    select empno,ename,e.deptno,loc
    from emp e,dept d
    where e.deptno = d.deptno
    and loc = 'CHICAGO'
    
    例题运行结果

    上午练习题

    --练习
    --1.统计每年每月入职的人数:年份,月份,人数
    select to_char(hiredate,'yyyy') 年份,to_char(hiredate,'mm') 月份,count(ename) 姓名 from emp
    group by to_char(hiredate,'yyyy'),to_char(hiredate,'mm');
    --2. 按照部门编号及职务编号对人数进行统计
    select deptno,job,count(ename) from emp group by deptno,job;
    --3. 统计平均薪资大于5000的部门
    select deptno,avg(sal) from emp group by deptno having avg(sal)>5000;
    --4. 获取同一部门下,同一个上司下的人数
    select deptno,mgr,count(ename) from emp group by deptno,mgr;
    --5. 列出至少有三个员工的所有部门。
    select deptno,count(ename) from emp group by deptno having count(ename)>3;
    --6. 查看员工职务变更历史记录:员工编号,姓名,起始日期,终止日期,职务名称,部门名称
    select empno 员工编号,ename 姓名,hiredate 起始日期,job 职务名称,dname 部门名称 from emp e,dept d
    where e.deptno=d.deptno;
    --7. 要求查询雇员的编号,姓名,部门编号,部门名称及部门位置(emp,dept),要求部门位置位于"CHICAGO"
    select empno,ename,e.deptno,dname,loc from emp e,dept d
    where e.deptno = d.deptno
    and loc = 'CHICAGO'
    --8. 统计各个部门的员工数(不包含空的部门),列出部门名称,人数 
    select count(empno) 人数,dname 部门名称 from emp e,dept d
    where e.deptno = d.deptno
    group by dname
    having count(empno)>1;
    --9. 显示非销售人员工作名称及从事同一工作雇员的月工资总和,并且要满足从事同一工作的雇员的月工资合计大于5000,输出结果按月工资的合计升序排列
    select sum(sal),job from emp
    where job != 'SALESMAN' 
    group by job having sum(sal)>5000 
    order by sum(sal);
    --10.输出每个部门的名字和平均工资 
    select dname,avg(sal)from emp e,dept d
    where d.deptno=e.deptno
    group by dname;
    

    相关文章

      网友评论

          本文标题:第三天上午、分组、多表内连接、子查询(分页)查询

          本文链接:https://www.haomeiwen.com/subject/tmhnrktx.html