SELECT Query

作为一款 OLAP 分析型数据库,数据查询是 ClickHouse 的主要工作之一,虽然 ClickHouse 拥有优秀的查询性能,使用不恰当的 SQL 语句进行查询不仅会带来低性能,还可能导致不可预知的系统错误。比如:

ClickHouse目前支持的查询子句如下所示:

[WITH expr |(subquery)]
SELECT [DISTINCT] expr
[FROM [db.]table | (subquery) | table_function] [FINAL]
[SAMPLE expr]
[[LEFT] ARRAY JOIN]
[GLOBAL] [ALL|ANY|ASOF] [INNER | CROSS | [LEFT|RIGHT|FULL [OUTER]] ] JOIN (subquery)|table ON|USING columns_list
[PREWHERE expr]
[WHERE expr]
[GROUP BY expr] [WITH ROLLUP|CUBE|TOTALS]
[HAVING expr]
[ORDER BY expr]
[LIMIT [n[,m]]
[UNION ALL]
[INTO OUTFILE filename]
[FORMAT format]
[LIMIT [offset] n BY columns]

ClickHouse 对于查询语法的解析也大致是按照上面各个子句排列的顺序进行的。

虽然 SELECT 位于 SQL 语句的起始位置,但它却是在上述一众子句之后执行的。在其他子句执行之后,SELECT 会将选取的字段或表达式作用于每行数据之上。

在选择列字段时,ClickHouse 还为特定场景提供了一种基于正则查询的形式。

-- 执行下面的语句后,查询会返回名称以字母 n 开头和包含字母 p 的列字段
SELECT COLUMNS('^n'), COLUMNS('p') FROM system.databases

┌─name───────┬─data_path───────┬─metadata_path──────┐
│ default    │ /data/default/  │ /metadata/default/ │
│ system     │ /data/system/   │ /metadata/system/  │
└────────────┴─────────────────┴────────────────────┘

查询子句


With 子句(CTE 支持)

From 子句

Sample 子句(数据采样)

Array Join 子句(内数组 JOIN)

Join 子句