Sql 在何处嵌套查询
我有一个6元组的产品表Sql 在何处嵌套查询,sql,Sql,我有一个6元组的产品表 select productprice from product 给出6个元组 100 70 15 90 150 250 我有一个问题: SELECT productprice FROM product WHERE productprice < (SELECT AVG(productprice)FROM product); 如果我这样做 SELECT productprice FROM product WHE
select productprice
from product
给出6个元组
100
70
15
90
150
250
我有一个问题:
SELECT productprice
FROM product
WHERE productprice < (SELECT
AVG(productprice)FROM product);
如果我这样做
SELECT productprice
FROM product
WHERE (SELECT avg(productprice)
FROM product) > 100
然后我得到:
100
70
15
90
150
250
为什么会这样?为什么在最后一个查询中忽略了该条件?不管条件如何,它仍然返回所有元组。条件不会被忽略,只是与主查询无关。 子查询SELECT AVGcFROM表1返回一个标量值,外部查询不会以任何方式影响该标量值 在前两个示例中,您将该标量值与外部查询中表的一列进行了比较,这就是它影响结果的原因
在上一个查询中,您将其与一个常量值进行了比较——因此,如果c列的平均值大于您使用的常量值2,则外部查询将返回表中的所有行。如果将>更改为,则最终查询中的选择与行的内容无关 在前面的查询中,您将该行的c值与平均值进行比较,这将在逐行的基础上有所不同 在上一个查询中,您正在选择所有行c值的平均值大于100的位置。您将获得所有行或无行,这取决于平均值是否大于100。在这种情况下,平均值是112.5,因此where子句实际上是where 112.5>100,这对于所有行都是正确的
要获取行数据的子集,需要选择行上不同的某些条件。例如,其中c>100将只返回两行150和250 谢谢!我也期待着同样的事情,但结果有点奇怪。我用一个真实的例子编辑了我的文章。是的,所有行的平均值是112.5,所以你的最后一个查询是显示112.5>100的任何行,这对所有行都适用,所以你得到了所有行。WHERE子句中没有根据各行中的数据进行选择的内容,因此您将获得全部或全部。将>反转为<,则不会得到任何行。要获得数据的子集,您的选择标准需要基于每行中的数据,而不是像average这样的数据集范围的聚合。谢谢。我用真实的数据编辑了我的文章。我还不清楚。看来情况没有什么影响。哦。。我得到了它。。条件112.5>100为真。这不是平均价格的比较。谢谢比较平均价格,只是计算整个表的平均价格,然后与硬编码值进行比较。如果将其与外部查询中的列进行比较,则可能会影响返回的行数。因为它是和一个常数比较的,所以它实际上是一个全有或全无的条件。