navicat跨库查询

利用navicat进行跨库查询(2019 年 6 月 4 日,由 Robert Gravelle 撰写转载)

 

随着主从(Master-Slave)拓扑和数据库分片等现代实践变得越来越普遍,数据库管理员(DBA)和开发人员比以往更常同时访问多个数据库。通过使用可以容纳多个数据库连接的软件,令这些工作变得更加容易。

Navicat Premium就是专为这工作而设。它是一套数据库开发工具,让你同时连接 MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 数据库。它亦与 Amazon RDS、Amazon Aurora、Amazon Redshift、Microsoft Azure、Oracle Cloud、MongoDB Atlas、阿里云、腾讯云和华为云等云数据库兼容。

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

设置环境

我们需要几个表,每个表都在自己的数据库中。碰巧的是,我有一些 Sakila 示例数据库的副本。我已创建了 actors 表的副本并将其内容在中间拆分为两组,以 A 到 L 开头的名称在第一个数据库中,以 M 到 Z 开头的名称在另一个数据库中。我们将会将两组名称组合成一个结果集。以下是 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;

使用 JOIN

你可以像往常一样联接(JOIN)表。只需通过在表前添加数据库名称来确保完全限定表名称:

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

如果您不需要用公共字段联接(JOIN)表,则可以使用 UNION 运算符组合多个 SELECT 语句:

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

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

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 表:

 

 

 注意:不适用于跨服务器查询。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值