多重连接

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;

注意。 视场景而定,ON 子句中可使用 left_tableright_table

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 连接。结果包含五列:country、continent、president、prime_minister 和 pm_start。

SQL 数据连接

连接链式化

-- SQL query for chaining inner joins
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;
基于 id 字段的 INNER JOIN 示意图

一个示意图:当按单一列匹配时,左表的连接字段在右表中可能找到多条匹配。结果集中,每个匹配到的右表 id 会产生多行记录。

SQL 数据连接

按多个键连接

SELECT * 
FROM left_table
INNER JOIN right_table
ON left_table.id = right_table.id
    AND left_table.date = right_table.date;
基于 iddate 字段的 INNER JOIN 示意图

一个示意图:当使用多个连接字段时,返回记录数可减少。此处用 id 与 date 同时连接两张表。

SQL 数据连接

Passons à la pratique !

SQL 数据连接

Preparing Video For Download...