SQL在执行JOIN ON时,到底发生了什么?
点击关注上方“SQL数据库开发”,
设为“置顶或星标”,时间送达干货
测试环境
SQL Server 2017
测试样表
我们新建两张测试表Customers和Orders,表结构如下:
表Customers
表Orders
要求:查询每个客户的订单数量
我们先直接写出查询语句:
SELECT a.CustomerName,Count(OrderID) Nums
FROM Customers a
LEFT JOIN Orders b ON a.CustomerID=b.CustomerID
GROUP BY a.CustomerName
要搞清楚这个结果是怎么来的,我们需要先知道一个概念:笛卡尔积。
... Customers a LEFT JOIN Orders b ...
SELECT
B.CustomerID,
B.CustomerName,
A.OrderID,
A.CustomerID
FROM Orders A
CROSS JOIN Customers B
三值逻辑就是我们上面说到的ON返回的三个结果:TRUE,FALSE和UNKNOWN。
大多数的编程语言中返回的结果要么是TRUE,要么就是FALSE。而SQL中的UNKONWN通常与NULL值出现有关。
以下情况都会返回UNKNOWN:
NULL>21
NULL=NULL
X+NULL>Y
NULL代表一种缺失值,当把一个缺失值与其他任意值进行比较时,结果始终为UNKNOWN。
... a.CustomerID=b.CustomerID ...
参考文献
《Microsoft SQL Server 2008技术内幕:T-SQL查询》
荐书:《Oracle高性能系统架构实战大全》 编辑推荐: (1) 深入浅出:详解与 Oracle 数据库性能相关的方方面面,涵盖 Oracle 的体系架构及其背后的运行机制。
(2)直击难点:全面解析Oracle SQL 执行计划和Oracle SQL 性能分析与优化。
(3)全新实战:真实有效的实战案例再现Oracle数据库开发过程中的问题及解决思路。
(4)双管齐下:先设定方案,然后从应用角度和数据库角度综合考虑,逐一分析实现环境。如何购买: 点击阅读原文购买,也可点击下方小程序购买~
如何赠送:
1、必须是关注了本公众号的小伙伴
2、留言集赞数大于50赞且排名前五的小伙伴,每人赠送一本,定价128RMB。
3、截止2020年7月10日上午9:00
——End——
后台回复关键字:1024,获取一份精心整理的技术干货 后台回复关键字:进群,带你进入高手如云的交流群。 推荐阅读
SQL 语法速成手册
可怕,如果张东升是个程序员……
我只会SQL,到底能不能找到好工作呢? Oracle常用函数整理 MySQL常用函数整理 这是一个能学到技术的公众号,欢迎关注
相关文章