惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
Martin Fowler
Martin Fowler
MongoDB | Blog
MongoDB | Blog
博客园 - Franky
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Security Blog
Microsoft Security Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园_首页
腾讯CDC
D
Docker
The Cloudflare Blog
量子位
爱范儿
爱范儿
L
LangChain Blog
博客园 - 三生石上(FineUI控件)
博客园 - 司徒正美
aimingoo的专栏
aimingoo的专栏
Blog — PlanetScale
Blog — PlanetScale
Jina AI
Jina AI
Apple Machine Learning Research
Apple Machine Learning Research
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
Vercel News
Vercel News
MyScale Blog
MyScale Blog

博客园 - NanKe Sir's Blog

设置RDLC报表参数 - NanKe Sir's Blog 用SQL语句查询累计值 C#调用存储过程通用类3 Winform控件拖动 TreeView查找 在 DataGridView 中实现类似 Ctrl + F 的查找功能 正则表达式使用 Collapsing margins CSS基础 打开 mdi 窗体的子窗体 从绑定了数据源的 ListBox 中删除多个选定项 计算24点代码javascript 对数据库表进行简单的增删改查操作的通用类 C#存储过程调用 我为什么憎恨Framework SQL选择所最近一条记录 Sql Server 日期格式转换 INSERT INTO SELECT FROM 的用法 无法将输入 xml 文件内容转换为数据集
SQL连接查询AND和WHERE的不同
NanKe Sir's Blog · 2008-09-19 · via 博客园 - NanKe Sir's Blog

如下两张表:
表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
-----------