探讨使用外联接(OUTER JOIN)联接两表时容易忽略的一个小问题
2013-11-26 19:49
381 查看
文章使用的实例表
表1 班级表
![](https://oscdn.geek-share.com/Uploads/Images/Content/201311/93de4e7262f05e3df1cc05d5a6057ca4)
表2 学生表
![](https://oscdn.geek-share.com/Uploads/Images/Content/201311/c72895c9d54d4b0ed313deafb7c67159)
文章探讨问题说明
请说出下面两组查询的结果是什么?
查询1
查询2
注:本文以左外联接为例。
问题解答
查询1与查询2仅一词之别,查询1中的“where”在查询2中变成了“and”。形式上的差别不大,但是返回结果却相差很大。下面给出查询结果。
查询1结果
![](https://oscdn.geek-share.com/Uploads/Images/Content/201311/e281a31ce4f7ea122bf4b8a0647eea2d)
查询2结果
![](https://oscdn.geek-share.com/Uploads/Images/Content/201311/e62d66785ba004ee39a794802ab7aa93)
从查询结果,可以看出:
查询1先用tb_Class表左联接tb_Student表,再在联接后的结果中筛选出“b.score<=90”的记录;
查询2先从tb_Student表中筛选出“b.score<=90”的记录,再用tb_Class表与其进行左连接操作。
说点别的
下面,再来补充说明一下另外一个容易被忽视的小问题。
直接给出SQL脚本,你能直接说出最终查询得的记录的条数吗?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201311/56b14317ab020db988f08ce79de7055b)
为什么呢?
原因出在a.ID=1。
总结
小知识点,但是很容易被忽略,望大家引起注意哦。
表1 班级表
表2 学生表
文章探讨问题说明
请说出下面两组查询的结果是什么?
查询1
select * from tb_Class a left join tb_Student b on a.classid=b.classid where b.score<=90
查询2
select * from tb_Class a left join tb_Student b on a.classid=b.classid and b.score<=90
注:本文以左外联接为例。
问题解答
查询1与查询2仅一词之别,查询1中的“where”在查询2中变成了“and”。形式上的差别不大,但是返回结果却相差很大。下面给出查询结果。
查询1结果
查询2结果
从查询结果,可以看出:
查询1先用tb_Class表左联接tb_Student表,再在联接后的结果中筛选出“b.score<=90”的记录;
查询2先从tb_Student表中筛选出“b.score<=90”的记录,再用tb_Class表与其进行左连接操作。
说点别的
下面,再来补充说明一下另外一个容易被忽视的小问题。
直接给出SQL脚本,你能直接说出最终查询得的记录的条数吗?
declare @a table (id int not null, name nvarchar(3) not null, primary key(id)); declare @b table (id int not null, name nvarchar(3) not null, primary key(id)); insert into @a values(1,'a'),(2,'b'),(3,'c') insert into @b values(1,'a1'),(2,'b1'),(3,'c1') select * from @a a left join @b b on a.id=1执行结果是:
为什么呢?
原因出在a.ID=1。
总结
小知识点,但是很容易被忽略,望大家引起注意哦。
相关文章推荐
- Bitmap使用容易被忽略的一个小问题点
- 重叠I/O网络编程使用AcceptEx时容易忽略的一个问题
- 有关view事件传递容易忽略的一个小问题
- 一个容易被忽略的ReportingService超时问题
- 在Silverlight程序中使用Thread一个很容易被忽略的问题
- 使用时容易忽略SQL Server的21个问题
- 使用SQL Server Business Intelligence Development Studio 2005设计报表模型时的一个容易被忽视的问题
- 使用时容易忽略SQL Server的21个问题
- 一个容易忽略的优先级问题
- 使用Linq扩展方法时容易忽略的小问题
- could not execute query 项目中使用使用Hibernate作为持久层框架时,数据库改名后容易忽略的问题
- iOS9以下版本使用WKWebView加载本地HTML文件不显示,处理时容易忽略的问题
- 使用SQL Server Business Intelligence Development Studio 2005设计报表模型时的一个容易被忽视的问题
- 关于指向结构体的指针——又一个指针用法中容易忽略的问题
- 关于JVM一个容易被忽略的小问题
- Anjuta IDE 下调试程序容易忽略的一个问题
- 使用JNDI的一个容易忽略的错误
- 使用时容易忽略SQL Server的21个问题
- 使用JNDI的一个容易忽略的错误
- Hibernate中1对多关联使用中容易犯错误的一个问题