文档文档

子查询

InfluxDB 3 Core 处于公开 Alpha 阶段

InfluxDB 3 Core 处于公开 alpha 阶段,可用于测试和反馈,但不适用于生产环境。该产品和本文档都在不断完善中。我们欢迎并鼓励您提供关于 alpha 体验的输入,并邀请您加入我们的公共频道以获取更新并分享反馈。

Alpha 预期和建议

子查询(也称为内部查询或嵌套查询)是查询中的查询。子查询可用于 SELECTFROMWHEREHAVING 子句。

示例数据

本页上的查询示例使用以下示例数据集

子查询运算符

[ NOT ] EXISTS

EXISTS 运算符返回 相关子查询 为该行生成一个或多个匹配项的所有行。NOT EXISTS 返回 相关子查询 为该行生成零个匹配项的所有行。仅支持相关子查询

语法

[NOT] EXISTS (subquery)

[ NOT ] IN

IN 运算符返回给定表达式的值可以在 相关子查询 的结果中找到的所有行。NOT IN 返回给定表达式的值在子查询或值列表的结果中找不到的所有行。

语法

expression [NOT] IN (subquery|list-literal)

示例

查看使用查询的 IN 示例

查看使用列表字面量的 IN 示例

SELECT 子句子查询

SELECT 子句子查询使用从内部查询返回的值作为外部查询的 SELECT 列表的一部分。SELECT 子句仅支持 标量子查询,这些子查询在每次执行内部查询时返回单个值。返回的值对于每行可以是唯一的。

语法

SELECT [expression1[, expression2, ..., expressionN],] (<subquery>)

SELECT 子句子查询可以用作 JOIN 操作的替代方法。

示例

带有相关子查询的 SELECT 子句

FROM 子句子查询

FROM 子句子查询返回一组结果,然后由外部查询查询和操作。

语法

SELECT expression1[, expression2, ..., expressionN] FROM (<subquery>)

示例

查看 FROM 子句子查询示例

WHERE 子句子查询

WHERE 子句 子查询将表达式与子查询的结果进行比较,并返回 truefalse。从结果中过滤掉评估为 false 或 NULL 的行。WHERE 子句支持相关和非相关子查询,以及标量和非标量子查询(取决于谓词表达式中使用的运算符)。

语法

SELECT
  expression1[, expression2, ..., expressionN]
FROM
  <measurement>
WHERE
  expression operator (<subquery>)

WHERE 子句子查询可以用作 JOIN 操作的替代方法。

示例

带有标量子查询的 WHERE 子句

带有非标量子查询的 WHERE 子句

带有相关子查询的 WHERE 子句

HAVING 子句子查询

HAVING 子句 子查询将使用 SELECT 子句中聚合函数返回的聚合值的表达式与子查询的结果进行比较,并返回 truefalse。从结果中过滤掉评估为 false 或 NULL 的行。HAVING 子句支持相关和非相关子查询,以及标量和非标量子查询(取决于谓词表达式中使用的运算符)。

语法

SELECT
  aggregate_expression1[, aggregate_expression2, ..., aggregate_expressionN]
FROM
  <measurement>
WHERE
  <conditional_expression>
GROUP BY
  column_expression1[, column_expression2, ..., column_expressionN]
HAVING
  expression operator (<subquery>)

示例

带有标量子查询的 HAVING 子句

带有非标量子查询的 HAVING 子句

带有相关子查询的 HAVING 子句

子查询类别

SQL 子查询可以根据子查询的行为分为以下一个或多个类别

相关子查询

相关子查询中,内部查询取决于当前正在处理的行的值。

在下面的查询中,内部查询 (SELECT temp_avg FROM weather WHERE location = home.room) 取决于来自外部查询 (SELECT time, room, temp FROM home) 的数据 (home.room),因此是相关子查询。

SELECT
  time,
  room,
  temp
FROM
  home
WHERE
  temp = (
    SELECT
      temp_avg
    FROM
      weather
    WHERE
      location = home.room
  )

相关子查询性能

由于相关子查询取决于外部查询,并且通常必须为外部查询返回的每一行执行,因此相关子查询的性能低于非相关子查询。

非相关子查询

非相关子查询中,内部查询依赖于外部查询,并且独立执行。内部查询首先执行,然后将结果传递给外部查询。

在下面的查询中,内部查询 (SELECT MIN(temp_avg) FROM weather) 可以独立于外部查询 (SELECT time, temp FROM home) 运行,因此是非相关子查询。

SELECT
  time,
  temp
FROM
  home
WHERE
  temp < (
    SELECT
      MIN(temp_avg)
    FROM
      weather
  )

标量子查询

标量子查询返回单个值(一列一行)。如果没有返回行,则子查询返回 NULL。

下面的示例子查询返回指定列的平均值。此值是单个标量值。

SELECT * FROM home WHERE co > (SELECT avg(co) FROM home)

非标量子查询

非标量子查询返回 0 行、1 行或多行,每行可能包含 1 列或多列。对于每列,如果没有要返回的值,则子查询返回 NULL。如果没有符合返回条件的行,则子查询返回 0 行。

下面的示例子查询返回列中的所有不同值。返回多个值。

SELECT * FROM home WHERE room IN (SELECT DISTINCT room FROM home_actions)

此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像现在一样使用它,而无需对代码进行任何更改。

阅读更多

InfluxDB 3 开源版本现已发布公开 Alpha 版

InfluxDB 3 开源版本现已可用于 alpha 测试,并根据 MIT 或 Apache 2 许可获得许可。

我们正在发布两个产品作为 alpha 版本的一部分。

InfluxDB 3 Core 是我们新的开源产品。它是一个用于时间序列和事件数据的最新数据引擎。InfluxDB 3 Enterprise 是一个商业版本,它建立在 Core 的基础上,增加了历史查询功能、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始使用的更多信息,请查看