select a.ename,(select ename from emp b where b.empno=a.mgr) as boss_name from emp a;   列出所有员工的姓名及其直接上级的姓名b.empno=a.mgr 什么意思呢 a,b 都是emp 表

解决方案 »

  1.   

    b.empno=a.mgr 查询的连接条件了, 只不过a,b都是emp表下取连个别名,增加程序的可读性。
    另外同一个表可以作为子查询的连接条件上边就是一个子查询,只不过是同一个表子查询了。
      

  2.   

    (select ename from emp b where b.empno=a.mgr) 先执行这个吗 这个能查出什么呢 员工编号等于上级领导编号
      

  3.   

    应该先执行外部的select a.ename, 然后把这一条记录相应的mgr值传入到子查询中再返回值。
    比如你的一条记录ename (a),mgr(b),当外表查询检索到这条记录时,就会把mgr(b)传入子查询在得到返回
      

  4.   


    子查询where 里面 b.empno=a.mgr 员工编号等于 select a.ename查出来的mgr(上级编号) 这个怎么理解呢
      

  5.   

    这样吧,一步步分析。
    比如现在表中有两条记录
    empno~ename~mgr
    1~jim~2
    2~Andy~3
    当执行这条SQL的时候,首先检索到第一条记录中的ename(Jim),然后把着条记录中的mgr(2)传入到子查询。
    子查询此时相当于select ename from emp b where b.empno=2,返回Adny
    最终,返回
    Jim ~ Andy
    明白?