SQL连接查询AND和WHERE的不同

如下两张表:
表A 表B
--- ---
 F  F
--- ---
 A  A
 B  B
 C  F
 D  G
 E  H
--- ---

WHERE:

SELECT  A.F  AS  FA, dbo.B.F  AS  FB 
FROM  dbo.A  LEFT   OUTER   JOIN  dbo.B  ON  dbo.A.F  =  dbo.B.F
WHERE  A.F  =   ' A '

-----------
FA FB
-----------
A A
-----------

AND:

SELECT  A.F  AS  FA, dbo.B.F  AS  FB 
FROM  dbo.A  LEFT   OUTER   JOIN  dbo.B  ON  dbo.A.F  =  dbo.B.F
 
AND  A.F  =   ' A '

------------
FA FB
------------
A A
B null
C null
D null
E null
------------

可以看出使用 WHERE 条件会筛选连接查询的结果,但不影响返回的右表字段值;
使用 AND 不会对结果进行筛选,结果一定是包含了所有的左表记录,但是会影响
返回的右表字段值,如果 ON 后面的逻辑判断返回 true 显示右表值,为 false 则显示 null。

SELECT  A.F  AS  FA, dbo.B.F  AS  FB 
FROM  dbo.A  LEFT   OUTER   JOIN  dbo.B  ON  dbo.A.F  =  dbo.B.F  AND   1   =   1

FA FB
------------
A A
B B
C null
D null
E null
------------

SELECT  A.F  AS  FA, dbo.B.F  AS  FB 
FROM  dbo.A  LEFT   OUTER   JOIN  dbo.B  ON  dbo.A.F  =  dbo.B.F  AND   1   =   2

FA FB
------------
A null
B null
C null
D null
E null
------------

如果是 INNER JOIN, WHERE 和 AND 效果相同。

SELECT  A.F  AS  FA, dbo.B.F  AS  FB 
FROM  dbo.A  INNER   JOIN  dbo.B  ON  dbo.A.F  =  dbo.B.F
WHERE  A.F  =   ' A '   /   AND  A.F  =   ' A '

-----------
FA FB
-----------
A A
-----------

转载于:https://www.cnblogs.com/JoeDZ/archive/2008/09/19/1293961.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值