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

With On实现Join On的优化    

  • With on 是on语法的增强。
    一个On运算符在JOIN的时候的计算复杂度为两个运算的表的元素个数相乘,是一个N*M的复杂度。事实上,绝大多数JOIN是可以优化的。我们TSL里支持WITH ON语法,使得计算复杂度降低到N+M的关系

    在联接的时候,如果on的条件是一个或者多个等式约束的与,在这种时候,Join的本身可以被优化,TS-SQL为这种类型的优化提供了新的语法。则范例代码
    R:=select [1].*,[2].["英语成绩"] from A join B on [1].["学号"]=[2].["学号"] end;

    可以写成:
    R:=select [1].*,[2].["英语成绩"] from A join B with ([1].["学号"] on [2].["学号"]) end;

      假如有多个等式约束,那么把ON左边以及右边的多个表达式用逗号分隔开来。
      假定除了学号以外,还有一个班级号字段,联接的时候需要使用班级号和学号一起来作为联接的条件,上述的代码可以这么写:
      
    R:=select [1].*,[2].["英语成绩"] from A join B with ([1].["学号"],[1].["班级"] on [2].["学号"],[2].["班级"]) end;

      通过上述范例,with on的语法定义为:
      with(等式左表达式组 on 等式右表达式组)
      左右表达式组中的多个表达式用逗号“,”分隔。
      采用这种with on的语法可以把笛卡尔积的计算复杂度降低到线性复杂度(参与运算的两个表的大小之和)。