Sql 如何证明子查询是必要的?

Sql 如何证明子查询是必要的?,sql,subquery,relational-database,Sql,Subquery,Relational Database,我被告知,这个问题不能用RDB中的标准select from where查询来回答,但我必须使用子查询,即select from where select….排序语句。。。。相反我希望您能解释或提及这种影响,或者,如果适用的话,请予以反驳 牛肉:我有一张表,其中包括可用的出租房产和每套房产的租金。我希望获得清单中租金最低的一组房产作为输出。获得答案的一种方法是: 从表中选择propertyId,rentalprice,其中rentalprice=从表中选择minrentalprice 这回答了这

我被告知,这个问题不能用RDB中的标准select from where查询来回答,但我必须使用子查询,即select from where select….排序语句。。。。相反我希望您能解释或提及这种影响,或者,如果适用的话,请予以反驳

牛肉:我有一张表,其中包括可用的出租房产和每套房产的租金。我希望获得清单中租金最低的一组房产作为输出。获得答案的一种方法是:

从表中选择propertyId,rentalprice,其中rentalprice=从表中选择minrentalprice

这回答了这个问题,但是,为什么这个问题不能通过单个查询(即不使用子查询)来回答,有没有很好的理由?我知道minrentalprice选择一组具有最低租赁价格的特定行值,然后输出中的PropertyId由一组具有最低价格的PropertyId组成,但是我想不出一个好的理由来解释为什么这个问题不能通过一个查询来回答。我想这最终是一个问题,在关系代数中什么可以做,什么不能做?
谢谢。

以下是无需子查询即可完成的方法

SELECT t1.propertyId, t1.rentalprice
FROM tbl t1
LEFT OUTER JOIN tbl t2
ON t2.rentalprice < t1.rentalprice
WHERE t2.rentalprice IS NULL;
我相信已经有人声称,而且有时还假设SQL子查询在语言中是多余的,因为它们总是可以被连接代替。通常情况可能就是这样。另一方面,自SQL-99以来,标准SQL中添加了许多新的扩展,SQL DBMS中存在许多非标准特性,我对此不太自信。考虑到标准SQL中有许多不确定或未定义的东西,并且它的许多特性缺乏数学基础,我甚至不相信这两种方法都能真正证明它。SQL不是关系型的,因此关系代数对回答您的问题没有多大帮助


*请注意,这并不意味着派生表,即出现在另一个查询的FROM部分的查询是多余的。

My Think process:1。你想要最低价格。好的,选择minrentalprice 2。你还想知道房地产ID。但是,当您将其添加到select语句中时,它会抱怨并要求您按聚合函数中未使用的任何列进行分组。但是,按propertyId分组并不能给出表中的最低价格。我想不出用一个查询就能做到这一点。除了子查询之外,您还可以使用self-join或set-variable,但这两种查询都需要第二次查询。您已经了解了查询的功能-它首先查找一个问题的答案,即最低租金是多少,然后使用该答案查找匹配的行。不清楚你还想知道什么。这是两个问题。一个查询如何回答两个问题?英语可以让你把它们塞进一个问题,但它们不是。谢谢你们,请给我一些时间阅读。@RossPresser-一个问题怎么能回答两个问题?-从rentalprice不为空的表中轻松选择带有TIES*的TOP 1,这不是标准SQL,但这里没有什么不可能的。您是非常正确的,正如@sqlvogel一样。我应该仔细考虑一下。谢谢,请给我一些时间充分消化。