# 跨数据库查询

> For the complete documentation index, see [llms.txt](https://www.jetbrains.com/zh-cn/help/idea/llms.txt).

Procedure: 启用 数据库工具和 SQL 插件

此功能依赖于 数据库工具和 SQL 插件，该插件默认情况下在 IntelliJ IDEA 中绑定并启用。 如果相关功能不可用，请确保您没有禁用插件。

> **Note:**
> 没有 Ultimate 订阅时，数据库工具和 SQL 的功能支持在 IntelliJ IDEA 中受限。

1. 按 `Ctrl+Alt+S` (Windows), `⌘ Comma` (macOS), `⌘ Comma` (IntelliJ IDEA Classic (macOS)), `⌘ Comma` (macOS System Shortcuts), `Ctrl+Alt+S` (XWin), `Ctrl+Alt+S` (GNOME), `Ctrl+Alt+S` (KDE), `Ctrl+Alt+S` (Emacs), `Ctrl+Alt+S` (Sublime Text), `⌘ Comma` (Sublime Text (macOS)), `Ctrl+Alt+S` (Visual Studio), `⌘ Comma` (Visual Studio (macOS)), `Ctrl+Alt+S` (NetBeans), `Ctrl+Alt+S` (Eclipse), `⌘ Comma` (Eclipse (macOS)) 打开设置，然后选择  `插件` 。

2. 找到  数据库工具和 SQL  插件并点击   启用  。

在 IntelliJ IDEA 中，可以跨不同数据库查询数据并直接查看结果，而无需事先复制数据。 IDE 提供专用的   工作区   数据源，作为 IntelliJ IDEA 与所查询数据库之间的中介。 使用其 查询控制台s，通过 `Ctrl+Space` (Windows), `⌃ Space` (macOS), `⌃ Space` (IntelliJ IDEA Classic (macOS)), `⌃ Space` (macOS System Shortcuts), `Ctrl+Space` (XWin), `Ctrl+Space` (GNOME), `Ctrl+Space` (KDE), `Alt+/` (Emacs), `Ctrl+Space` (Sublime Text), `⌃ Space` (Sublime Text (macOS)), `Ctrl+Space` (Visual Studio), `⌃ Space` (Visual Studio (macOS)), `Ctrl+Space` (NetBeans), `Ctrl+Space` (Eclipse), `⌃ Space` (Eclipse (macOS)) 代码补全和 [特殊语法](#syntax)编写并执行 SQL 查询。

## 工作区数据源

工作区   数据源基于 [DuckDB](duckdb.html)，默认创建内存中的 DuckDB 数据库。 每个项目可以有一个   工作区   数据源，并可根据需要使用任意数量的 查询控制台s。

![工作区数据源设置](https://resources.jetbrains.com/help/img/idea/2026.3/db_workspace_data_source_settings.png)

Procedure: 创建工作区数据源

* 在   数据库   工具窗口工具栏上，点击 !["添加"图标](https://resources.jetbrains.com/help/img/idea/2026.3/app-client.expui.general.add.svg)   添加  ，然后选择 ![工作区数据源图标](https://resources.jetbrains.com/help/img/idea/2026.3/app.expui.nodes.homeFolder.png)   工作区数据源  。

IntelliJ IDEA 会将数据源添加到   数据库   工具窗口中的列表，并自动打开其默认 查询控制台。

![工作区数据源设置](https://resources.jetbrains.com/help/img/idea/2026.3/db_workspace_data_source_menu.png)

## 语法

在   工作区   数据源 查询控制台 中，可以使用以下语法引用其他数据源中的表：

* 要直接引用表，请指定其数据源和表名称。 需要时添加数据库和架构： ``` #data_source[.database.schema].table ```

* 要对表应用筛选器，请将 `#filter(...)` 添加到引用中： ``` #data_source[.database.schema].table.#filter('condition') ```

* 也可以使用 `#query(...)` 对数据源运行查询： ``` #data_source[.database.schema].#query('query') ```

在  `#filter(...)`  和  `#query(...)`  中，可以使用  `$$...$$`  美元引用字符串，而不是单引号引用形式：  `#filter($$condition$$)`  和  `#query($$query$$)` 。

键入  `#` ，使用代码补全选择数据源。

![跨数据库查询中的代码补全](https://resources.jetbrains.com/help/img/idea/2026.3/db_cross_database_code_completion.png)

## 示例

以下是一些语法示例，使用   PostgreSQL   和   MySQL   数据源及其各自的 Sakila 数据库：

* 为引用表中的行应用筛选器： ``` SELECT * FROM #PostgreSQL.guest.public.customer.#filter('customer_id > 100'); ``` ![对引用表中的行应用筛选器的跨数据库查询示例](https://resources.jetbrains.com/help/img/idea/2026.3/db_cross_database_query_filter.png)

* 对引用的数据源运行查询： ``` SELECT * FROM #PostgreSQL.guest.public.#query($$ SELECT customer_id, amount FROM payment WHERE amount > 5 $$); ``` ![对引用数据源运行查询的跨数据库查询示例](https://resources.jetbrains.com/help/img/idea/2026.3/db_cross_database_query_query.png)

* 联接来自 PostgreSQL 和 MySQL 数据源的数据： ``` SELECT c.first_name, c.last_name, p.amount FROM #PostgreSQL.guest.public.customer c JOIN #MySQL.sakila.payment p ON c.customer_id = p.customer_id; ``` ![联接来自 PostgreSQL 和 MySQL 数据源的数据的跨数据库查询示例](https://resources.jetbrains.com/help/img/idea/2026.3/db_cross_database_query_join.png)

