0
点赞
收藏
分享

微信扫一扫

【ClickHouse SQL 极简教程】ClickHouse SQL 之数据查询语言 DQL

【ClickHouse SQL 极简教程】ClickHouse SQL 之数据查询语言 DQL_数据库

1.1. 数据查询

数据查询语言( DQL ) 是SQL语言子集,也是 SQL中最核心最常用的功能。

1.1.1. 概述

SQL 的核心是 Query,也就是数据查询(Date Query)。SQL中数据查询语句也只有一个,那就是 SELECT语句。SELECT 语句执行数据查询,并把请求响应的数据返回到客户端,返回数据集称为结果集。

类似 Hive SQL,ClickHouse SQL也支持组合使用INSERT INTO ... SELECT语句,将查询结果数据写入到另外一张表里。 

SELECT语句

SELECT 语句的语法如下:

[WITH expr_list|(subquery)]

SELECT [DISTINCT [ON (column1, column2, ...)]] expr_list

[FROM [db.]table | (subquery) | table_function] [FINAL]

[SAMPLE sample_coeff]

[ARRAY JOIN ...]

[GLOBAL] [ANY|ALL|ASOF] [INNER|LEFT|RIGHT|FULL|CROSS] [OUTER|SEMI|ANTI]

JOIN (subquery)|table (ON <expr_list>)|(USING <column_list>)

[PREWHERE expr]

[WHERE expr]

[GROUP BY expr_list] [WITH ROLLUP|WITH CUBE] [WITH TOTALS]

[HAVING expr]

[ORDER BY expr_list] [WITH FILL] [FROM expr] [TO expr] [STEP expr]

[LIMIT [offset_value, ]n BY columns]

[LIMIT [n, ]m] [WITH TIES]

[SETTINGS ...]

[UNION  ...]

[INTO OUTFILE filename [COMPRESSION type] ]

[FORMAT format]

除了SELECT expr_list表达式是必须的,其他有子句都是可选的。SELECT子句是必选的,其它子句如WHERE子句、GROUP BY子句等是可选的。一个SELECT查询语句中,子句的顺序是固定的。必须严格按照上述的顺序书写。

所有的查询语句都是从FROM开始执行的(如果使用 WITH,则先计算 WITH 子句)。在SQL 查询执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的输入。

嵌套子查询

查询可以嵌套,一个查询的结果可以通过关系运算符或聚合函数,在另一个查询中使用。嵌套查询(nested query)也称为子查询(subquery)。例如,下面是一个子查询的SQL实例:

SELECT  isbn ,

       title ,

       price

 FROM   Book

 WHERE  price  <  ( SELECT  AVG ( price )  FROM  Book )

 ORDER  BY  title ;

查询子句执行顺序

SQL中各个子句的执行顺序如下:

(8) SELECT

(9) DISTINCT<Select_list>

(1) FROM <left_table>

(3) <join_type>JOIN<right_table> 

(2) ON<join_condition>

(4) WHERE<where_condition>

(5) GROUP BY<group_by_list>

(6) WITH {CUBE|ROLLUP}

(7) HAVING <having_condtion>

(10) ORDER BY <order_by_list>

(11) LIMIT <limit_number>

在ClickHouse SQL中,查询子句要丰富一些。ClickHouse SQL中的各个子句执行顺序如下:

① WITH子句

② FROM子句

③ SAMPLE子句

④ JOIN子句

⑤ PREWHERE子句

⑥ WHERE子句

⑦ GROUP BY子句

⑧ LIMIT BY子句

⑨ HAVING子句

⑩ SELECT子句

⑪ DISTINCT子句

⑫ ORDER BY子句

⑬ LIMIT子句

⑭ SETTINGS子句

⑮ UNION子句

⑯ INTERSECT子句

⑰ EXCEPT子句

⑱ INTO OUTFILE子句

⑲ FORMAT子句

下面对这些SQL子句,分别进行详细介绍。

1.1.2. WITH子句

ClickHouse 支持公共表表达式(CTE, Common Table Expressions),即提供在 SELECT查询中使用 WITH 子句的结果。在查询表对象的地方,可以在子查询上下文中,使用命名子查询。另外,ClickHouse 对 CTE 是有限支持,例如:WITH 子句不支持递归查询。当使用子查询时,它的结果应该是只有一行的标量。

语法

WITH <expression> AS <identifier>

功能说明

使用表达式expression声明一个变量名为identifier的命名子查询。

实例讲解
使用常量表达式作为“变量”

WITH '2014-03-18 12:00:00' AS ts_upper_bound

SELECT count()

FROM clickhouse_tutorial.user_tag

WHERE (EventDate = toDate(ts_upper_bound)) AND (EventTime <= ts_upper_bound)



举报

相关推荐

0 条评论