You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求类似zvon.org的JOOQ连接查询示例及带图形化的通用查询资源

嘿,我特意整理了一套带直观文本图形的jOOQ连接查询示例,就像你想要的那种一眼就能看懂的学习形式,涵盖了最常用的连接类型,一起来看看吧!

jOOQ连接查询直观示例集

每个示例都会先展示表关联的文本结构图,再给出jOOQ的类型安全代码,最后补充实用场景说明。

1. 内连接(INNER JOIN)

表关联结构

+-------------+       +-------------+
|  customers  |       |   orders    |
+-------------+       +-------------+
| customer_id |<----->| customer_id |  关联字段
| name        |       | order_id    |
| email       |       | order_date  |
+-------------+       +-------------+

逻辑说明:只返回两个表中匹配关联条件的记录,相当于两个集合的交集,是日常开发中最常用的连接类型。

jOOQ代码示例

// 查询所有有订单的客户及其订单信息
Result<Record> result = dslContext.select()
    .from(CUSTOMERS)
    .join(ORDERS) // join()默认就是内连接,也可以显式写innerJoin()
    .on(CUSTOMERS.CUSTOMER_ID.eq(ORDERS.CUSTOMER_ID))
    .fetch();

// 更精准的字段查询:只取客户姓名、订单ID和下单日期
Result<Record3<String, Integer, LocalDate>> specificResult = dslContext.select(
        CUSTOMERS.NAME,
        ORDERS.ORDER_ID,
        ORDERS.ORDER_DATE
    )
    .from(CUSTOMERS)
    .innerJoin(ORDERS)
    .on(CUSTOMERS.CUSTOMER_ID.eq(ORDERS.CUSTOMER_ID))
    .fetch();

2. 左外连接(LEFT OUTER JOIN)

表关联结构

+-------------+       +-------------+
|  customers  |       |   orders    |
+-------------+       +-------------+
| customer_id |<----->| customer_id |
| name        |       | order_id    |
| email       |       | order_date  |
+-------------+       +-------------+
<--------------------- 左表全保留,右表匹配不上则为null

逻辑说明:返回左表(这里是customers)的所有记录,右表中匹配关联条件的记录会被关联;如果左表的某条记录在右表中没有匹配,右表的字段会显示为null。

jOOQ代码示例

// 查询所有客户,包括没有下过单的客户
Result<Record> allCustomersWithOrders = dslContext.select()
    .from(CUSTOMERS)
    .leftJoin(ORDERS)
    .on(CUSTOMERS.CUSTOMER_ID.eq(ORDERS.CUSTOMER_ID))
    .fetch();

// 进阶:筛选出从未下过单的客户
Result<Record2<String, String>> noOrderCustomers = dslContext.select(
        CUSTOMERS.NAME,
        CUSTOMERS.EMAIL
    )
    .from(CUSTOMERS)
    .leftJoin(ORDERS)
    .on(CUSTOMERS.CUSTOMER_ID.eq(ORDERS.CUSTOMER_ID))
    .where(ORDERS.ORDER_ID.isNull())
    .fetch();

3. 右外连接(RIGHT OUTER JOIN)

表关联结构

+-------------+       +-------------+
|  customers  |       |   orders    |
+-------------+       +-------------+
| customer_id |<----->| customer_id |
| name        |       | order_id    |
| email       |       | order_date  |
+-------------+       +-------------+
                      ---------------------> 右表全保留,左表匹配不上则为null

逻辑说明:和左外连接逻辑相反,返回右表(这里是orders)的所有记录,左表匹配的记录关联,不匹配则左表字段为null。

jOOQ代码示例

// 查询所有订单,包括那些没有对应客户信息的订单(比如测试数据)
Result<Record> allOrdersWithCustomers = dslContext.select()
    .from(CUSTOMERS)
    .rightJoin(ORDERS)
    .on(CUSTOMERS.CUSTOMER_ID.eq(ORDERS.CUSTOMER_ID))
    .fetch();

4. 全外连接(FULL OUTER JOIN)

表关联结构

+-------------+       +-------------+
|  customers  |       |   orders    |
+-------------+       +-------------+
| customer_id |<----->| customer_id |
| name        |       | order_id    |
| email       |       | order_date  |
+-------------+       +-------------+
<-------------------------------------> 两张表的所有记录都保留,不匹配字段为null

逻辑说明:返回两个表的全部记录,匹配的记录关联在一起;如果某条记录在另一个表中没有匹配,对应字段显示为null。注意:部分数据库(如MySQL)原生不支持全外连接,jOOQ会自动帮你模拟实现。

jOOQ代码示例

// 查询所有客户和所有订单,不管双方有没有关联
Result<Record> allCustomersAndOrders = dslContext.select()
    .from(CUSTOMERS)
    .fullOuterJoin(ORDERS)
    .on(CUSTOMERS.CUSTOMER_ID.eq(ORDERS.CUSTOMER_ID))
    .fetch();

5. 交叉连接(CROSS JOIN)

表关联结构

+-------------+       +-------------+
|  customers  |       |   products  |
+-------------+       +-------------+
| customer_id |       | product_id  |
| name        |       | product_name|
+-------------+       +-------------+
所有客户 × 所有产品 = 笛卡尔积(每条客户记录都和每条产品记录组合)

逻辑说明:返回两个表的笛卡尔积,也就是左表的每条记录都和右表的每条记录进行组合。一般用于生成测试数据、批量生成关联关系等场景。

jOOQ代码示例

// 生成所有客户和所有产品的组合(比如用于模拟"所有客户都浏览过所有产品"的测试数据)
Result<Record> customerProductCombination = dslContext.select()
    .from(CUSTOMERS)
    .crossJoin(PRODUCTS)
    .fetch();

内容的提问来源于stack exchange,提问作者Odata Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 21:02:53