隨著主從(Master-Slave)拓撲和資料庫分區化等現代實踐變得越來越普遍,資料庫管理員(DBA)和開發人員比以往更常同時存取多個資料庫。透過使用可以容納多個資料庫連線的軟體,令這些工作變得更加容易。
Navicat Premium 就是專為這工作而設的。它是一套資料庫開發和管理工具,讓你同時連接 MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 資料庫。它亦與 Amazon RDS、Amazon Aurora、Amazon Redshift、Microsoft Azure、Oracle Cloud、Google Cloud、Alibaba Cloud、Tencent Cloud、MongoDB Atlas 和 Huawei Cloud 等雲端資料庫相容。
在今天的文章中,我們將學習如何構建和執行 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 資料表:
總結
在本篇文章中,我們學習了如何使用 Navicat Premium的SQL編輯器構建和執行 SELECT 查詢,從多個資料庫中取得資料。Navicat 的自動完成程式碼和自訂的程式碼片段功能透過關鍵字建議和減少重複輸入相同的程式碼,令編碼更加快速。你可以免費試用14天進行評估。你可以免費試用 14 天進行評估。