☰
JQuick-SQL JOIN 查询:连接注册数据集的正确方式
2026/10/21 19:38:40 网站建设 项目流程

JQuick-SQL JOIN 查询:连接注册数据集的正确方式

Meta 描述:说明 jquick-sql 的 INNER、LEFT、RIGHT、CROSS、NATURAL JOIN 用法、别名匹配要求及可执行 Java 示例,避免把注册数据集误解为 JDBC 表连接。

标签:jquick-sql、SQL JOIN、LEFT JOIN、INNER JOIN、Java 分布式 SQL 查询引擎、异构数据源联邦查询、表别名

官网示例:

  • FORMULAS 示例页:https://www.jquick.org/jquick-sql
  • github 地址:https://github.com/paohaijiao/jquick-sql

前言

JOIN 用于把多个已注册数据集按关系组合。jquick-sql 支持INNER JOIN、LEFT JOIN、RIGHT JOIN、CROSS JOIN与NATURAL JOIN。它不自行建立远程数据库连接:Java 跨库查询或异构数据源联邦查询中的数据,应先由应用或上游组件接入并注册。

连接类型与选择原则

INNER JOIN只保留匹配行;LEFT JOIN保留左表全部行;RIGHT JOIN保留右表全部行。CROSS JOIN产生笛卡尔组合,必须谨慎控制数据量;NATURAL JOIN依赖同名列,字段演进较频繁时更推荐明确ON条件。

SELECTu.name,o.amountFROMusers uLEFTJOINorders oONu.id=o.user_id

项目当前能力范围不包含FULL OUTER JOIN,设计查询时应以受支持的连接类型拆分业务逻辑。

别名与列元数据保持一致

JQuickColumnMeta的第三个参数保存表名/表别名。测试使用users u、orders o,并以u.id、o.user_id引用列:

SELECTu.id,u.name,o.idASorder_id,o.amountFROMusers uINNERJOINorders oONu.id=o.user_idWHEREu.status='active'ANDo.amount>=150

为避免列解析失败,注册表名、元数据限定信息和 SQL 引用应遵循项目既有别名规则。

可执行 Java 案例

importcom.github.paohaijiao.engine.JQuickSQL;importcom.github.paohaijiao.statement.JQuickColumnMeta;importcom.github.paohaijiao.statement.JQuickDataSet;importcom.github.paohaijiao.statement.JQuickRow;importjava.util.Arrays;importjava.util.List;publicclassJoinQueryDemo{publicstaticvoidmain(String[]args){JQuickSQLsql=JQuickSQL.embedded();try{sql.registerTable("users",Arrays.asList(newJQuickColumnMeta("id",Integer.class,"users"),newJQuickColumnMeta("name",String.class,"users")),Arrays.asList(row("id",1,"name","Alice"),row("id",2,"name","Bob")));sql.registerTable("orders",Arrays.asList(newJQuickColumnMeta("id",Integer.class,"orders"),newJQuickColumnMeta("user_id",Integer.class,"orders"),newJQuickColumnMeta("amount",Double.class,"orders")),Arrays.asList(row("id",101,"user_id",1,"amount",200.0)));JQuickDataSetresult=sql.execute("SELECT u.name, o.id AS order_id, o.amount FROM users u LEFT JOIN orders o ON u.id = o.user_id");result.printTable();}finally{sql.shutdown();}}privatestaticJQuickRowrow(Object...kv){JQuickRowr=newJQuickRow();for(inti=0;i<kv.length;i+=2)r.put((String)kv[i],kv[i+1]);returnr;}}

常见问题

**何时使用 LEFT JOIN?**需要保留主数据,即使关联表没有匹配记录时。
**可否省略列前缀?**多表字段可能重名,建议始终写u.id这类限定名。
**JOIN 是否自动连接两个数据库?**不会;先接入并注册数据集,再由 SQL 做逻辑连接。

总结与拓展

JOIN 是轻量级 SQL 引擎构建统一业务视图的核心。把上游数据标准化为具有明确类型与别名的注册表后,可在同一嵌入式执行环境中完成安全、可读的多表关联。

Core Advantage

Supported joins combine application-owned datasets through familiar SQL semantics.

Applicable Scenarios

User-order views, normalized connector outputs, local reporting, and service-side data composition.

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询