多表查询与分组统计

文章详细介绍了如何使用OracleSQL查询每个部门的名称、部门人数和平均工资,包括使用JOIN操作关联emp和dept表,以及使用GROUPBY子句进行分组统计。后续还扩展到了查询包含部门编号、位置等更多字段的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

查询每个部门的名称、部门人数、平均工资

查询每个部门的编号、名称、位置、部门人数、平均工资


Oracle从入门到总裁:https://blog.youkuaiyun.com/weixin_67859959/article/details/135209645

group by 子句是在 where子句之后运行的,所以在使用时可以进行限定查询,也可以进行多表查询

查询每个部门的名称、部门人数、平均工资

●  确定要使用的数据表
  dept 表:部门名称。
  emp 表:统计数据。

●  确定已知的关联字段
  员工与部门: emp.deptno=dept.deptno。

第一步:查询出每个部门的名称、员工编号、基本工资 

SQL> select d.dname,e.empno,e.sal
  2  from emp e,dept d
  3  where e.deptno=d.deptno;

DNAME                             EMPNO        SAL
---------------------------- ---------- ----------
ACCOUNTING                         7839       5000
ACCOUNTING                         7782       2450
ACCOUNTING                         7934       1300
RESEARCH                           7902       3000
RESEARCH                           7369        800
RESEARCH                           7566       2975
SALES                              7900        950
SALES                              7844       1500
SALES                              7654       1250
SALES                              7521       1250
SALES                              7499       1600
SALES                              7698       2850

第二步:此时的查询结果中,部门名称部分出现了重复的内容

按照分组来说,只要是出现了数据的重复,那么就可以进行分组,只不过此时的分组是针对临时表(查询结果)的

既然已经确定了 dname 上存在重复记录,那么就直接对 dname 分组即可

SQL> select d.dname,count(e.empno),avg(e.sal)
  2  from emp e,dept d
  3  where e.deptno=d.deptno
  4  group by d.dname;

DNAME                        COUNT(E.EMPNO) AVG(E.SAL)
---------------------------- -------------- ----------
RESEARCH                                  3 2258.33333
SALES                                     6 1566.66667
ACCOUNTING                                3 2916.66667

第三步:在 dept 表中实际上存在 4 个部门的信息,而此时的要求也是统计所有的部门名称,

根据前面介绍的情况,如果发现数据不完整,立刻使用外连接

SQL> select d.dname,count(e.empno),avg(e.sal)
  2  from emp e,dept d
  3  where e.deptno(+)=d.deptno
  4  group by d.dname;

DNAME                        COUNT(E.EMPNO) AVG(E.SAL)
---------------------------- -------------- ----------
RESEARCH                                  3 2258.33333
SALES                                     6 1566.66667
ACCOUNTING                                3 2916.66667
OPERATIONS                                0

查询每个部门的编号、名称、位置、部门人数、平均工资

 ●  确定要使用的数据表
  dept 表:编号、名称、位置
  emp 表:统计信息

●  确定已知的关联字段
  员工与部门: emp.deptno=dept.deptno。

  第一步:查询出每个部门的编号、名称、位置、员工编号、工资

SQL> select d.deptno,d.dname,d.loc,e.empno,e.sal
  2  from emp e,dept d
  3  where e.deptno(+)=d.deptno;

    DEPTNO DNAME                        LOC                             EMPNO        SAL
---------- ---------------------------- -------------------------- ---------- ----------
        10 ACCOUNTING                   NEW YORK                         7839       5000
        10 ACCOUNTING                   NEW YORK                         7782       2450
        10 ACCOUNTING                   NEW YORK                         7934       1300
        20 RESEARCH                     DALLAS                           7902       3000
        20 RESEARCH                     DALLAS                           7369        800
        20 RESEARCH                     DALLAS                           7566       2975
        30 SALES                        CHICAGO                          7900        950
        30 SALES                        CHICAGO                          7844       1500
        30 SALES                        CHICAGO                          7654       1250
        30 SALES                        CHICAGO                          7521       1250
        30 SALES                        CHICAGO                          7499       1600
        30 SALES                        CHICAGO                          7698       2850
        40 OPERATIONS                   BOSTON

 第二步:此时发现有 3 个列(dept 表)同时发生着重复,那么就可以进行多字段分组

SQL> select d.deptno,d.dname,d.loc,count(e.empno),avg(e.sal)
  2  from emp e,dept d
  3  where e.deptno(+)=d.deptno
  4  group by d.deptno,d.dname,d.loc;

    DEPTNO DNAME                        LOC                        COUNT(E.EMPNO) AVG(E.SAL)
---------- ---------------------------- -------------------------- -------------- ----------
        10 ACCOUNTING                   NEW YORK                                3 2916.66667
        20 RESEARCH                     DALLAS                                  3 2258.33333
        30 SALES                        CHICAGO                                 6 1566.66667
        40 OPERATIONS                   BOSTON                                  0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙子味冰可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值