SELECT语句用于执行查询,从一个或多个表中检索数据,并生成由行和列组成的结果集。INSERT语句通常也以SELECT语句结束,用于定义从一个表复制到另一个表的数据。语法:
[WITH name AS (select_expression) [, ...] ]SELECT[ALL | DISTINCT][STRAIGHT_JOIN]expression [, expression ...]FROM table_reference [, table_reference ...][[FULL | [LEFT | RIGHT] INNER | [LEFT | RIGHT] OUTER | [LEFT | RIGHT] SEMI | [LEFT | RIGHT] ANTI | CROSS]JOIN table_reference[ON join_equality_clauses | USING (col1[, col2 ...]] ...WHERE conditionsGROUP BY { column | expression [, ...] }HAVING conditionsORDER BY { column | expression [ASC | DESC] [NULLS FIRST | NULLS LAST] [, ...] }LIMIT expression [OFFSET expression][UNION [ALL] select_statement] ...]table_reference := { table_name | (subquery) }
SELECT查询支持:SQL标量数据类型:
BOOLEAN、TINYINT、SMALLINT、INT、BIGINT、DECIMAL、FLOAT、DOUBLE、TIMESTAMP、STRING、VARCHAR、CHAR。可选的
WITH子句,位于SELECT关键字之前,用于定义一个子查询,子查询的名称或列名可以在主查询中稍后引用。此子句允许你抽象化重复的子句,如聚合函数,这些子句在同一个查询中多次引用。可以在
FROM子句中使用子查询,也可以在WHERE子句中使用,例如使用IN()、EXISTS和NOT EXISTS操作符。支持
WHERE、GROUP BY、HAVING子句。可以通过它们的序号引用
SELECT列表项。支持在GROUP BY、HAVING和ORDER BY子句中使用序号。序号只能在顶层使用。例如,以下语句是允许的:-- 有效的例子:SELECT int_col / 2, sum(x)FROM tGROUP BY 1;-- 在这个查询中,GROUP BY 1表示按第一列(即int_col / 2)分组。SELECT int_col / 2FROM tORDER BY 1;SELECT int_col / 2FROM tORDER BY 1 + 2;-- 以上语句也是有效的,但ORDER BY 1 + 2没有任何效果,因为1 + 2的结果是3,表示排序依据是第三列,而不是按第一列排序。SELECT NOT bool_colFROM tGROUP BY 1HAVING not 1;-- 这个查询在解析时会抛出错误,因为not 1是无效的表达式,not运算符不能直接作用于数字1。
总结:允许在
GROUP BY、ORDER BY等子句中使用数字作为列序号,但需要注意的是,子表达式中的数字不会被解释为列序号,并且某些运算(如not 1)会导致语法错误。支持多种
JOIN子句。左连接、右连接、半连接、全连接和外连接在所有TCHouse-X版本中都得到支持。CROSS JOIN操作符也可用。在性能调优过程中,你可以通过在SELECT语句及任何DISTINCT或ALL关键字后面立即添加STRAIGHT_JOIN关键字,来覆盖TCHouse-X内部的连接子句重排序。有关连接查询的详细信息和示例,请参见TCHouse-X
SELECT语句中的连接。UNION ALL。LIMIT。外部表。
关系运算符,如大于、小于或等于。
算术运算符,如加法或减法。
逻辑/布尔运算符
AND、OR和NOT。TCHouse-X不支持相应的符号&&、||和!。常见的SQL内置函数,如
COUNT、SUM、CAST、LIKE、IN、BETWEEN和COALESCE。TCHouse-X特别支持在TCHouse-X内置函数中描述的内置函数。