sutdent:
姓名 | 班级 |
张三 | 一班 |
李四 | 二班 |
score:
姓名 | 科目 | 分数 |
张三 | 语文 | 80 |
张三 | 数学 | 90 |
李四 | 数学 | 100 |
如下语句:
select a.[姓名]
,a.[班级]
,b.[科目]
,b.[分数]
from student a
left outer join score b on a.[姓名] = b.[姓名]
where (b.[科目] = 语文or b.[科目] is null) -----此处使用的Where
结果将为:
姓名 | 班级 | 科目 | 分数 |
张三 | 一班 | 语文 | 80 |
而其实我们结果是想要为:
姓名 | 班级 | 科目 | 分数 |
张三 | 一班 | 语文 | 80 |
李四 | 二班 | NULL | NULL |
以下语句可以得到上面的结果:
select a.[姓名]
,a.[班级]
,b.[科目]
,b.[分数]
from student a
left outer join score b on a.[姓名] = b.[姓名] and b.[科目] =语文 ---此处使用的是and
我们可以看到外连接,还是必须要小心使用的,否则结果会出乎意料。
关于Where 和And 查询效率问题参考http://blog.youkuaiyun.com/zhvsby/archive/2008/11/26/3382243.aspx