zoukankan      html  css  js  c++  java
  • TOM上关于JOIN跟+号的讨论

    http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:6585774577187

    to "predicate" on the parent table, you want to use a where clause - else by DEFINITION - every row in the parent table is coming out. If you: select ... from t1 left outer join t2 on (anything) / you get BY DEFINITION everything from t1, and if something matched the "on" clause - stuff from t2 will be there (if not, t2 is "made up")

    this whole thing is begining to remind me of the people who get mad at the results of this query:
    
    select * from emp where empno in ( select empno from dept );
    
    but anyway....
    
    you are NOT using a predicate.  if you were, i would agree with you.
    
    WHERE begins a predicate.  If you used a predicate, you observe the behaviour you seem to expect.
    
    ON is a join clause, a new thing in Oracle SQL with 9i.  It restricts the rows returned from EMP -- 
    not DEPT -- in the context of an outer join.
    
    You are just quite simply not understanding the syntax here.  ON != WHERE.  
    
    T1 left outer join T2 on ( any condition )
    
    will by the very very very definition of an ANSI outer join return ALL ROWS of T1 -- all of them -- 
    regardless of what "any condition" specifies since "any condition" is a join criteria for going 
    from T1 to T2 -- it is not a predicate, it does not restrict the rows being returned.
    
    
    The reason you never "got this before 9i" is because quite simply there was no syntax even 
    remotely similar to this with the ON clause.  It is new.  In 8i and before everything was in the 
    predicate.  Now, everything ISN'T in the predicate.
    
    Now however, you understand how it works.  So, you can code correct sql.
    
    The result set fits EXACTLY what you asked for -- you just didn't understand the semantics here.  
    
    and you know -- we don't "make up" this syntax.  it is sort of the way it was told to us that it 
    should be.  This is the ANSI outer join syntax, not the Oracle outer join syntax. 
  • 相关阅读:
    echarts设置y轴线的样式
    echarts基础配置信息?
    提高网站用户体验使网站更好发展的五大要点
    没有或很少有出站链接的网站存在致命的缺陷
    网络推广之百度知道推广技巧
    如何让百度3分钟内收录你的文章
    CSS强制换行
    如何提高网站在搜索引擎中的权重
    js闭包深入详解
    深入浅出之正则表达式
  • 原文地址:https://www.cnblogs.com/tracy/p/2043235.html
Copyright © 2011-2022 走看看