【问题标题】:SQL queries, can't figure out how this query can workSQL 查询,无法弄清楚这个查询是如何工作的
【发布时间】:2023-02-11 23:35:42
【问题描述】:

你怎么能select max(table column),并在 from 子句上声明另一个表列?这没有任何意义 - 谁能解释一下?

SELECT 
    Ord.SalesOrderID, Ord.OrderDate,
    (SELECT MAX(OrdDet.UnitPrice)        
     FROM Sales.SalesOrderDetail AS OrdDet         
     WHERE Ord.SalesOrderID = OrdDet.SalesOrderID) AS MaxUnitPrice
FROM 
    Sales.SalesOrderHeader AS Ord;

【问题讨论】:

  • 我认为您正在寻找相关的子查询

标签: sql inner-query


【解决方案1】:

sql SELECT 查询总是返回所谓的“记录集”,无论查询多么简单或花哨。例如,这将返回一个包含 2 列的“记录集”,但是表 BIRDS 中有许多行与名称“Bluebird”或“Cardinal”匹配:

SELECT NAME, COLOR FROM BIRDS WHERE NAME = ‘Bluebird’ OR NAME = ‘Cardinal’

现在,如果你想进一步缩小查询数据库的范围,sql 允许你“查询查询”,如果你想这样做的话:

SELECT * FROM (SELECT NAME, COLOR FROM BIRDS WHERE NAME = ‘Bluebird’ OR NAME = ‘Cardinal’) WHERE COLOR = ‘Blue’ OR COLOR = ‘Yellow’

^^^ 第二个查询使用第一个查询的记录集代替表。

这种“内部查询”称为“子查询”。

您还可以在单​​独的列中使用子查询,如下所示:

SELECT A.NAME, (SELECT AVG(POPULATION) FROM BIRDS B WHERE B.COLOR = A.COLOR) AVGPOP FROM BIRDS A

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多