`
eyejava
  • 浏览: 1270494 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

left outer join的正确写法

    博客分类:
  • DB
 
阅读更多

Monday February 20, 2006 - 02:59pm (CST)
     1)select customerid,b.aggregateno
     from temptop10 a left outer join AGGREGATE_MEMBER b
    on  a.aggregateno=b.aggregateno and b.dwmonth='2005-12-31'

    2)select customerid,b.aggregateno
     from temptop10 a left outer join AGGREGATE_MEMBER b
    on  a.aggregateno=b.aggregateno where b.dwmonth='2005-12-31'

    sql1和sql2看起来没什么分别,事实上差别大了。sql1是正确的写法,得到的是左连接的结果:
    75736122-X | GL200405260015
    F2685322-X | GL200405260015
                               | 75313212-0
                               | 15438327-8
                               | 74200965-3
                               | 48800033-7
    11701-5009 | GL200506240001
    15498586-9 | GL200506240001
    .....

    sql2的结果看起来确像一个等值连接的结果:
    75736122-X |  GL200405260015
    F2685322-X |  GL200405260015
    11701-5009 |  GL200506240001
    15498586-9 |  GL200506240001
    15514263-1 |  GL200506240001
    15814304-4 |  GL200506240001
    15815336-5 |  GL200506240001
    61144602-8 |  GL200511160014
    75738868-4 |  GL200511160014
    26017968-4 |  GL200312010002
    61100604-9 |  GL200312010002
    61130906-6 |  GL200312010002
    ....

    分析原因,sql1是先解析on中的条件从b表过滤出数据然后left outer join a表,得出正确结果。sql2是先left outer join b 再按 where中的 dwmonth条件过滤,这时候左连接得到的笛卡儿乘积中的dwmonth为null的值就全部被过滤了,得到结果和等值连接一样。

    结论:对被关联的表(如以上的b表)的限定条件,要写在on语句中Image
分享到:
评论

相关推荐

    sql语句的多表连接查询[定义].pdf

    外连接分为左外连接(Left Outer Join)、右外连接(Right Outer Join)和完整外连接(Full Outer Join)。 - 左外连接(Left Outer Join):返回所有左表(通常是主表)的记录,即使在右表中没有匹配的记录。如果...

    总结SQLite不支持的SQL语法差异

    SQLite支持`LEFT OUTER JOIN`,但不支持`RIGHT OUTER JOIN`和`FULL OUTER JOIN`。这意味着在进行复杂的数据连接操作时,开发者需要注意选择合适的方法。 - **LEFT OUTER JOIN**: ``` SELECT tags.[tagid] FROM ...

    HQL语句大全

    - **简化语法**:可以简化`inner join`和`left outer join`的写法。 - 示例:`from Cat as cat join cat.mate as mate left join cat.kittens as kitten`。 - **fetch连接**:用于在一次查询中同时初始化相关联的...

    SQL左外连接,右外连接,全连接,内连接4种连接的区别[归类].pdf

    2. **左外连接(LEFT OUTER JOIN)**: 左外连接返回左表(在`LEFT JOIN`之后指定的表)的所有行,即使在右表中没有匹配的行。对于左表中没有匹配的行,右表的字段将填充为NULL。在上述例子中,当`a.id`不等于`b....

    Oracle-SQL语句(连接查询).doc

    虽然这种写法仍然有效,但Oracle 9i及以后的版本推荐使用outer join语法,因为其更清晰,可读性更强。 在实际应用中,连接查询是数据分析师和数据库管理员的重要工具,用于合并和分析来自不同数据源的数据。正确...

    SQL连接查询中On筛选与Where筛选的区别

    理解On和Where筛选器的区别对于编写正确的SQL查询至关重要,尤其是在处理Outer Join时。误用可能导致数据筛选不准确,进而引发程序错误。因此,开发人员需要深入理解这两个筛选器的不同,以便在实践中避免不必要的...

    SQLserver考试题A借鉴.pdf

    3. 外连接查询:`LEFT OUTER JOIN`会返回左表(本例中是`student`表)的所有记录,即使在右表(`score`表)中没有匹配的记录。因此,如果有10行`student`数据而6行`score`数据,结果会有10条记录,选项C正确。 4. ...

    sql查询优化规则

    3. **OUTER JOIN:** 如果指定了 OUTER JOIN,则将保留表中未找到匹配的行作为外部行添加到VT2,生成VT3。 4. **WHERE:** 应用WHERE筛选器进一步筛选VT3,生成VT4。 5. **GROUP BY:** 将VT4分组,生成VT5。 6. **WITH...

    mysql把一个表某个字段的内容复制到另一张表的某个字段的SQL语句写法

    在某些情况下,如果源表中存在目标表中没有的记录,我们可以使用LEFT OUTER JOIN。例如: ```sql UPDATE table_A A LEFT OUTER JOIN table_B B ON A.id = B.id SET B.field_B = A.field_A WHERE B.id IS NOT ...

    SQL有外连接的时候注意过滤条件位置否则会导致网页慢

    在SQL查询中,外连接(Outer Join)是一种重要的联接类型,它允许返回所有左侧或右侧表中的记录,即使在连接条件下没有匹配的记录。然而,当使用外连接时,放置过滤条件的位置对查询性能有着显著的影响。在这个案例...

    mysql面试题经典14题

    常见的JOIN类型有INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN,根据需求选择合适的联接方式。 11. **MySQL的分区和分表有什么区别?** 分区是将大表分成更小、更易管理的部分,每个部分都在同一个表中。...

    Oracle 开发DBA SQL编写规范

    left outer join tab2 t2 on t1.id = t2.id; ``` ##### 3.12 关于循环的推荐写法 - 使用`loop`、`while`或`for`循环来处理集合数据。 - 示例: ```plsql for i in 1..10 loop dbms_output.put_line(i); end ...

Global site tag (gtag.js) - Google Analytics