相当于如下语句:
select a.*,b.* from emp a,depart b;
需要注意的是交叉连接后只能跟where,不可以跟on。
如下语句是错的:
select a.*,b.* from emp a cross join depart b on a.depart=b.dpno;
要修改为这样的才正确:
select a.*,b.* from emp a cross join depart b where a.depart=b.dpno;
一般来讲,在大表关联的时候,建议使用inner join或者left join,不建议使用cross join或者where
比如:
select a.*,b.* from emp a,depart b where a.depart=b.dpno ; A ---不推荐
select a.*,b.* from emp a cross join depart b where a.depart=b.dpno ; B ---不推荐
select a.*,b.* from emp a inner join depart b on a.depart = b.dpno; C ----推荐
这是因为A,B中,sql需要先对两表生成笛卡尔积,然后才根据where后的条件进行判断,而使用C则不需要。所以C较有效率
摘自 猫叔的口粮