閱讀347 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

原文地址:點擊打開鏈接

SQL語句如下:

SELECT * 
FROM 表1  
LEFT JOIN 表2 ON 表1.id = 表2.id AND 表2.Name != 'ff'
WHERE 表1.NAME != 'aa' 

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



最後更新:2017-04-04 07:33:13

  上一篇:go VM啟動報錯Cannot open the disk,Failed to lock the file
  下一篇:go ssh、selinux、防火牆等啟動與停止命令