SELECT 语法概览

最近更新时间:2026-05-06 16:28:13

我的收藏
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 conditions
GROUP BY { column | expression [, ...] }
HAVING conditions
ORDER BY { column | expression [ASC | DESC] [NULLS FIRST | NULLS LAST] [, ...] }
LIMIT expression [OFFSET expression]
[UNION [ALL] select_statement] ...]

table_reference := { table_name | (subquery) }
SELECT查询支持:
SQL标量数据类型:BOOLEANTINYINTSMALLINTINTBIGINTDECIMALFLOATDOUBLETIMESTAMPSTRINGVARCHARCHAR
可选的WITH子句,位于SELECT关键字之前,用于定义一个子查询,子查询的名称或列名可以在主查询中稍后引用。此子句允许你抽象化重复的子句,如聚合函数,这些子句在同一个查询中多次引用。
可以在FROM子句中使用子查询,也可以在WHERE子句中使用,例如使用IN()EXISTSNOT EXISTS操作符。
支持WHEREGROUP BYHAVING子句。
可以通过它们的序号引用SELECT列表项。支持在GROUP BYHAVINGORDER BY子句中使用序号。序号只能在顶层使用。例如,以下语句是允许的:
-- 有效的例子:
SELECT int_col / 2, sum(x)
FROM t
GROUP BY 1;

-- 在这个查询中,GROUP BY 1表示按第一列(即int_col / 2)分组。
SELECT int_col / 2
FROM t
ORDER BY 1;

SELECT int_col / 2
FROM t
ORDER BY 1 + 2;
-- 以上语句也是有效的,但ORDER BY 1 + 2没有任何效果,因为1 + 2的结果是3,表示排序依据是第三列,而不是按第一列排序。

SELECT NOT bool_col
FROM t
GROUP BY 1
HAVING not 1;
-- 这个查询在解析时会抛出错误,因为not 1是无效的表达式,not运算符不能直接作用于数字1。
总结:允许在GROUP BYORDER BY等子句中使用数字作为列序号,但需要注意的是,子表达式中的数字不会被解释为列序号,并且某些运算(如not 1)会导致语法错误。
支持多种JOIN子句。左连接、右连接、半连接、全连接和外连接在所有TCHouse-X版本中都得到支持。CROSS JOIN操作符也可用。在性能调优过程中,你可以通过在SELECT语句及任何DISTINCTALL关键字后面立即添加STRAIGHT_JOIN关键字,来覆盖TCHouse-X内部的连接子句重排序。
有关连接查询的详细信息和示例,请参见TCHouse-X SELECT语句中的连接。
UNION ALL
LIMIT
外部表。
关系运算符,如大于、小于或等于。
算术运算符,如加法或减法。
逻辑/布尔运算符ANDORNOT。TCHouse-X不支持相应的符号&&、||和!。
常见的SQL内置函数,如COUNTSUMCASTLIKEINBETWEENCOALESCE。TCHouse-X特别支持在TCHouse-X内置函数中描述的内置函数。