两个SQL语句是否等效?
select * from tb1 {full, left, right} join tb2 on true
select * from tb1 inner join tb2 on true
我认为这两个陈述是等效的。但是在PostgreSQL中,它不进行转换。我不知道其他数据库还能做什么。还是有我不考虑的情况?
答案 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 JOIN
和FULL JOIN
与空表具有类似的行为。