TSL语言基础 > SQL基础到TS-SQL > TS-SQL入门 > select查询语句 > join处理多表联接查询

Cross Join与Join    

  • 在进行表联接的时候,我们可能需要的是一个笛卡尔积,这种情况下我们可以采用cross join,这样可以得到多结果集所有行的完整排列组合。cross join不支持on语法,但是支持where子句。我们一样可以用cross join来替代join语句。
      R:=select [1].*,[2].["英语成绩"] from A join B on [1].["学号"]=[2].["学号"] end;
    可以用下面的语句替换:
      R:=select [1].*,[2].["英语成绩"] from A cross join B where [1].["学号"]=[2].["学号"] end;
      Cross join还有另外一种写法,就是用逗号“,”替换corss join:
      R:=select [1].*,[2].["英语成绩"] from A,B where [1].["学号"]=[2].["学号"] end;
      在这里,我们有一个疑问,就是既然cross join可以替代掉join的功能,那么他们两者的差异是什么呢?
      首先,是在语法上的差异,join必需有on子句,on子句之后还允许使用where子句二次查询,例如,我们可以用R:=select [1].*,[2].["英语成绩"] from A join B on [1].["学号"]=[2].["学号"] where [1].["英语成绩"]>80 end;来在联接的结果集的基础之上过滤掉英语成绩不大于80的。而cross join不支持on子句(可以有或者没有where子句)。
      其次,在使用的用途上,有差异。cross join是笛卡尔积,而join的本意是根据某些条件进行联接。
      再次,在效率上,Join具有优化的写法,而cross join则无法提高效率。