SELECT ENAME FROM EMP ME WHERE SAL=(SELECT MAX(SAL) FROM EMP SE WHERE SE.DEPTNO=ME.DEPTNO)在oracle中查询各个部门最高工资,
这个语句每个步骤是如何的,请高手解释一下。

解决方案 »

  1.   

    --查询的逻辑执行过程,来自技术内幕 
    (8)  SELECT (9) DISTINCT (11) <TOP_specification> <select_list> 
    (1)  FROM <left_table> 
    (3)    <join_type> JOIN <right_table> 
    (2)      ON <join_condition> 
    (4)  WHERE <where_condition> 
    (5)  GROUP BY <group_by_list> 
    (6)  WITH {CUBE | ROLLUP} 
    (7)  HAVING <having_condition> 
    (10) ORDER BY <order_by_list> 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/htl258/archive/2009/04/12/4065690.aspx
      

  2.   

    SELECT ENAME --5
    FROM EMP ME --1
    WHERE SAL=(
    SELECT MAX(SAL) --4
    FROM EMP SE --2
    WHERE SE.DEPTNO=ME.DEPTNO --3
    )
      

  3.   

    SELECT ENAME FROM EMP ME 
    WHERE SAL=(SELECT MAX(SAL) FROM EMP SE WHERE SE.DEPTNO=ME.DEPTNO)--SELECT MAX(SAL) FROM EMP SE WHERE SE.DEPTNO=ME.DEPTNO 这句话是每个部门最高的工资SELECT ENAME FROM EMP ME 
    WHERE SAL=--根据最高的工资得到人名
      

  4.   

    SELECT ENAME FROM EMP ME 
    WHERE SAL=(SELECT MAX(SAL) FROM EMP SE WHERE SE.DEPTNO=ME.DEPTNO)--SELECT MAX(SAL) FROM EMP SE WHERE SE.DEPTNO=ME.DEPTNO 这句话是每个部门最高的工资SELECT ENAME FROM EMP ME 
    WHERE SAL=--根据最高的工资得到人名
      

  5.   

    本人理解是这样的;
    1.首先执行一次外部查询
    2.对于外部查询中的每一行分别执行一次子查询,而且每次执行子查询时都会引用外部查询中当前行的值。
    3.使用子查询的结果来确定外部查询的结果集。
    所以先从表EMP ME 中找到第一列的ename,和sal,然后通过
    SELECT MAX(SAL) FROM EMP SE WHERE SE.DEPTNO=ME.DEPTNO查找表me第一列所对应的deptno与表se是否相同,如果相同则查出deptno=第一列的那个值的最高工资,然后与EMP ME 中第一列的ename,和sal比较,如果正确则打印,错误则不返回值。然后从表me第二列开始比较,不知道是否正确?
      

  6.   

    lz,上面说的对,都是先from出来所有表,然后在洗数的。