11.25 如何跨多个数据库查询——Navicat

Navicat Premium是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL、Oracle及PostgreSQL数据库,让管理不同类型的数据库更加的方便。

随着Master-Slave拓扑和数据库分片等现代实践的日益普及,数据库管理员(DBA)和开发人员比以往任何时候都更多地使用多个数据库。通过可以容纳多个数据库连接的软件,这样做变得更加容易。

这就到了Navicat Premium的用武之地。它是一个数据库开发、管理和管理工具,允许您同时连接到MySQL,MariaDB,MongoDB,SQL Server,Oracle,PostgreSQL和SQLite数据库。Navicat还兼容大多数云数据库,包括Amazon RDS,Amazon Aurora,Amazon Redshift,Microsoft Azure,Oracle Cloud,Google Cloud,阿里云,腾讯云,MongoDB Atlas和华为云。

在这篇文章中,我们将学习如何构建和执行SELECT查询,该查询将使用navicat Premium的SQL编辑器从多个数据库中获取数据。

建立环境

我们需要几个表,每个表都在自己的数据库中。碰巧的是,我们有一些Sakila示例数据库的副本。已创建了actors表的副本并将其内容拆分为中间,因此以A到L开头的名称在第一个数据库中,以M到Z开头的名称在另一个中。这将允许我们将两组名称组合成一个结果集。以下是Navicat对象窗格中的布局:

如何跨多个数据库查询——Navicat

多数据库SELECT语法

正如您可以在SELECT语句中将默认数据库中的表引用为tbl_name一样,您也可以在表名前加上数据库名称(例如db_name.tbl_name),以明确指定数据库。数据库前缀也可用于组合一个SELECT语句的表列表中的不同数据库,如FROM关键字后面指定的那样。因此,以下是有效的SQL:

SELECT database1.table1.field1,
database2.table1.field1
FROM database1.table1,
database.table1
WHERE database1.table1.age > 12;

使用表连接

您可以像往常一样加入表格;只需确保通过预先添加数据库名称来完全限定表名:

SELECT *
FROM database1.table1 T1
JOIN database2.table1 AS T2 ON T1.id = T2.id

如果您不需要在公共字段上加入表,则可以使用UNION运算符组合多个SELECT:

SELECT *
FROM database1.table1 T1
WHERE T1.age > 12
UNION
SELECT *
FROM database2.table1 T2
WHERE T2.age > 12;

现在我们知道如何一次查询两个表,让我们在actors表上尝试类似的查询。我们将选择ID在特定范围之间的actor:

SELECT T1.actor_id,
T1.first_name,
T1.last_name
FROM sakila.`actor_a-l` T1
WHERE T1.actor_id BETWEEN 30 AND 50
UNION
SELECT T2.actor_id,
T2.first_name,
T2.last_name
FROM sakila2.`actor_m-z` T2
WHERE T2.actor_id BETWEEN 30 AND 50
ORDER BY last_name;

你可以得到存在于A - L表中的演员的结果,而有些演员来自M - Z表:

如何跨多个数据库查询——Navicat

在这篇文章中,我们学习了如何构建和执行SELECT查询,以使用Navicat Premium的SQL编辑器从多个数据库中获取数据。Navicat通过获取关键字的建议并从编码中删除重复,帮助您快速编写代码完成和可自定义的代码片段。


分享到:


相關文章: