300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 关于SQL Server中left join on and 用法的介绍

关于SQL Server中left join on and 用法的介绍

时间:2018-12-08 08:51:27

相关推荐

关于SQL Server中left join on and 用法的介绍

一般情况下,SQL语句的执行顺序如下所示:

(1)from(2)on(3)join(4)where(5)group by(6)having(7)select(8)distinct(9)union(10)order by

从SQL语句执行顺序的这个角度,我们可以很好的理解left join on and的用法。

以SQL Server为例,先创建两个测试表ta和tb:

--创建测试表tacreate table ta(ida int);--向测试表ta中插入测试数据insert into tavalues(1),(2),(3),(4);--创建测试表tbcreate table tb(idb int,state nvarchar(10));--向测试表tb中插入测试数据insert into tbvalues(1,'001'),(2,'001'),(3,'002'),(4,'003');

比较on后有无and的查询结果:

--on后无andselect * fromta left join tbon ta.ida=tb.idb

--on后有andselect * fromta left join tbon ta.ida=tb.idband tb.state='001'

因为tb表中没有idb等于3且state为'001'的行,和idb等于4且state为'001'的行,所以ta表中ida等于3的行和ida等于4的行会匹配到两行NULL值。

下面,我们再创建一个测试表tc:

--创建测试表tccreate table tc(idc int,state nvarchar(10))--向测试表tc中插入测试数据insert into tcvalues(1,'001'),(1,'002'),(1,'003'),(2,'002'),(3,'001'),(3,'002');

再次比较on后有无and的查询结果:

--on后无andselect * fromta left join tcon ta.ida=tc.idc

--on后有andselect * fromta left join tcon ta.ida=tc.idcand tc.state='001'

如果ta表和tc表是一对多的关系,即ta表中的一行可能对应着tc表的多行,此时left join on后的and可以对tc表中满足on条件匹配的行做进一步的筛选。但由于是左连接,所以当on条件和and条件不能同时满足时,ta表中的行会匹配到列值全为NULL的行,如上述查询结果中,ta表ida等于2的行。

如果我们不想让ta表中的行匹配到NULL值行,可以使用where子句,或者将left join换成inner join:

使用where子句:where子句是对ta表和tc表left join后的结果做进一步的筛选

select * fromta left join tcon ta.ida=tc.idcwhere tc.state='001'

使用inner join:inner join on 后的and是对tc表中满足on条件的行做进一步的筛选,然后ta表再与筛选结果进行inner join

select * fromta inner join tcon ta.ida=tc.idcand tc.state='001'

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。