where 条件中的 a和b。不是都代表emp表吗。这个where条件有什么用。a.hiredate和b.hiredate不是应该相等吗
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 就能过滤掉不满足条件的记录,得到需求所希望得到的结果集
最后,按需求关联部门表输出结果集即可。
不知道这样描述你能明白不……
a和b代表两个不同的emp表。其中a代表员工emp表,b代表领导emp。
where条件是用来完成下面这个条件的:
a表是员工,b是领导
a.hiredate<b.hiredate
表示只查找入职时间小于领导的员工,即比领导资格还老的员工
这是属于表的内关联,你可以理解为同一个表之间互相关联,把一个表一分为二,一个为员工表,一个为领导表,sql的意思是查询员工表中雇用日期比领导表早的数据
1)a和b是表的自关联玩法,不一样
2)a.hiredate < b.hiredate 表示查询员工的入职日期早与领导的入职日期,即员工的资历比领导还高的员工