专注java. 2022-04-12 15:40 采纳率: 95%
浏览 122
已结题

老杜mysql34题 的查询问题

img

where 条件中的 a和b。不是都代表emp表吗。这个where条件有什么用。a.hiredate和b.hiredate不是应该相等吗

  • 写回答

5条回答 默认 最新

  • leaf_cq 2022-04-12 16:48
    关注

    1、首先需要了解emp表的表结构:从SQL中可以看出,张表中存储了所有员工的信息,包含普通员工和领导,其中普通员工在管理者字段 mgr 中存有其领导的 员工编号empno,这样,通过mgr可以查询出指定领导的所有下属员工信息
    2、其次了解需求:总结一句话:查询比领导还要先进公司的老板凳
    3、然后开始组织逻辑:就是将所有员工(中层领导可能也有其上级领导)的雇用时间与其领导(mgr对应的员工的雇用时间)进行比对,将其比领导的雇用时间更早的员工提取出来,然后按要求输出列(这还需要关联一下部门表)
    4、实现:通过JOIN将emp表【自】关联,让员工与其对应的领导一一对应到一行中(通过关联条件ON a.mgr = b.empno实现),得到一个关联结果集,然后在WHERE中实现对这个组合结果中的数据通过条件 a.hiredate < b.hiredate 进行过滤,得到的结果集就是需要的结果集,最后再关联一下部门表,提取一下部门信息即可
    5、针对楼主的疑问:
      首先,a、b不是在WHERE中,而是在FROM中定义的,虽然都是emp表,但通过关联条件 a.mgr = b.empno 进行了两个表的对照过滤,即先从a表中提取所有mgr有值的员工数据,再从b表中查找对应的empno与之(mgr)相等的领导数据,将两条数据组合成一条数据(其中包含该员工的所有emp表结构数据和其领导的emp表结构数据),所有满足上述条件的数据会缓存到内存中(这里暂时忽略了部门表的关联)。
      然后通过WHERE条件来进行过滤:如上所述,缓存数据中的一行数据中,即有员工的数据也有其领导的数据,这时的a.hiredate就是提取员工的雇用时间,b.hiredate就是其对应领导的雇用时间,让a.hiredate < b.hiredate 就能过滤掉不满足条件的记录,得到需求所希望得到的结果集
      最后,按需求关联部门表输出结果集即可。

    不知道这样描述你能明白不……

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 4月23日
  • 已采纳回答 4月15日
  • 赞助了问题酬金5元 4月12日
  • 创建了问题 4月12日

悬赏问题

  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题