SQL 逻辑运算符
InfluxDB 3核心正在进行公开测试
InfluxDB 3 Core 正在进行公开 alpha 测试,并可供测试和反馈,但不适合用于生产环境。产品和本文件都是进行中的工作。我们欢迎并鼓励您分享您对 alpha 版本的体验,并邀请您加入我们的公共频道以获取更新和分享反馈。
阿尔法预期和建议
- 在 alpha 期间,我们可能会进行重大更改,这需要您删除您的数据并重新开始。如果您使用的数据很重要,请在其他地方保存备份副本。
- 在 alpha 期间,我们在每次合并到 InfluxDB
main 分支时生成新构建。更改频繁,相关更新会发布到我们的公共频道。
逻辑运算符在SQL查询中结合或操作条件。
| 操作符 | 含义 | |
|---|
AND | 如果两个操作数都为真,则返回真。否则,返回假。 | |
BETWEEN | 如果左操作数在右操作数的范围内,则返回真。 | |
EXISTS | 如果子查询的结果不为空,则返回真。 | |
IN | 如果左操作数在右操作数字段列表中,则返回真。 | |
LIKE | 如果左操作数与右操作数模式字符串匹配,则返回true。 | |
NOT | 否定后续表达式。 | |
OR | 如果任何操作数为真,则返回真。否则,返回假。 | |
和
如果两个操作数都是 true,则 AND 操作符返回 true。否则,它返回 false。此操作符通常用于 WHERE 子句 中以组合多个条件。
SELECT true AND false AS "AND condition"
示例
AND运算符在WHERE子句中
SELECT *
FROM home
WHERE
co > 10
AND room = 'Kitchen'
| co | 湿度 | 房间 | 温度 | 时间 |
|---|
| 18 | 36.9 | 厨房 | 23.3 | 2022-01-01T18:00:00Z |
| 22 | 36.6 | 厨房 | 23.1 | 2022-01-01T19:00:00Z |
| 26 | 36.5 | 厨房 | 22.7 | 2022-01-01T20:00:00Z |
介于
如果左侧数字操作数在右侧操作数指定的范围内,则BETWEEN运算符返回true。否则,它返回false
SELECT 6 BETWEEN 5 AND 8 AS "BETWEEN condition"
示例
BETWEEN 运算符在 WHERE 子句中
SELECT *
FROM home
WHERE
co BETWEEN 5 AND 10
| co | 湿度 | 房间 | 温度 | 时间 |
|---|
| 7 | 36 | 厨房 | 22.4 | 2022-01-01T16:00:00Z |
| 9 | 36 | 厨房 | 22.7 | 2022-01-01T17:00:00Z |
| 5 | 35.9 | 客厅 | 22.6 | 2022-01-01T17:00:00Z |
| 9 | 36.2 | 客厅 | 22.8 | 2022-01-01T18:00:00Z |
存在
如果相关子查询的结果不为空,EXISTS运算符返回true。否则它返回false。
查看 SQL 子查询运算符。
示例
EXISTS 操作符与 WHERE 子句中的子查询
SELECT *
FROM
home home_actions
WHERE EXISTS (
SELECT *
FROM home
WHERE
home.co = home_actions.co - 1
)
ORDER BY time
| co | 湿度 | 房间 | 温度 | 时间 |
|---|
| 1 | 36.5 | 厨房 | 22.8 | 2022-01-01T13:00:00Z |
| 1 | 36.3 | 厨房 | 22.8 | 2022-01-01T14:00:00Z |
| 1 | 36.1 | 客厅 | 22.3 | 2022-01-01T15:00:00Z |
| 4 | 36 | 客厅 | 22.4 | 2022-01-01T16:00:00Z |
| 5 | 35.9 | 客厅 | 22.6 | 2022-01-01T17:00:00Z |
| 18 | 36.9 | 厨房 | 23.3 | 2022-01-01T18:00:00Z |
输入
如果左操作数在右操作数列表或子查询结果中,则 IN 运算符返回 true,否则返回 false。
SELECT 'John' IN ('Jane', 'John') AS "IN condition"
请参见 SQL 子查询运算符。
示例
IN 运算符与 WHERE 子句中的列表
SELECT *
FROM home
WHERE
room IN ('Bathroom', 'Bedroom', 'Kitchen')
LIMIT 4
| co | 湿度 | 房间 | 温度 | 时间 |
|---|
| 0 | 35.9 | 厨房 | 21 | 2022-01-01T08:00:00Z |
| 0 | 36.2 | 厨房 | 23 | 2022-01-01T09:00:00Z |
| 0 | 36.1 | 厨房 | 22.7 | 2022-01-01T10:00:00Z |
| 0 | 36 | 厨房 | 22.4 | 2022-01-01T11:00:00Z |
IN 运算符与 WHERE 子句中的子查询
SELECT *
FROM home
WHERE
room IN (
SELECT DISTINCT room
FROM home_actions
)
ORDER BY time
LIMIT 4
| co | 湿度 | 房间 | 温度 | 时间 |
|---|
| 0 | 35.9 | 客厅 | 21.1 | 2022-01-01T08:00:00Z |
| 0 | 35.9 | 厨房 | 21 | 2022-01-01T08:00:00Z |
| 0 | 35.9 | 客厅 | 21.4 | 2022-01-01T09:00:00Z |
| 0 | 36.2 | 厨房 | 23 | 2022-01-01T09:00:00Z |
像
如果左操作数与右操作数指定的字符串模式匹配,则LIKE运算符返回true。LIKE表达式支持SQL通配符字符。
SELECT 'John' LIKE 'J_%n' AS "LIKE condition"
在 WHERE 子句中的 LIKE 运算符
SELECT *
FROM home
WHERE
room LIKE '%Room'
LIMIT 4
| co | 湿度 | 房间 | 温度 | 时间 |
|---|
| 0 | 35.9 | 客厅 | 21.1 | 2022-01-01T08:00:00Z |
| 0 | 35.9 | 客厅 | 21.4 | 2022-01-01T09:00:00Z |
| 0 | 36 | 客厅 | 21.8 | 2022-01-01T10:00:00Z |
| 0 | 36 | 客厅 | 22.2 | 2022-01-01T11:00:00Z |
SQL 通配符字符
InfluxDB SQL 实现支持以下通配符字符,当使用 LIKE 操作符将字符串与模式匹配时。
不
这个 NOT 操作符否定后续的表达式。
SELECT NOT true AS "NOT condition"
示例
NOT IN
SELECT *
FROM home
WHERE
room NOT IN ('Kitchen', 'Bathroom')
LIMIT 4
| co | 湿度 | 房间 | 温度 | 时间 |
|---|
| 0 | 35.9 | 客厅 | 21.1 | 2022-01-01T08:00:00Z |
| 0 | 35.9 | 客厅 | 21.4 | 2022-01-01T09:00:00Z |
| 0 | 36 | 客厅 | 21.8 | 2022-01-01T10:00:00Z |
| 0 | 36 | 客厅 | 22.2 | 2022-01-01T11:00:00Z |
NOT EXISTS
SELECT *
FROM
home home_actions
WHERE NOT EXISTS (
SELECT *
FROM home
WHERE
home.co = home_actions.co + 4
)
ORDER BY time
| co | 湿度 | 房间 | 温度 | 时间 |
|---|
| 7 | 36 | 厨房 | 22.4 | 2022-01-01T16:00:00Z |
| 4 | 36 | 客厅 | 22.4 | 2022-01-01T16:00:00Z |
| 9 | 36 | 厨房 | 22.7 | 2022-01-01T17:00:00Z |
| 9 | 36.2 | 客厅 | 22.8 | 2022-01-01T18:00:00Z |
| 17 | 36.4 | 客厅 | 22.2 | 2022-01-01T20:00:00Z |
| 26 | 36.5 | 厨房 | 22.7 | 2022-01-01T20:00:00Z |
NOT BETWEEN
SELECT *
FROM home
WHERE
co NOT BETWEEN 1 AND 22
AND room = 'Kitchen'
| co | 湿度 | 房间 | 温度 | 时间 |
|---|
| 0 | 35.9 | 厨房 | 21 | 2022-01-01T08:00:00Z |
| 0 | 36.2 | 厨房 | 23 | 2022-01-01T09:00:00Z |
| 0 | 36.1 | 厨房 | 22.7 | 2022-01-01T10:00:00Z |
| 0 | 36 | 厨房 | 22.4 | 2022-01-01T11:00:00Z |
| 0 | 36 | 厨房 | 22.5 | 2022-01-01T12:00:00Z |
| 26 | 36.5 | 厨房 | 22.7 | 2022-01-01T20:00:00Z |
或者
如果任何操作数为 true,则 OR 运算符返回 true。否则,它返回 false。这个运算符通常用于WHERE子句来组合多个条件。
SELECT true OR false AS "OR condition"
示例
OR 在 WHERE 子句中
SELECT *
FROM home
WHERE
co > 20
OR temp > 23
| co | 湿度 | 房间 | 温度 | 时间 |
|---|
| 18 | 36.9 | 厨房 | 23.3 | 2022-01-01T18:00:00Z |
| 22 | 36.6 | 厨房 | 23.1 | 2022-01-01T19:00:00Z |
| 26 | 36.5 | 厨房 | 22.7 | 2022-01-01T20:00:00Z |