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

Posted 东海陈光剑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

以上是关于ClickHouse SQL 极简教程ClickHouse SQL 之数据查询语言 DQL的主要内容,如果未能解决你的问题,请参考以下文章

ClickHouse SQL 语法极简教程

ClickHouse SQL 极简教程ClickHouse SQL之数据定义语言 DDL

ClickHouse SQL 极简教程ClickHouse SQL 之数据控制语言 DCL

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

ClickHouse SQL 极简教程使用EXPLAIN 分析 SQL 执行计划

ClickHouse SQL 语法基础极简教程 + bitmap 位图数据类型的使用实例