您的位置:首页 > 其它

多表连接时关于连接条件涉及到的Where 和And 问题

2010-11-10 15:34 204 查看
create table student
( [name] varchar(10),
class int
)
--往表Student中插入2条数据
insert into student values('Tom',1)
insert into student values('Jim', 2)
--建立score表
create table score
(
[name] varchar(10),
subject varchar(10),
scores int
)
--往表score中插入3条数据
insert into score values('Tom','Chinese', 100)
insert into score values('Tom','Math',99)
insert into score values('Jim','Math',80)
---选择两表数据
select * from student
select * from score

select a.[name],a.[class],b.[subject],b.[scores] from student a
left outer join score b on a.[name] = b.[name]
where (b.[subject] ='Chinese'or b.[subject] is null) -----此处使用的Where

select a.[name],a.[class],b.[subject],b.[scores] from student a left outer join score b on a.[name] = b.[name]
and (b.[subject] ='Chinese'or b.[subject] is null)

问题出现了吧 对于Where 和And 的使用不同 其结果就不同那么实质在哪里呢?CTRL+L 观察
对于Sql1-->首先执行 两个表的扫描,其次 执行嵌套查询Left Join 最后在利用筛选器执行Where 条件
对于Sql2-->执行两表查询,但是此处查询B表时却有了个条件限制B.id is Null 即在表B扫描时就把NULL的数据求出
--,然后是嵌套查询Left Join,此处没有筛选器(因为没有了Where 条件)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: