selet *
from ** left outer join ** on **
where **=**
对同一张表
优先处理left outer join ** on ** 还是where  **=**

解决方案 »

  1.   

    先join在取where
    SQL> with a as (select * from emp where empno=7499)
      2  select * from  a full join emp b on a.mgr=b.mgr
      3  ;
     
         EMPNO ENAME      JOB              MGR HIREDATE           SAL       COMM     DEPTNO EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
    ---------- ---------- --------- ---------- ----------- ---------- ---------- ---------- ----- ---------- --------- ----- ----------- --------- --------- ------
          7499 ALLEN      SALESMAN        7698 1981-2-20         1600        300         30  7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30
          7499 ALLEN      SALESMAN        7698 1981-2-20         1600        300         30  7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30
          7499 ALLEN      SALESMAN        7698 1981-2-20         1600        300         30  7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30
          7499 ALLEN      SALESMAN        7698 1981-2-20         1600        300         30  7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30
          7499 ALLEN      SALESMAN        7698 1981-2-20         1600        300         30  7900 JAMES      CLERK      7698 1981-12-3      950.00               30
                                                                                             7839 KING       PRESIDENT       1981-11-17    5000.00               10
                                                                                             7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10
                                                                                             7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30
                                                                                             7566 JONES      MANAGER    7839 1981-4-2      2975.00               20
                                                                                             7934 MILLER     CLERK      7782 1982-1-23     1300.00               10
                                                                                             7876 ADAMS      CLERK      7788 1987-5-23     1100.00               20
                                                                                             7902 FORD       ANALYST    7566 1981-12-3     3000.00               20
                                                                                             7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20
                                                                                             7369 SMITH      CLERK      7902 1980-12-17     800.10               20
     
    14 rows selected
     
    SQL> select * from emp a full join emp b on a.mgr=b.mgr where a.empno=7499;
     
         EMPNO ENAME      JOB              MGR HIREDATE           SAL       COMM     DEPTNO EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
    ---------- ---------- --------- ---------- ----------- ---------- ---------- ---------- ----- ---------- --------- ----- ----------- --------- --------- ------
          7499 ALLEN      SALESMAN        7698 1981-2-20         1600        300         30  7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30
          7499 ALLEN      SALESMAN        7698 1981-2-20         1600        300         30  7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30
          7499 ALLEN      SALESMAN        7698 1981-2-20         1600        300         30  7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30
          7499 ALLEN      SALESMAN        7698 1981-2-20         1600        300         30  7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30
          7499 ALLEN      SALESMAN        7698 1981-2-20         1600        300         30  7900 JAMES      CLERK      7698 1981-12-3      950.00               30
     
    SQL> 
      

  2.   

    SQL Select语句完整的执行顺序:1、from子句组装来自不同数据源的数据;
    2、where子句基于指定的条件对记录行进行筛选;
    3、group by子句将数据划分为多个分组;
    4、使用聚集函数进行计算;
    5、使用having子句筛选分组;
    6、计算所有的表达式;
    7、使用order by对结果集进行排序。
    8、执行select。
      

  3.   

    好像是优先处理left outer join ** on **