我一直都知道UNION
SQL 中的运算符,但直到最近才发现还有其他的集合运算符,INTERSECT
和EXCEPT
. 我一直无法找到执行第四大集合运算符的运算符,即对称差异(例如 . 的相反INTERSECT
)
看起来我可以通过使用类似的东西来获得所需的输出
SELECT Field FROM A UNION SELECT Field FROM B
EXCEPT
SELECT Field FROM A INTERSECT SELECT Field FROM B
Run Code Online (Sandbox Code Playgroud)
(假设我得到了正确的优先级),或者通过做一个反完全连接:
SELECT A.Field, B.Field
FROM A
FULL JOIN B ON B.Id = A.Id
WHERE B.Id IS NULL OR A.Id IS NULL
Run Code Online (Sandbox Code Playgroud)
但是这两个看起来都像是相当密集的查询,尤其是与其他三个基本的集合操作相比。SQL中是否存在对称差异操作而我在文档中找不到它?或者是否有一种“规范”的方式在 T-SQL 中实现它?
所有集合运算符都被转换为连接或类似连接的运算符。您可以在查询计划中见证这一点。
因此,您拥有的完整外部连接是您可以做的最有效的。当然,忽略这种情况(希望这种情况很少见):优化器选择了一个糟糕的计划,而重写碰巧运气好,性能更好。这总是可能发生的。
归档时间: |
|
查看次数: |
3858 次 |
最近记录: |