SQL
全面支持 DML、DDL、DCL、TCL 和常用 DAL。 支持分页、去重、排序、分组、聚合、表关联等复杂查询。
常规查询
- SELECT 主语句
- select_expr
[DISTINCT] COLUMN_NAME [AS] [alias] |
(MAX | MIN | SUM | AVG)(COLUMN_NAME | alias) [AS] [alias] |
COUNT(* | COLUMN_NAME | alias) [AS] [alias]
- table_reference
子查询
子查询和外层查询同时指定分片键,且分片键的值保持一致时,由内核提供稳定支持。
例如:
SELECT * FROM (SELECT * FROM t_order WHERE order_id = 1) o WHERE o.order_id = 1;
例如:
运算表达式中包含分片键
当分片键处于运算表达式中时,无法通过 SQL 字面
提取用于分片的值,将导致全路由。
例如,假设 create_time
为分片键:
SELECT * FROM t_order WHERE to_date(create_time, 'yyyy-mm-dd') = '2019-01-01';
子查询
子查询和外层查询未同时指定分片键,或分片键的值不一致时,由 Federation 执行引擎提供支持。
例如:
跨库关联查询
当关联查询中的多个表分布在不同的数据库实例上时,由 Federation 执行引擎提供支持。 假设 和 t_order_item
是多数据节点的分片表,并且未配置绑定表规则,t_user
和 t_user_role
是分布在不同的数据库实例上的单表,那么 Federation 执行引擎能够支持如下常用的关联查询:
SELECT * FROM t_order o INNER JOIN t_order_item i ON o.order_id = i.order_id WHERE o.order_id = 1;
SELECT * FROM t_order o INNER JOIN t_user u ON o.user_id = u.user_id WHERE o.user_id = 1;
SELECT * FROM t_order_item i LEFT JOIN t_user u ON i.user_id = u.user_id WHERE i.user_id = 1;
SELECT * FROM t_order_item i RIGHT JOIN t_user_role r ON i.user_id = r.user_id WHERE i.user_id = 1;
SELECT * FROM t_user u RIGHT JOIN t_user_role r ON u.user_id = r.user_id WHERE u.user_id = 1;
CASE WHEN
中包含子查询- 中使用逻辑表名(请使用表别名)
以下 UNION 和 UNION ALL 语句不支持:
- 包含分片表和广播表