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 内置函数中描述的内置函数。