跳到主要内容

在 Databend 中查询数据

Databend 支持标准 SQL,并带有 ANSI SQL:2003 分析扩展。本指南涵盖从基础到高级的核心查询技术,按学习路径组织,便于高效掌握。

学习路径

📚 SQL 新手?基础查询开始
🔗 需要连接数据? 前往组合数据
⚡ 需要自定义逻辑? 查看高级功能
🚀 遇到性能问题? 访问查询优化(Query Optimization)


📚 基础查询

掌握数据选择与聚合的基本 SQL 操作。

筛选与选择

-- 选择与筛选数据
SELECT name, salary FROM employees
WHERE department = 'Engineering'
ORDER BY salary DESC;

聚合数据

-- 分组并汇总数据
SELECT department,
COUNT(*) as emp_count,
AVG(salary) as avg_salary
FROM employees
GROUP BY department;

高级分组

使用 CUBE、ROLLUP 和 GROUPING SETS 进行多维分析


🔗 组合数据

通过 JOIN 和 CTE 连接多源数据。

JOIN

-- 关联相关表
SELECT e.name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.id;

公用表表达式(CTE)

-- 构建复杂查询
WITH high_earners AS (
SELECT * FROM employees WHERE salary > 75000
)
SELECT department, COUNT(*) as count
FROM high_earners GROUP BY department;

高级功能

通过自定义函数与外部集成扩展能力。

用户自定义函数(User-Defined Functions)

-- 创建可复用函数
CREATE FUNCTION calculate_bonus(salary FLOAT, rating FLOAT)
RETURNS FLOAT AS $$ salary * rating * 0.1 $$;

更多高级功能


🚀 查询优化(Query Optimization)

利用分析工具诊断并提升查询性能。

查询画像(Query Profile)

可视化执行计划分析(Databend Cloud:监控 → SQL 历史)

性能分析

-- 分析查询执行
EXPLAIN SELECT * FROM orders o
JOIN customers c ON o.customer_id = c.id
WHERE o.order_date >= '2023-01-01';

快速参考

最常用模式

-- Top N 查询
SELECT * FROM employees ORDER BY salary DESC LIMIT 10;

-- 筛选并聚合
SELECT department, AVG(salary)
FROM employees
WHERE hire_date >= '2023-01-01'
GROUP BY department
HAVING AVG(salary) > 70000;

-- 使用 CTE 进行连接
WITH recent_orders AS (
SELECT * FROM orders WHERE order_date >= '2023-01-01'
)
SELECT c.name, COUNT(*) as order_count
FROM customers c
JOIN recent_orders o ON c.id = o.customer_id
GROUP BY c.name;