专注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 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大