可用版本: Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

INNER JOIN

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

INNER JOIN 或仅 JOIN 的工作方式类似于 CROSS JOIN,但添加了某种谓词来过滤掉不需要的组合。 这是连接表最流行的方式,因为我们几乎从不想组合来自两个表的任意行,而是组合那些彼此之间存在某种关系的行,例如,FOREIGN KEY 引用匹配。

SELECT *
FROM AUTHOR
JOIN BOOK ON BOOK.AUTHOR_ID = AUTHOR.ID
 
create.select()
      .from(AUTHOR)
      .join(BOOK).on(BOOK.AUTHOR_ID.eq(AUTHOR.ID))
      .fetch();

上面的查询将返回所有作者及其书籍。 符合 INNER JOIN 的本质,没有书籍的作者以及没有作者的书籍(如果 FOREIGN KEY 是可选的)也会被排除。

结果可能如下所示

+------------+-----------+--------------+
| FIRST_NAME | LAST_NAME | TITLE        |
+------------+-----------+--------------+
| George     | Orwell    | 1984         |
| George     | Orwell    | Animal Farm  |
| Paulo      | Coelho    | O Alquimista |
| Paulo      | Coelho    | Brida        |
+------------+-----------+--------------+

在该示例中,我们使用 ON 子句 来构成 JOIN 谓词,但其他选项也将在后面的章节中讨论。

INNER 关键字在 SQL 和 jOOQ 中都是可选的,并且根本不会影响查询语义。

方言支持

此示例使用 jOOQ

select(BOOK.ID, AUTHOR.ID).from(BOOK.join(AUTHOR).on(BOOK.AUTHOR_ID.eq(AUTHOR.ID)))

翻译成以下特定方言的表达式

访问

SELECT BOOK.ID, AUTHOR.ID
FROM BOOK
  INNER JOIN AUTHOR
    ON BOOK.AUTHOR_ID = AUTHOR.ID

ASE, Aurora MySQL, Aurora Postgres, BigQuery, ClickHouse, CockroachDB, DB2, Databricks, Derby, DuckDB, Exasol, Firebird, H2, HSQLDB, Hana, Informix, MariaDB, MemSQL, MySQL, Oracle, Postgres, Redshift, SQLDataWarehouse, SQLServer, SQLite, Snowflake, Sybase, Teradata, Trino, Vertica, YugabyteDB

SELECT BOOK.ID, AUTHOR.ID
FROM BOOK
  JOIN AUTHOR
    ON BOOK.AUTHOR_ID = AUTHOR.ID
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

反馈

您对此页面有任何反馈吗? 我们很乐意听到您的意见!

The jOOQ Logo