SQL Server 子查询的运用

 

对于问题案例:已经有DEPARTMENT,EMPLOYEE两张表,并EMPLOYEE表中的E_DID是外键且引用于DEPARTMENT表中,现有个问题:你如何查询出部门人数在10人以上的部门,只需要查询对应的ID,和部门名称即可?

 

问题分析:我们分析此类问题以一种从里向外处理问题的思路,逐层剔除冗余数据,便可以得到我们的结果!

step1:首先需要对员工表进行分类汇总,以便统计出人数:

         sql codeSELECT e.E_DID,COUNT(e.E_DID) AS total  FROM [EMPLOYEE] as e
                   GROUP BY e.E_DID                     //请注意Group by 子名存在的必要性

step2: 聪明你也许已经发现上面将返回的并不是我们所需要的部门ID的集合,且还没有过滤掉我们不需要的数据,请注意:逐层剔除,各层只完成它有限的能力,注意控制各层的能力。下面要做的就是剔除冗余数据(上面黑色标记的列),并获得我们的部门ID的集合

          sql code:    SELECT e1.E_DID FROM(
                          
 SELECT e.E_DID,COUNT(e.E_DID) AS total FROM [EMPLOYEE] as e
                           GROUP BY e.E_DID
 

                      ) AS e1
                          WHERE e1.total>=10

step3:终于可以到收工的时候了,一举将我们需要的数据拿下来吧!想必你是迫不急待了吧!

       sql code: SELECT d.* FROM DEPARTMENT AS d

                               SELECT e1.E_DID FROM(
                          
           
SELECT e.E_DID,COUNT(e.E_DID) AS total FROM [EMPLOYEE] as e
                                       GROUP BY e.E_DID 

                                ) AS e1
                                WHERE e1.total>=10

                     );

 

总结:在分析的有的问题时,我们应该要善于从问题的本质出发,先确定需要获得什么,如何获得,获得的是不是我们要的,如果不是如何剔除多余的数据,以一种逐层剔除的思想,层层向里看问题,层层向外解问题,问题自然迎刃而解!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值