多重連接

在 SQL 中進行資料連接

Maham Faisal Khan

Senior Content Developer, DataCamp

連接再連接

SELECT *
FROM left_table
INNER JOIN right_table
ON left_table.id = right_table.id

INNER JOIN another_table ON left_table.id = another_table.id;

注意。 視情況而定,left_tableright_table 都可以用在 ON 子句中。

在 SQL 中進行資料連接

連接再連接

我們的世界領袖資料庫中的 prime_minister_terms 資料表

prime_minister_terms 資料表,包含兩欄:prime_minister 的姓名與就任年份。

在 SQL 中進行資料連接

先連接哪個?

SELECT p1.country, p1.continent, 
       president, prime_minister
FROM prime_ministers as p1
INNER JOIN presidents as p2
USING(country);
| country  | continent     | president               | prime_minister   |
| -------- | ------------- | ----------------------- | ---------------- |
| Egypt    | Africa        | Abdel Fattah el-Sisi    | Mostafa Madbouly |
| Portugal | Europe        | Marcelo Rebelo de Sousa | Luís Montenegro  |
| Pakistan | Asia          | Asif Ali Zardari        | Shehbaz Sharif   |
| India    | Asia          | Droupadi Murmu          | Narendra Modi    |
在 SQL 中進行資料連接

串接多個連接

一個圖示:將前一張投影片合併結果(presidents 與 prime_ministers)再與新資料表 prime_minister_terms 合併。結果包含 5 欄:country、continent、president、prime_minister、pm_start。

在 SQL 中進行資料連接

串接多個連接

-- 連續使用 INNER JOIN 的 SQL 查詢
SELECT 
    p1.country, 
    p1.continent, 
    president, 
    prime_minister, 
    pm_start
FROM prime_ministers as p1
INNER JOIN presidents as p2
USING(country)

INNER JOIN prime_minister_terms as p3 USING(prime_minister);
在 SQL 中進行資料連接

我們用哪些欄位來連接?

SELECT * 
FROM left_table
INNER JOIN right_table
ON left_table.id = right_table.id;
INNER JOIN 並在 id 欄位上使用 ON 的示意圖

一個圖示:當只用一個欄位比對時,左表的連接欄位有時會在右表找到多筆相符。結果集中,左表每個 id 會對應右表的多筆記錄。

在 SQL 中進行資料連接

使用多鍵連接

SELECT * 
FROM left_table
INNER JOIN right_table
ON left_table.id = right_table.id
    AND left_table.date = right_table.date;
INNER JOINON 中使用 iddate 欄位的示意圖

一個圖示:若使用多個連接欄位,結果集的筆數可被縮減。此處同時使用 id 與 date 來連接兩個資料表。

在 SQL 中進行資料連接

一起來練習吧!

在 SQL 中進行資料連接

Preparing Video For Download...