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.

相关推荐
猫咪很可爱1 小时前
mysqldump 失败常见场景
数据库·sql·mysql
大明二代1 小时前
从零构建 Mastra RAG MVP:DeepSeek、SiliconFlow 与 PostgreSQL/pgvector 实战
javascript·数据库·人工智能
LMT流氓兔1 小时前
第四单元——第17课:让回答边生成、边显示
服务器·数据库·人工智能·python·oracle·langchain
1024奇点1 小时前
【仓颉语言入门 · 第二篇 第 8 课】
开发语言·数据库·ide·mysql·开源
其实防守也摸鱼2 小时前
Linux文本处理命令理论学习
linux·服务器·前端·数据库·sql·学习·安全
IM架构师2 小时前
# 一次老旧PHPCMS网站入侵排查:从SQL注入到PHP后门,以及IP白名单止血
sql·tcp/ip·php
l1t2 小时前
DuckDB 各版本 tpch 10 查询时间对比
数据库
Nebula_g2 小时前
SpringBoot企业级实战项目—云禾外卖—SpringBoot常用注解解析
java·网络·数据库·spring boot·后端·spring·javase
雨落在了我的手上2 小时前
MySQL数据库基础(14):JDBC编程
数据库·mysql