博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
表连接(JOIN)
阅读量:4050 次
发布时间:2019-05-25

本文共 1727 字,大约阅读时间需要 5 分钟。

----start

    了解表连接的人,大概都觉得它很简单。其实简单只是它的外表,如果没有深刻理解Join语句,稍不留神就会有逻辑错误,逻辑错误比语法错误更难发现。

    要想正确使用Join语句,有2个知识点是必须掌握的。

第一:SQL语句执行的顺序

 

第二:ON 和 WHERE 的区别:ON是用来定义连接条件的,WHERE用来过滤结果集

我们来看一个例子,请看如下表定义:

我们看一条查询语句:

如果你认为上面这条SQL语句不会返回任何结果的话,说明你还不清楚ON 和 WHERE的区别。再次声明:ON是用来定义连接条件的,而不会过滤结果集。

我们再看一个例子,假设现在让你查询一下所有的员工的姓名和部门名为市场部的部门,怎么查?如下:

如果你也写出上面的语句,那么你就错了,正确的写法应该是这样:

 

以上只是举了一个简单的例子,其实,使用JOIN的时候,还有好多这样的陷阱,如:在同一个语句中使用Inner Join和Outer Join的时候,应该特别注意。再如:多个表连接的时候,特别要注意连接条件,如:假设A、B、C三个表都有NO字段,以下2个语句可能产生截然不同的结果。

 

综上所述,使用 Join的时候特别容易出错,所以我们鼓励,如果需要多表连接时,尽量不使用JOIN,而使用将连接条件定义在WHERE子句中的查询,如:SELECT * FROM A,B WHERE A.NO=B.NO。但是,使用这种方式连接表时,也不是没有缺点,它很容易产生笛卡儿乘积,从而使结果集倍增,既使你指定了正确的连接条件,如果连接条件不唯一,也会产生局部笛卡儿乘积,如果这时使用分组统计,很可能产生不正确的结果,所以,也必须加倍小心。

---更多参见:

----声明:转载请注明出处。

----last updated on 2010.01.19

----written by ShangBo on 2010.01.19

----end

 

你可能感兴趣的文章
iOS7单元测试
查看>>
ios framework 通用库的制作
查看>>
出现( linker command failed with exit code 1)错误总结
查看>>
iOS开发中一些常见的并行处理
查看>>
iOS获取手机的Mac地址
查看>>
ios7.1发布企业证书测试包的问题
查看>>
如何自定义iOS中的控件
查看>>
iOS 开发百问
查看>>
Mac环境下svn的使用
查看>>
github简单使用教程
查看>>
如何高效利用GitHub
查看>>
GitHub详细教程
查看>>
Swift概览
查看>>
iOS系统方法进行AES对称加密
查看>>
程序内下载App,不用跳转到AppStore
查看>>
iOS应用崩溃日志分析
查看>>
获取手机系统大小、可用空间大小,设备可用内存及当前应用所占内存等
查看>>
IOS7 开发注意事项
查看>>
iOS开发~CocoaPods使用详细说明
查看>>
在xcode6中使用矢量图(iPhone6置配UI)
查看>>