为何选择' ON'左外连接中需要子句

时间:2018-06-09 17:18:58

标签: sql join syntax left-join outer-join

据我所知,在两个表之间的左外连接(例如a& b)中,无论右表中行的值如何,都会检索连接左侧表的所有行。那为什么我们需要一个' ON'指定条件的子句,如下所示:

select * from a LEFT OUTER JOIN b on a.some_column1 = b.some_column2;

为什么需要声明" a.some_column1 = b.some_column2"。

3 个答案:

答案 0 :(得分:5)

left join将返回表a中的所有行,并且对于每一行,表b中的匹配行(如果存在) - 如果不存在,则{{1将返回s而不是null列。 b子句定义了匹配的完成方式。

答案 1 :(得分:1)

  

据我所知,在两个表之间的左外连接(例如a& b)中,无论右表中行的值如何,都会检索连接左侧表的所有行。

这是正确的,因为它说的是left join on返回的内容,但它不是它返回的definitionleft join on返回inner join on行加上(union all)由空值扩展的不匹配的左表行。

inner join on返回满足cross join条件的on行 - 这可能是列上的任何条件。 cross join返回左表格中的一行的每个组合。右表中的一行。

如果没有outer join,您期望on是什么意思?在标准SQL outer& inner join必须有oninner join on真实条件与cross join相同。哪个没有不匹配的左表行。因此,如果您希望outer join没有on表示outer join on真实条件,那么inner join {{1}中没有不匹配的行那个条件,结果也只是on。 (MySQL允许在没有cross join的情况下使用inner join,但它只是意味着on。)

答案 2 :(得分:0)

由于您是"加入",因此需要on子句,并且您需要告知要加入的列。否则,您将对所有可能的行组合使用传统的from,而不使用任何where条件。但你想要加入,对吗?

是的,这几乎就是这样。