天天看點

SQL語句Left join 中On和Where的用法差別

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的表有過濾作用。