连接中的SQL子查询

时间:2017-08-10 19:58:01

标签: sql

以下两组代码的结果是否存在差异?

如果没有,我不明白为什么我的老师继续教查子查询。它们何时在基本SQL命令中有用?

Select soh.Total, c.*
From SalesLT.Customer As c
Inner join (select oh.CustomerID Sum(oh.TotalDue) As Total
From SalesLT.SalesOrderHeader As oh Group by oh.CustomerID
Having Sum(oh.totaldue) > 90000) As soh on c.CustomerID = soh.CustomerID

VS

Select A.*, C.*
From Sales as A inner join Customer as C on A.customerID=C.customerID
Group by A.CustomerID
Having Sum(C.totaldue) > 90000

2 个答案:

答案 0 :(得分:2)

有区别吗?好吧,显然。两者构造不同。

他们会产生相同的结果吗?显然不是。实际上,第二个将在几乎所有数据库中产生错误,因为A中的列未聚合。

此外,除非Customer只有两列,否则两个查询的列数可能会有所不同。

我建议你更努力地学习SQL。如果您的老师建议您需要了解子查询,那么这可能是因为它们是该语言的重要组成部分。

家庭作业:编写一个没有使用子查询的合理的第二个查询。

答案 1 :(得分:0)

子查询总是在性能和​​返回结果方面花费更多时间。 内连接提供了更快的方式来获取结果和处理查询。

因此,对于用户内部联接总是好的并且尽可能地避免子查询,它会影响执行时间。要测试更多信息,请尝试在查询面板中运行查询之前添加执行计划。

这将显示结果与执行时间的差异。