sql语句如下:
步骤1:返回笛卡尔积(select * from 表1 cross join 表2)
步骤2:应用on筛选器(当前的条件为 表1.id = 表2.id and 表2.name != 'ff')
步骤3:添加外部行
这一步只对outer join起作用,如果是left join会以左边的表为保留表,如果是right join会以右边的表为保留表。所谓外部行是指,保留表中的行。即使第二步的on过滤掉了一些行,在这一步,会根据保留表添加第二步过滤掉的行。当前的例子,不存在这种情况。
步骤4:应用where筛选器(当前是name != ‘aa’)过滤前三步所生成虚拟表的数据。
总结:
如果sql用的是left join ,on后面的条件对left的表没有作用,只对right的表有过滤作用,where语句可以对left的表有过滤作用。
如果sql用的是right join ,on后面的条件对right的表没有作用,只对left的表有过滤作用,where语句可以对right的表有过滤作用。