SELECT setQuantifier? selectItem (',' selectItem)* selectItem : expression (AS? identifier)? #selectSingle | tableName '.' ASTERISK (AS columnAliases)? #selectAll | ASTERISK #selectAll ; setQuantifier : DISTINCT | ALL ;
SELECT DISTINCT column_name 确保查询结果中的值是唯一的,去除重复项。每个 selectItem 可以是以下形式之一:
expression [ [ AS ] column_alias ] 定义单个输出列,可以指定列别名。relation.* 选择某个关系的所有列,不允许使用列别名。* 选择查询的所有列,不允许使用列别名。DISTINCT 的使用场景:
COLUMNS 函数:
COLUMNS(*): 匹配所有列,支持结合表达式进行使用。COLUMNS(regexStr) ? AS identifier:正则匹配匹配所有列名满足正则表达式的列,支持结合表达式进行使用。
支持引用正则表达式捕获到的 groups 对列进行重命名,不写 AS 时展示原始列名(即 _coln_原始列名,其中 n 为列在结果表中的 position)。
重命名用法简述:
'$index' 引用捕获到的组。注意:使用该功能时,identifier 中会包含特殊字符 ‘$’,所以整个 identifier 要用双引号引起来。
在示例数据页面中,包含了用于构建表结构和插入数据的SQL语句,下载并在IoTDB CLI中执行这些语句,即可将数据导入IoTDB,您可以使用这些数据来测试和执行示例中的SQL语句,并获得相应的结果。
使用星号(*)可以选取表中的所有列,注意,星号表达式不能被大多数函数转换,除了count(*)的情况。
示例:从表中选择所有列
SELECT * FROM table1;
执行结果如下:
+-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ | time|region|plant_id|device_id|model_id|maintenance|temperature|humidity|status| modifytime| +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ |2024-11-29T11:00:00.000+08:00| 上海| 3002| 100| E| 180| null| 45.1| true| null| |2024-11-29T18:30:00.000+08:00| 上海| 3002| 100| E| 180| 90.0| 35.4| true|2024-11-29T18:30:15.000+08:00| |2024-11-28T08:00:00.000+08:00| 上海| 3001| 100| C| 90| 85.0| null| null|2024-11-28T08:00:09.000+08:00| |2024-11-28T09:00:00.000+08:00| 上海| 3001| 100| C| 90| null| 40.9| true| null| |2024-11-28T10:00:00.000+08:00| 上海| 3001| 100| C| 90| 85.0| 35.2| null|2024-11-28T10:00:11.000+08:00| |2024-11-28T11:00:00.000+08:00| 上海| 3001| 100| C| 90| 88.0| 45.1| true|2024-11-28T11:00:12.000+08:00| |2024-11-26T13:37:00.000+08:00| 北京| 1001| 100| A| 180| 90.0| 35.1| true|2024-11-26T13:37:34.000+08:00| |2024-11-26T13:38:00.000+08:00| 北京| 1001| 100| A| 180| 90.0| 35.1| true|2024-11-26T13:38:25.000+08:00| |2024-11-30T09:30:00.000+08:00| 上海| 3002| 101| F| 360| 90.0| 35.2| true| null| |2024-11-30T14:30:00.000+08:00| 上海| 3002| 101| F| 360| 90.0| 34.8| true|2024-11-30T14:30:17.000+08:00| |2024-11-29T10:00:00.000+08:00| 上海| 3001| 101| D| 360| 85.0| null| null|2024-11-29T10:00:13.000+08:00| |2024-11-27T16:38:00.000+08:00| 北京| 1001| 101| B| 180| null| 35.1| true|2024-11-26T16:37:01.000+08:00| |2024-11-27T16:39:00.000+08:00| 北京| 1001| 101| B| 180| 85.0| 35.3| null| null| |2024-11-27T16:40:00.000+08:00| 北京| 1001| 101| B| 180| 85.0| null| null|2024-11-26T16:37:03.000+08:00| |2024-11-27T16:41:00.000+08:00| 北京| 1001| 101| B| 180| 85.0| null| null|2024-11-26T16:37:04.000+08:00| |2024-11-27T16:42:00.000+08:00| 北京| 1001| 101| B| 180| null| 35.2| false| null| |2024-11-27T16:43:00.000+08:00| 北京| 1001| 101| B| 180| null| null| false| null| |2024-11-27T16:44:00.000+08:00| 北京| 1001| 101| B| 180| null| null| false|2024-11-26T16:37:08.000+08:00| +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ Total line number = 18 It costs 0.653s
聚合函数将多行数据汇总为单个值。当 SELECT 子句中存在聚合函数时,查询将被视为聚合查询。在聚合查询中,所有表达式必须是聚合函数的一部分或由GROUP BY子句指定的分组的一部分。
示例1:返回地址表中的总行数:
SELECT count(*) FROM table1;
执行结果如下:
+-----+ |_col0| +-----+ | 18| +-----+ Total line number = 1 It costs 0.091s
示例2:返回按城市分组的地址表中的总行数:
SELECT region, count(*) FROM table1 GROUP BY region;
执行结果如下:
+------+-----+ |region|_col1| +------+-----+ | 上海| 9| | 北京| 9| +------+-----+ Total line number = 2 It costs 0.071s
关键字AS:为选定的列指定别名,别名将覆盖已存在的列名,以提高查询结果的可读性。
示例1:原始表格:
IoTDB> SELECT * FROM table1;
执行结果如下:
+-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ | time|region|plant_id|device_id|model_id|maintenance|temperature|humidity|status| modifytime| +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ |2024-11-29T11:00:00.000+08:00| 上海| 3002| 100| E| 180| null| 45.1| true| null| |2024-11-29T18:30:00.000+08:00| 上海| 3002| 100| E| 180| 90.0| 35.4| true|2024-11-29T18:30:15.000+08:00| |2024-11-28T08:00:00.000+08:00| 上海| 3001| 100| C| 90| 85.0| null| null|2024-11-28T08:00:09.000+08:00| |2024-11-28T09:00:00.000+08:00| 上海| 3001| 100| C| 90| null| 40.9| true| null| |2024-11-28T10:00:00.000+08:00| 上海| 3001| 100| C| 90| 85.0| 35.2| null|2024-11-28T10:00:11.000+08:00| |2024-11-28T11:00:00.000+08:00| 上海| 3001| 100| C| 90| 88.0| 45.1| true|2024-11-28T11:00:12.000+08:00| |2024-11-26T13:37:00.000+08:00| 北京| 1001| 100| A| 180| 90.0| 35.1| true|2024-11-26T13:37:34.000+08:00| |2024-11-26T13:38:00.000+08:00| 北京| 1001| 100| A| 180| 90.0| 35.1| true|2024-11-26T13:38:25.000+08:00| |2024-11-30T09:30:00.000+08:00| 上海| 3002| 101| F| 360| 90.0| 35.2| true| null| |2024-11-30T14:30:00.000+08:00| 上海| 3002| 101| F| 360| 90.0| 34.8| true|2024-11-30T14:30:17.000+08:00| |2024-11-29T10:00:00.000+08:00| 上海| 3001| 101| D| 360| 85.0| null| null|2024-11-29T10:00:13.000+08:00| |2024-11-27T16:38:00.000+08:00| 北京| 1001| 101| B| 180| null| 35.1| true|2024-11-26T16:37:01.000+08:00| |2024-11-27T16:39:00.000+08:00| 北京| 1001| 101| B| 180| 85.0| 35.3| null| null| |2024-11-27T16:40:00.000+08:00| 北京| 1001| 101| B| 180| 85.0| null| null|2024-11-26T16:37:03.000+08:00| |2024-11-27T16:41:00.000+08:00| 北京| 1001| 101| B| 180| 85.0| null| null|2024-11-26T16:37:04.000+08:00| |2024-11-27T16:42:00.000+08:00| 北京| 1001| 101| B| 180| null| 35.2| false| null| |2024-11-27T16:43:00.000+08:00| 北京| 1001| 101| B| 180| null| null| false| null| |2024-11-27T16:44:00.000+08:00| 北京| 1001| 101| B| 180| null| null| false|2024-11-26T16:37:08.000+08:00| +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ Total line number = 18 It costs 0.653s
示例2:单列设置别名:
IoTDB> SELECT device_id AS device FROM table1;
执行结果如下:
+------+ |device| +------+ | 100| | 100| | 100| | 100| | 100| | 100| | 100| | 100| | 101| | 101| | 101| | 101| | 101| | 101| | 101| | 101| | 101| | 101| +------+ Total line number = 18 It costs 0.053s
示例3:所有列的别名:
IoTDB> SELECT table1.* AS (timestamp, Reg, Pl, DevID, Mod, Mnt, Temp, Hum, Stat,MTime) FROM table1;
执行结果如下:
+-----------------------------+----+----+-----+---+---+----+----+-----+-----------------------------+ | TIMESTAMP| REG| PL|DEVID|MOD|MNT|TEMP| HUM| STAT| MTIME| +-----------------------------+----+----+-----+---+---+----+----+-----+-----------------------------+ |2024-11-29T11:00:00.000+08:00|上海|3002| 100| E|180|null|45.1| true| null| |2024-11-29T18:30:00.000+08:00|上海|3002| 100| E|180|90.0|35.4| true|2024-11-29T18:30:15.000+08:00| |2024-11-28T08:00:00.000+08:00|上海|3001| 100| C| 90|85.0|null| null|2024-11-28T08:00:09.000+08:00| |2024-11-28T09:00:00.000+08:00|上海|3001| 100| C| 90|null|40.9| true| null| |2024-11-28T10:00:00.000+08:00|上海|3001| 100| C| 90|85.0|35.2| null|2024-11-28T10:00:11.000+08:00| |2024-11-28T11:00:00.000+08:00|上海|3001| 100| C| 90|88.0|45.1| true|2024-11-28T11:00:12.000+08:00| |2024-11-26T13:37:00.000+08:00|北京|1001| 100| A|180|90.0|35.1| true|2024-11-26T13:37:34.000+08:00| |2024-11-26T13:38:00.000+08:00|北京|1001| 100| A|180|90.0|35.1| true|2024-11-26T13:38:25.000+08:00| |2024-11-30T09:30:00.000+08:00|上海|3002| 101| F|360|90.0|35.2| true| null| |2024-11-30T14:30:00.000+08:00|上海|3002| 101| F|360|90.0|34.8| true|2024-11-30T14:30:17.000+08:00| |2024-11-29T10:00:00.000+08:00|上海|3001| 101| D|360|85.0|null| null|2024-11-29T10:00:13.000+08:00| |2024-11-27T16:38:00.000+08:00|北京|1001| 101| B|180|null|35.1| true|2024-11-26T16:37:01.000+08:00| |2024-11-27T16:39:00.000+08:00|北京|1001| 101| B|180|85.0|35.3| null| null| |2024-11-27T16:40:00.000+08:00|北京|1001| 101| B|180|85.0|null| null|2024-11-26T16:37:03.000+08:00| |2024-11-27T16:41:00.000+08:00|北京|1001| 101| B|180|85.0|null| null|2024-11-26T16:37:04.000+08:00| |2024-11-27T16:42:00.000+08:00|北京|1001| 101| B|180|null|35.2|false| null| |2024-11-27T16:43:00.000+08:00|北京|1001| 101| B|180|null|null|false| null| |2024-11-27T16:44:00.000+08:00|北京|1001| 101| B|180|null|null|false|2024-11-26T16:37:08.000+08:00| +-----------------------------+----+----+-----+---+---+----+----+-----+-----------------------------+ Total line number = 18 It costs 0.189s
-- 查询列名以 'm' 开头的列的数据 IoTDB:database1> select columns('^m.*') from table1 limit 5 +--------+-----------+ |model_id|maintenance| +--------+-----------+ | E| 180| | E| 180| | C| 90| | C| 90| | C| 90| +--------+-----------+ -- 查询列名以 'o' 开头的列,未匹配到任何列,抛出异常 IoTDB:database1> select columns('^o.*') from table1 limit 5 Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: No matching columns found that match regex '^o.*' -- 查询列名以 'm' 开头的列的数据,并重命名以 'series_' 开头 IoTDB:database1> select columns('^m(.*)') AS "series_$0" from table1 limit 5 +---------------+------------------+ |series_model_id|series_maintenance| +---------------+------------------+ | E| 180| | E| 180| | C| 90| | C| 90| | C| 90| +---------------+------------------+
-- 查询所有列的最小值 IoTDB:database1> select min(columns(*)) from table1 +-----------------------------+------------+--------------+---------------+--------------+-----------------+-----------------+--------------+------------+-----------------------------+ | _col0_time|_col1_region|_col2_plant_id|_col3_device_id|_col4_model_id|_col5_maintenance|_col6_temperature|_col7_humidity|_col8_status| _col9_arrival_time| +-----------------------------+------------+--------------+---------------+--------------+-----------------+-----------------+--------------+------------+-----------------------------+ |2024-11-26T13:37:00.000+08:00| 上海| 1001| 100| A| 180| 85.0| 34.8| false|2024-11-26T13:37:34.000+08:00| +-----------------------------+------------+--------------+---------------+--------------+-----------------+-----------------+--------------+------------+-----------------------------+
使用限制:出现多个 COLUMNS 函数时,多个 COLUMNS 函数的参数要完全相同
-- 查询 'h' 开头列的最小值和最大值之和 IoTDB:database1> select min(columns('^h.*')) + max(columns('^h.*')) from table1 +--------------+ |_col0_humidity| +--------------+ | 79.899994| +--------------+ -- 错误查询,两个 COLUMNS 函数不完全相同 IoTDB:database1> select min(columns('^h.*')) + max(columns('^t.*')) from table1 Msg: org.apache.iotdb.jdbc.IoTDBSQLException: 701: Multiple different COLUMNS in the same expression are not supported
-- 分别查询 'h' 开头列的最小值和最大值 IoTDB:database1> select min(columns('^h.*')) , max(columns('^h.*')) from table1 +--------------+--------------+ |_col0_humidity|_col1_humidity| +--------------+--------------+ | 34.8| 45.1| +--------------+--------------+ -- 分别查询 'h' 开头列的最小值和 'te'开头列的最大值 IoTDB:database1> select min(columns('^h.*')) , max(columns('^te.*')) from table1 +--------------+-----------------+ |_col0_humidity|_col1_temperature| +--------------+-----------------+ | 34.8| 90.0| +--------------+-----------------+
-- 查询数据,所有 'h' 开头列的数据必须要大于 40 IoTDB:database1> select * from table1 where columns('^h.*') > 40 +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ | time|region|plant_id|device_id|model_id|maintenance|temperature|humidity|status| arrival_time| +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ |2024-11-29T11:00:00.000+08:00| 上海| 3002| 100| E| 180| null| 45.1| true| null| |2024-11-28T09:00:00.000+08:00| 上海| 3001| 100| C| 90| null| 40.9| true| null| |2024-11-28T11:00:00.000+08:00| 上海| 3001| 100| C| 90| 88.0| 45.1| true|2024-11-28T11:00:12.000+08:00| +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ --等价于 IoTDB:database1> select * from table1 where humidity > 40 +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ | time|region|plant_id|device_id|model_id|maintenance|temperature|humidity|status| arrival_time| +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+ |2024-11-29T11:00:00.000+08:00| 上海| 3002| 100| E| 180| null| 45.1| true| null| |2024-11-28T09:00:00.000+08:00| 上海| 3001| 100| C| 90| null| 40.9| true| null| |2024-11-28T11:00:00.000+08:00| 上海| 3001| 100| C| 90| 88.0| 45.1| true|2024-11-28T11:00:12.000+08:00| +-----------------------------+------+--------+---------+--------+-----------+-----------+--------+------+-----------------------------+