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
反馈
您对此页面有任何反馈吗? 我们很乐意听到您的意见!