探讨使用外联接(OUTER JOIN)联接两表时容易忽略的一个小问题
来源:互联网 发布:在linux上面安装jira 编辑:程序博客网 时间:2024/05/09 22:10
文章使用的实例表
表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。
总结
小知识点,但是很容易被忽略,望大家引起注意哦。
- 探讨使用外联接(OUTER JOIN)联接两表时容易忽略的一个小问题
- SQL 联接--->左向外联接 (左外联接 ..left outer join..on)
- SQL 联接--->右向外联接 (右外联接 ..right outer join..on)
- SQL 联接--->完整外联接 (完整外部联接 ..full outer join..on)
- 内联接外联接全联接join的用法
- Bitmap使用容易被忽略的一个小问题点
- SQL中表的联接(内联接,左联接,右联接,外联接,交叉联接)
- SQL常用四种联接-内联接、左外联接、右外联接和全联接的使用
- 一个容易忽略的问题
- 关于JVM一个容易被忽略的小问题
- 有关view事件传递容易忽略的一个小问题
- 使用Linq扩展方法时容易忽略的小问题
- 8.2.1.12 Outer Join Simplification 外联接简化
- 关于MySql 4.0.12左联接left outer join的一些问题
- 数据库的内联接、外联接
- 一个容易忽略的优先级问题
- join联接查询--SQL中 inner join、 left join 、right join、 outer join之间的区别
- git使用容易忽略的问题
- Android crash特殊位置定位
- svn常用命令
- window7使用QC问题解决
- error C3861: 'round': identifier not found
- Android使用ListView
- 探讨使用外联接(OUTER JOIN)联接两表时容易忽略的一个小问题
- 国际化
- leetcode: Valid Parentheses
- 交叉编译提示arm-linux-gcc no such filr or directory解决
- 矩阵求逆的快速算法
- hw 9.14
- 高内聚、低耦合是软件设计时追求的目标(杂谈)
- 数组大折腾(任务3)
- WPF之路——StackPanel布局(堆栈面板)