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-03 16:49:19
上一篇:
C# 常用函数集锦
下一篇:
office 2007、2010提示错误“此错误通常是由宏安全性设置造成”
怡海软件:ERP选型需要关注的几点?
Adopt Open JDK官方文档(五) Docker镜像
6个大数据处理分析的最好工具
互联网大型应用软件架构设想与推荐
Eclipse中编译Android项目工程失败,提示: Error in an XML file: aborting build 解决办法
Ubuntu Redmine安装配置
Android开发7——android.database.CursorIndexOutOfBoundsException:Index -1 requested, with a size of 1
(cljs/run-at (JSVM. :browser) "命名空间就这么简单")
双11数据大屏背后:大规模流式增量计算及应用(附资料)
我的技术之道