查询数据流表中的符合条件的列的数据。

语法

SELECT setQuantifier selectItem (',' selectItem)*
      (FROM relation (',' relation)*)
      (WINDOW  windowExpression)
      (WHERE where=booleanExpression)
      (GROUP BY groupBy)
    ;

selectItem说明

参数值 说明 语句示例
* 查询所有列。 SELECT * FROM Test;
columnName 查询指定列,指定列支持聚合函数和其他设置,具体请参见列的配置 SELECT gender FROM Test;
AS 别名。 SELECT REGISTERTIME AS rtime FROM Test;

列的配置

配置值 说明 语句示例
MAX 返回指定列的最大值。 SELECT item_type,MAX(price) FROM orders GROUP BY item_type;
MIN 返回指定列的最小值。 SELECT item_type,MIN(price) FROM orders GROUP BY item_type;
SUM 返回指定列的总和。 SELECT item_type,SUM(price) FROM orders GROUP BY item_type;
COUNT 返回指定列的个数。 SELECT item_type,COUNT(item_id) FROM orders GROUP BY item_type;
AVG 返回指定列的平均值,通过SUM(col)/COUNT(*) 实现。 SELECT item_type, SUM(price)/COUNT(*) AS avg_price FROM orders GROUP BY item_type;
LEN(column_name) 返回指定列的长度。 SELECT LEN(column_name) FROM orders;
IFNULL(value1,value2) 返回value1或者value2的值,需要遵循以下几点:
  • value1和value2的数据类型保持一致。
  • 如果value1的值为空,则返回value2的值。
  • 如果value1的值为不为空,则返回value1的值。
SELECT IFNULL("Hello", "RUNOOB");
TRIM(column_name) 删除字符串首尾的空格部分。 SELECT TRIM(column_name) FROM orders;
CONCAT(str1, str2,...) 返回拼接后的字符串。 SELECT CONCAT("Hello", "RUNOOB");
SUBSTRING(string,offset,len) 截取字符串的一部分,offset从1开始,len为截取长度。 SELECT SUBSTRING("Hello",1 ,2);
UCASE(column_name) 将列名转化为大写字符串。 SELECT UCASE(column_name) FROM orders;
LCASE(column_name) 将列名转化为小写字符串。 SELECT LCASE(column_name) FROM orders;

WHERE说明

运算符或操作符 说明 语句示例
= 等于 SELECT * FROM Test WHERE gender = 'FEMALE';
!= 不等于 SELECT * FROM Test WHERE gender != 'FEMALE';
<> 不等于 SELECT * FROM Test WHERE REGISTERTIME <> 1;
> 大于 SELECT * FROM Test WHERE REGISTERTIME > 1;
>= 大于等于 SELECT * FROM Test WHERE REGISTERTIME >= 1;
< 小于 SELECT * FROM Test WHERE REGISTERTIME < 1;
<= 小于等于 SELECT * FROM Test WHERE REGISTERTIME <= 1;
BETWEEN 选取介于两个值之间的数据范围内的值。 SELECT * FROM Test WHERE REGISTERTIME BETWEEN 1 AND 3;
LIKE 在WHERE子句中搜索列中的指定模式。 SELECT * FROM Test WHERE USERID LIKE 'USER%';
IS NULL 空值判断 SELECT * FROM Test WHERE USERID IS NULL;
IS NOT NULL 非空值判断 SELECT * FROM Test WHERE USERID IS NOT NULL;
AND 对两个或两个以上的条件记录数据进行过滤,如果第一个条件和第二个条件都满足,则AND运算符显示一条记录数据。 SELECT * FROM Test WHERE GENDER = 'MALE' AND REGIONID = 'REGION_1';
OR 对两个或两个以上的条件记录数据进行过滤,如果第一个条件和第二个条件中任何一个满足,则OR运算符显示一条记录数据。 SELECT * FROM Test WHERE GENDER = 'MALE' OR REGIONID = 'REGION_1';
IN 查询结果中包含多个值。 SELECT * FROM Test WHERE REGIONID IN (REGION_1','REGION_2');
NOT IN 查询结果中不包含多个值。 SELECT * FROM Test WHERE REGIONID NOT IN (REGION_1','REGION_2');

GROUP BY说明

GROUP BY子句对查询结果进行分组,示例如下:
SELECT column_name, aggregate_function(column_name)
  FROM table_name
  WHERE column_name operator value
  GROUP BY column_name;

WINDOW说明

WINDOW子句允许您设置如何将具有相同主建的数据分组到窗口中,来进行聚合或连接等操作。窗口将向数据中添加了两个额外的系统列WINDOWSTART和WINDOWEND,提供了窗口边界。支持以下WINDOW类型:
  • HOPPING window
    根据数据的时间戳将输入数据分组到固定大小的(可能)重叠的窗口。您必须为HOPPING window窗口指定窗口大小和滑动距离。以下语句表示如何创建HOPPING window的查询。
    SELECT windowstart, windowend, item_id, SUM(quantity)
      FROM orders
      WINDOW HOPPING (SIZE 20 SECONDS, ADVANCE BY 5 SECONDS)
      GROUP BY item_id;
  • TUMBLING window
    根据数据的时间戳将输入数据分组到固定大小、不重叠的窗口中。您必须指定滚动窗口的窗口大小。TUMBLING window是HOPPING window的一种特殊情况,其中窗口大小等于滑动距离。以下语句表示如何创建TUMBLING window的查询。
    SELECT windowstart, windowend, item_id, SUM(quantity)
      FROM orders
      WINDOW TUMBLING (SIZE 20 SECONDS)
      GROUP BY item_id;
  • Session window
    将输入数据分组到会话中,您必须为Session window窗口指定不活跃的时间间隔。例如,将不活跃的时间间隔设置为5分钟。对于给定的主键(例如alice),如果超过5分钟没有新的输入数据到达,则alice的当前会话将关闭,并且后续到达的alice数据都将标记为新会话的开始。以下语句表示如何创建Session window的查询。
    SELECT windowstart, windowend, item_id, SUM(quantity)
      FROM orders
      WINDOW SESSION (20 SECONDS)
      GROUP BY item_id;