元素码农
基础
UML建模
数据结构
算法
设计模式
网络
TCP/IP协议
HTTPS安全机制
WebSocket实时通信
数据库
sqlite
postgresql
clickhouse
后端
rust
go
java
php
mysql
redis
mongodb
etcd
nats
zincsearch
前端
浏览器
javascript
typescript
vue3
react
游戏
unity
unreal
C++
C#
Lua
App
android
ios
flutter
react-native
安全
Web安全
测试
软件测试
自动化测试 - Playwright
人工智能
Python
langChain
langGraph
运维
linux
docker
工具
git
svn
🌞
🌙
目录
▶
概述篇
ClickHouse简介
适用场景解析
架构设计解析
▶
环境搭建
Linux安装指南
配置入门
客户端工具使用
▶
基础操作
数据库管理
数据类型详解
表结构设计
数据插入方法
基础查询语法
数据修改与删除
常用函数示例
查询优化基础
高级查询
▶
核心功能
表引擎详解
MergeTree引擎解析
索引机制详解
数据分区策略
TTL数据管理
▶
数据管理
数据导入导出
备份与恢复
用户权限管理
▶
应用实践
日志分析案例
用户行为分析
可视化工具使用
发布时间:
2025-04-08 10:01
↑
☰
# ClickHouse基础查询语法 本文将详细介绍ClickHouse的基础查询语法,帮助您掌握数据查询的基本方法。 ## 基本查询语法 ### SELECT语句 1. **基本语法** ```sql SELECT [DISTINCT] column1, column2, ... FROM table_name [WHERE condition] [GROUP BY columns] [HAVING condition] [ORDER BY columns] [LIMIT n]; ``` 2. **常用示例** ```sql -- 基本查询 SELECT * FROM table_name; -- 指定字段查询 SELECT id, name, value FROM table_name; -- 条件查询 SELECT * FROM table_name WHERE id > 100; ``` ## 条件过滤 ### WHERE子句 1. **比较运算符** ```sql -- 等值比较 SELECT * FROM table_name WHERE id = 100; -- 范围比较 SELECT * FROM table_name WHERE value BETWEEN 10 AND 20; -- IN操作 SELECT * FROM table_name WHERE status IN ('active', 'pending'); ``` 2. **逻辑运算符** ```sql -- AND条件 SELECT * FROM table_name WHERE status = 'active' AND create_time >= '2023-01-01'; -- OR条件 SELECT * FROM table_name WHERE status = 'completed' OR status = 'pending'; ``` ## 聚合函数 ### 常用聚合 1. **基本聚合** ```sql -- 计数 SELECT count() FROM table_name; -- 求和 SELECT sum(value) FROM table_name; -- 平均值 SELECT avg(value) FROM table_name; ``` 2. **分组聚合** ```sql -- 按字段分组 SELECT status, count() FROM table_name GROUP BY status; -- 多字段分组 SELECT date, status, sum(value) FROM table_name GROUP BY date, status; ``` ## 排序和限制 ### ORDER BY 1. **基本排序** ```sql -- 单字段排序 SELECT * FROM table_name ORDER BY create_time DESC; -- 多字段排序 SELECT * FROM table_name ORDER BY status ASC, create_time DESC; ``` 2. **NULL值处理** ```sql -- NULL值排序 SELECT * FROM table_name ORDER BY value NULLS FIRST; ``` ### LIMIT子句 1. **基本用法** ```sql -- 限制返回行数 SELECT * FROM table_name LIMIT 10; -- 分页查询 SELECT * FROM table_name LIMIT 10 OFFSET 20; ``` 2. **优化建议** - 使用主键排序 - 避免大偏移量 - 结合WHERE优化 ## 子查询 ### IN子查询 1. **基本用法** ```sql -- IN子查询 SELECT * FROM table1 WHERE id IN ( SELECT id FROM table2 WHERE status = 'active' ); ``` 2. **EXISTS子查询** ```sql -- EXISTS子查询 SELECT * FROM table1 WHERE EXISTS ( SELECT 1 FROM table2 WHERE table2.id = table1.id ); ``` ### 标量子查询 1. **单值返回** ```sql -- 标量子查询 SELECT *, (SELECT avg(value) FROM table2) as avg_value FROM table1; ``` 2. **条件中使用** ```sql -- 条件比较 SELECT * FROM table1 WHERE value > ( SELECT avg(value) FROM table1 ); ``` ## 表连接 ### JOIN类型 1. **内连接** ```sql -- INNER JOIN SELECT t1.*, t2.name FROM table1 t1 INNER JOIN table2 t2 ON t1.id = t2.id; ``` 2. **左连接** ```sql -- LEFT JOIN SELECT t1.*, t2.name FROM table1 t1 LEFT JOIN table2 t2 ON t1.id = t2.id; ``` ## 高级功能 ### 窗口函数 1. **基本用法** ```sql -- 排名函数 SELECT *, row_number() OVER (PARTITION BY category ORDER BY value DESC) FROM table_name; ``` 2. **聚合窗口** ```sql -- 移动平均 SELECT *, avg(value) OVER (ORDER BY date ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) FROM table_name; ``` ### 条件函数 1. **CASE表达式** ```sql -- 简单CASE SELECT id, CASE status WHEN 'active' THEN 1 WHEN 'inactive' THEN 0 ELSE -1 END as status_code FROM table_name; ``` 2. **IF函数** ```sql -- IF条件 SELECT id, if(value > 100, 'high', 'low') as level FROM table_name; ``` ## 性能优化 ### 查询优化 1. **索引使用** - 利用主键查询 - 使用二级索引 - 避免全表扫描 2. **分区优化** ```sql -- 分区裁剪 SELECT * FROM table_name WHERE toYYYYMM(date) = 202301; ``` ### 常见问题 1. **性能问题** - 查询太慢 - 内存使用高 - 结果集太大 2. **优化方向** - 优化WHERE条件 - 减少数据扫描 - 使用合适的索引 ## 总结 本文详细介绍了ClickHouse的基础查询语法,包括基本查询、条件过滤、聚合函数、排序限制、子查询、表连接等内容。通过掌握这些查询语法,可以有效地进行数据分析和处理。在实际应用中,建议根据具体场景选择合适的查询方式,并注意查询性能的优化。