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
分享到:
相关推荐
外连接分为左外连接(Left Outer Join)、右外连接(Right Outer Join)和完整外连接(Full Outer Join)。 - 左外连接(Left Outer Join):返回所有左表(通常是主表)的记录,即使在右表中没有匹配的记录。如果...
SQLite支持`LEFT OUTER JOIN`,但不支持`RIGHT OUTER JOIN`和`FULL OUTER JOIN`。这意味着在进行复杂的数据连接操作时,开发者需要注意选择合适的方法。 - **LEFT OUTER JOIN**: ``` SELECT tags.[tagid] FROM ...
- **简化语法**:可以简化`inner join`和`left outer join`的写法。 - 示例:`from Cat as cat join cat.mate as mate left join cat.kittens as kitten`。 - **fetch连接**:用于在一次查询中同时初始化相关联的...
2. **左外连接(LEFT OUTER JOIN)**: 左外连接返回左表(在`LEFT JOIN`之后指定的表)的所有行,即使在右表中没有匹配的行。对于左表中没有匹配的行,右表的字段将填充为NULL。在上述例子中,当`a.id`不等于`b....
虽然这种写法仍然有效,但Oracle 9i及以后的版本推荐使用outer join语法,因为其更清晰,可读性更强。 在实际应用中,连接查询是数据分析师和数据库管理员的重要工具,用于合并和分析来自不同数据源的数据。正确...
理解On和Where筛选器的区别对于编写正确的SQL查询至关重要,尤其是在处理Outer Join时。误用可能导致数据筛选不准确,进而引发程序错误。因此,开发人员需要深入理解这两个筛选器的不同,以便在实践中避免不必要的...
3. 外连接查询:`LEFT OUTER JOIN`会返回左表(本例中是`student`表)的所有记录,即使在右表(`score`表)中没有匹配的记录。因此,如果有10行`student`数据而6行`score`数据,结果会有10条记录,选项C正确。 4. ...
3. **OUTER JOIN:** 如果指定了 OUTER JOIN,则将保留表中未找到匹配的行作为外部行添加到VT2,生成VT3。 4. **WHERE:** 应用WHERE筛选器进一步筛选VT3,生成VT4。 5. **GROUP BY:** 将VT4分组,生成VT5。 6. **WITH...
在某些情况下,如果源表中存在目标表中没有的记录,我们可以使用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查询中,外连接(Outer Join)是一种重要的联接类型,它允许返回所有左侧或右侧表中的记录,即使在连接条件下没有匹配的记录。然而,当使用外连接时,放置过滤条件的位置对查询性能有着显著的影响。在这个案例...
常见的JOIN类型有INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN,根据需求选择合适的联接方式。 11. **MySQL的分区和分表有什么区别?** 分区是将大表分成更小、更易管理的部分,每个部分都在同一个表中。...
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 ...