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之数据定义语言 DDL
ClickHouse SQL 极简教程ClickHouse SQL 之数据控制语言 DCL
ClickHouse SQL 极简教程ClickHouse SQL 之数据查询语言 DQL