JQuick-SQL SELECT 投影:字段、别名与表达式查询

JQuick-SQL SELECT 投影:字段、别名与表达式查询

Meta 描述:学习 jquick-sql 的 SELECT 投影、字段别名、表达式与 DISTINCT,用嵌入式 Java 示例把已注册数据集转换为可复用查询结果。

标签:jquick-sql、SELECT 投影、字段别名、SQL 表达式、轻量级 SQL 引擎、Java 分布式 SQL 查询引擎

官网示例:

前言

SELECT 决定查询结果中保留哪些列、计算哪些表达式。jquick-sql 是运行在应用已注册数据集之上的 Java 分布式 SQL 查询引擎:先用 registerTable(...) 注册元数据和行数据,再通过 SQL 形成结果集;它不是 JDBC 直连产品。对于由上游组件整理后的异构数据源联邦查询结果,这种投影能力可统一输出字段口径。

选择字段与使用别名

可使用 SELECT * 快速检查数据,也可明确列出需要的字段。生产查询通常应列出字段,并通过 AS 给表达式或重复名称取清晰别名:

sql 复制代码
SELECT id, name, age AS user_age
FROM users

明确投影能缩小结果集,也便于 Java 跨库查询流程在服务层继续消费 JQuickDataSet。

在 SELECT 中使用表达式和 DISTINCT

测试示例验证了算术表达式、函数、常量和 DISTINCT:

sql 复制代码
SELECT 0 AS row_flag,
       id,
       toUpper(name) AS upper_name,
       (age + 1) * 3 AS score
FROM users

SELECT DISTINCT age FROM users

表达式别名应在同一结果集中保持唯一。DISTINCT 用于对投影后的值去重,而不是替代业务主键治理。

可执行 Java 案例

下面示例使用 README 中的嵌入式 API 注册内存数据后执行投影;finally 中关闭引擎:

java 复制代码
import com.github.paohaijiao.engine.JQuickSQL;
import com.github.paohaijiao.statement.JQuickColumnMeta;
import com.github.paohaijiao.statement.JQuickDataSet;
import com.github.paohaijiao.statement.JQuickRow;
import java.util.Arrays;
import java.util.List;

public class SelectProjectionDemo {
    public static void main(String[] args) {
        JQuickSQL sql = JQuickSQL.embedded();
        try {
            List<JQuickColumnMeta> columns = Arrays.asList(
                new JQuickColumnMeta("id", Integer.class, "users"),
                new JQuickColumnMeta("name", String.class, "users"),
                new JQuickColumnMeta("age", Integer.class, "users")
            );
            List<JQuickRow> rows = Arrays.asList(
                row("id", 1, "name", "Alice", "age", 25),
                row("id", 2, "name", "Bob", "age", 30)
            );
            sql.registerTable("users", columns, rows);
            JQuickDataSet result = sql.execute(
                "SELECT id, toUpper(name) AS upper_name, (age + 1) * 3 AS score FROM users"
            );
            result.printTable();
        } finally {
            sql.shutdown();
        }
    }
    private static JQuickRow row(Object... kv) {
        JQuickRow r = new JQuickRow();
        for (int i = 0; i < kv.length; i += 2) r.put((String) kv[i], kv[i + 1]);
        return r;
    }
}

常见问题

**投影时一定要写表前缀吗?**单表且列名无歧义时不必;多表查询应使用限定列名。

**SELECT * 能用于正式接口吗?**可以执行,但字段变化会影响下游,建议关键接口显式列出列。

**这里会连接远程数据库吗?**不会。数据由应用或上游接入层先转换并注册。

总结与拓展

SELECT 投影让轻量级 SQL 引擎把应用数据转换成面向报表、规则或接口的稳定输出。结合 WHERE、ORDER BY 与 LIMIT,可在不改变上游数据所有权的前提下,组织异构数据源联邦查询链路中的结果视图。

Core Advantage

Explicit projections keep embedded query outputs compact, named, and reusable.

Applicable Scenarios

API result shaping, offline reports, service-side transformations, and normalized cross-source datasets.

相关推荐
.痞老板.15 分钟前
mysql初阶--增删改查操作
数据库·mysql
lambo mercy6 小时前
AI智能租房助手
数据库
浮生若城7 小时前
MySQL:库与表的操作
数据库·mysql
薛定谔的悦7 小时前
光储充一体机从主控到执行单元的双层架构
数据库·mongodb·架构
数字新视界7 小时前
动环监控信创适配在智能机房管理中的应用价值与未来展望
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
csdn_aspnet7 小时前
Redis 入门:Windows、Mac安装指南
数据库·windows·redis·缓存·mac
山甫aa8 小时前
锁一篇搞定:乐观锁、悲观锁、CAS、数据库锁与分布式锁【从零开始的 Web 后端学习】
java·数据库·分布式·后端·学习·web
Nturmoils19 小时前
集中式与分布式怎么选:从订单读写看 KingbaseES 的架构边界
数据库
xiaomuzuirenzhen19 小时前
大专电子商务从事电商运营分析师需要考证吗?
大数据·数据库
翔云1234561 天前
RocksDB中,客户端每写入一次数据,需要访问几次磁盘
运维·数据库·mysql