以下两组代码的结果是否存在差异?
如果没有,我不明白为什么我的老师继续教查子查询。它们何时在基本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
答案 0 :(得分:2)
有区别吗?好吧,显然。两者构造不同。
他们会产生相同的结果吗?显然不是。实际上,第二个将在几乎所有数据库中产生错误,因为A
中的列未聚合。
此外,除非Customer
只有两列,否则两个查询的列数可能会有所不同。
我建议你更努力地学习SQL。如果您的老师建议您需要了解子查询,那么这可能是因为它们是该语言的重要组成部分。
家庭作业:编写一个没有使用子查询的合理的第二个查询。
答案 1 :(得分:0)
子查询总是在性能和返回结果方面花费更多时间。 内连接提供了更快的方式来获取结果和处理查询。
因此,对于用户内部联接总是好的并且尽可能地避免子查询,它会影响执行时间。要测试更多信息,请尝试在查询面板中运行查询之前添加执行计划。
这将显示结果与执行时间的差异。