左外连接和连接有什么区别?

时间:2014-09-09 04:25:23

标签: sql

在下面的查询中我使用了join(我需要得到所有的学生Zypcoins)

select a.strAssociateId, 
a.strAssociateName, 
a.strPhoto, 
isnull(sum(iCount),0) as zypcoins
from CIOChallenge_tbl_Associates a 
join CIOChallenge_tbl_AssociatePoints ap 
on
a.strAssociateId=ap.strAssociateId
and
ap.iRewardId=1
where iRoleId=(select iRoleId from CIOChallenge_tbl_Roles where strRoleDescription like           '%student%')
group by a.strAssociateId, 
a.strAssociateName, 
a.strPhoto

这里我使用了左外连接

select a.strAssociateId, 
a.strAssociateName, 
a.strPhoto, isnull(sum(iCount),0) as zypcoins
from CIOChallenge_tbl_Associates a 
left outer join CIOChallenge_tbl_AssociatePoints ap 
on
a.strAssociateId=ap.strAssociateId
and
ap.iRewardId=1
where iRoleId=(select iRoleId from CIOChallenge_tbl_Roles where strRoleDescription like '%student%')
group by a.strAssociateId, 
a.strAssociateName, 
a.strPhoto

我能否知道上述两个查询之间的区别是否有其他方法可以让学生获得zypcoins

1 个答案:

答案 0 :(得分:1)

我从这里了解了JOINS http://www.w3schools.com/sql/sql_join.asp。您还可以应用一些示例并对其进行测试。作为一般答案。

JOIN - 获取已加入的两个表(或子类)中的行

LEFT OUTER JOIN ( LEFT JOIN ) - 获取左表(子查询)中的所有行以及第二个表(子查询)中没有匹配的行插入null。

RIGHT OUTER JOIN ( RIGHT JOIN ) - 获取右表(子查询)中的所有行,对于第一个表(子查询)中没有匹配的行,它会插入null。

FULL OUTER JOIN ( FULL JOINS ) - 从两个表中获取所有数据,并在第一个或第二个表中没有匹配的地方添加null。

事实上总是使用条件来加入PK / FK或intexed列,它会使你的查询更快。