sql多表查询中,Where 和 On的作用非常重要,下面我就来讲讲sql多表查询的技巧。

在了解sql多表查询中Where 和 On的秘密之前,让我们先来温习一下连接基础吧

按列a把两表连接,请问各种连接方式的结果的结果?

 

语法呢?

    select * from @a Aa left join @b Bb on Aa.a=Bb.a

    select * from @a Aa right join @b Bb on Aa.a=Bb.a

    select * from @a Aa join @b Bb on Aa.a=Bb.a

完全       select * from @a Aa full join @b Bb on Aa.a=Bb.a

迪卡尔    select * from @a,@b

是不是很简单呢,接下来我们来看sql多表查询中Where On的秘密:)

大家想想,依据下表

下面语句出来的结果是什么?

 

select * from @a _a left join @b _b on _a.id=_b.id where _b.name=1

select * from @a _a left join @b _b on _a.id=_b.id and _b.name=1

 先想想,再看结果吧^_*

sql多表查询中Where On的秘密SQLserver 中的执行顺序是: joinwhere

所以,当条件写在where里,结果如下:

 

 条件写在on里,结果如下:

Where On是不是很有趣,你也试试吧!

 

下一个

请说出下面语句各返回多少记录

select * from @a a left join @b b on a.id=b.id where a.id=1

select * from @a a left join @b b on a.id=b.id and b.id=1

select * from @a a left join @b b on a.id=b.id and a.id=1

select * from @a a left join @b b on a.id=1

先想想,再看答案:P

        select * from @a a left join @b b on a.id=b.id where a.id=1

 

        原因是先执行连接条件,再执行where部分,所以只有1条记录

 

        select * from @a a left join @b b on a.id=b.id and b.id=1

 

        原因是满足a.id=b.id and a.id=1 条件的只有一条,left join是对没有附和条件的加null处理,所以最后结果是3

 

        select * from @a a left join @b b on a.id=b.id and a.id=1

 

        原因是满足a.id=b.id and a.id=1 条件的只有一条,left join是对没有附和条件的加null处理,所以最后结果是3

 

        select * from @a a left join @b b on a.id=1

 

        原因是在做完迪卡尔后,满足a.id=1 条件的有3,left join是对没有附和条件的加null处理,所以最后结果是5

sql多表查询之一:Where 和 On的秘密就介绍到这里,是不是很有趣呢,有不明白的地方欢迎大家留言讨论。

下一期我们将介绍sql多表查询之二:不等连接与子查询,千万不要错过哦!

posted on 2009-07-27 15:39  LanrenXuan  阅读(1817)  评论(0编辑  收藏  举报