SELECT
SELECT 语句是 SQL 和 GreptimeDB 中数据检索的基础。它允许你从一个或多个表中提取特定的列或表达式:
Basic Syntax
SELECT 的基本语法如下:
SELECT column1, column2, ...
FROM table_name
[WHERE condition]
[GROUP BY column]
[HAVING condition]
[ORDER BY column]
[LIMIT number] [OFFSET number]
column1, column2 是要从中获取数据的列的名称,table_name 是要从中获取数据的表的名称。
该语句从 FROM 子句中指定的表中选择列。如果要从表中选择所有列,可以使用星号(*)通配符字符,而不是列出单个列 名。
SELECT *
FROM table_name;
条件过滤 (WHERE 子句)
WHERE 子句用于根据指定条件过滤 SELECT 语句的结果,其语法如下:
SELECT column1, column2, ..., columnN
FROM table_name
WHERE condition;
其中 condition 是一个表达式,它的值为 true 或 false。只有满足条件的行才会包含在结果集中。
支持的 比较运算包括:
- 逻辑运算符:
AND、OR、NOT - 比较运算符:
=、!=、>、<、>=、<= - 模式匹配:
LIKE、IN、BETWEEN
-- 从 system_metrics 表中选择所有 idc 为 'idc0' 的行
SELECT *
FROM system_metrics
WHERE idc = 'idc0';
-- 从 system_metrics 表中选择所有 idc 为 'idc0' 或 'idc0' 的行
SELECT *
FROM system_metrics
WHERE idc IN ('idc0', 'idc1');
-- 从 system_metrics 表中选择所有idc为'idc0'或'idc0'且CPU利用率大于60%的行
SELECT *
FROM system_metrics
WHERE idc IN ('idc0', 'idc1') AND cpu_util > 0.6;
请参考 WHERE 获取更多信息。
排序结果(ORDER BY 子句)
ORDER BY 子句用于根据 SELECT 语句中的一个或多个列,以升序或降序对数据进行排序。
例如:
-- 按 cpu_util 升序排序结果
SELECT *
FROM system_metrics ORDER BY cpu_util ASC;
-- 按 cpu_util 降序排序结果
SELECT *
FROM system_metrics ORDER BY cpu_util DESC;
更多信息请参阅 ORDER。
限制结果(LIMIT 子句)
LIMIT 用于限制查询返回的行数。当处理大数据集时该子句特别有用,因为它通过减少需要处理的数据量来提高查询性能。
SELECT column1, column2, ...
FROM table_name
LIMIT number_of_rows;
这里 number_of_rows 参数用于指定要返回的最大行数。
-- 从 system_metrics 表中选择 CPU 使用率最高的 10 行。
SELECT *
FROM system_metrics
ORDER BY cpu_util DESC
LIMIT 10;
分页结果 (LIMIT 和 OFFSET)
OFFSET 子句指定在开始返回查询结果行之前要跳过多少行。它通常与 LIMIT 一起使用,用于对大型结果集进行分页。
例如:
SELECT *
FROM system_metrics
ORDER BY cpu_util DESC
LIMIT 10
OFFSET 10;
它从 system_metrics 表中选择按 cpu_util 降序排列的第 11 行到第 20 行的所有列。
虽然将 OFFSET 和 LIMIT 与 ORDER BY 子句结合使用可以实现分页,但这种方法效率不高。 我们建议记录每页返回的最后一条记录的时间索引(时间戳),并使用此值来过滤和限制后续页面的数据。 请参阅 OFFSET 以获取更多信息。
连接表(JOIN)
JOIN 用于组合两个或多个表中基于相关列的行,使用 JOIN 的语法如下:
SELECT column1, column2, ...
FROM table1
JOIN table2
ON table1.column = table2.column;