为什么以下连接查询返回不同的结果?

时间:2014-03-10 06:25:31

标签: sql

第一次查询 - select * from a full outer join b on a.x = b.y where b.y = 10

第二次查询 - select * from a full outer join b on a.x = b.y and b.y = 10

考虑这些表格扩展名:

 Table a Table b
 ======= =======

 x       y
 -----   -----
 1       2
 5       5
 10      10

第一个查询将返回:

 10 10

并且,第二个查询将返回:

 1 NULL
 5 NULL
 10 10

你能否详细告诉我原因?

3 个答案:

答案 0 :(得分:2)

第二个查询在ON部分中具有条件,因此即使在连接表中没有对,也包括所有记录。

第一个条件在WHERE部分中有条件,因此过滤掉了NULL

答案 1 :(得分:0)

第一个有一个where子句,所以只显示真实的结果(b.y = 10) 连接将显示所有resuts asits外连接

答案 2 :(得分:0)

第一个查询给出了预期的结果。

但是第二个查询的结果是不同的,因为您在两个条件(a.x = b.y and b.y = 10)上加入表。由于它是外连接,它将打印所有满足的值,NULL等输出。我创建了sql fiddle,以便您更好地理解