SQL语义对等:{full,left,right}联接成true =内部联接成true?

时间:2018-11-13 06:36:24

标签: sql postgresql join

两个SQL语句是否等效?

  1. select * from tb1 {full, left, right} join tb2 on true
  2. select * from tb1 inner join tb2 on true

我认为这两个陈述是等效的。但是在PostgreSQL中,它不进行转换。我不知道其他数据库还能做什么。还是有我不考虑的情况?

1 个答案:

答案 0 :(得分:0)

这些构造不相同

select *
from tbl1 inner join
     tbl2
     on true;

和:

select *
from tbl1 left join
     tbl2
     on true;

在大多数情况下,两者都执行CROSS JOIN。但是,tbl2没有行时会有所不同。

tbl2没有行时,INNER JOIN版本不返回行。 LEFT JOIN版本从第一个表返回行,第二个表返回NULL个值。

RIGHT JOINFULL JOIN与空表具有类似的行为。