深入理解 INNER JOIN

SQL 数据连接

Maham Faisal Khan

Senior Content Developer, DataCamp

深入理解 INNER JOIN

一个图示显示两张表:左表与右表。左右表中相同的 id 使用相同颜色显示。

SQL 数据连接

深入理解 INNER JOIN

  • INNER JOIN 在两张表中查找在给定字段上匹配的记录
基于 id 字段的 INNER JOIN 示意图

一个图示显示两张表:left_table 和 right_table。左右表中匹配的 id 使用相同颜色,并用箭头连接。

SQL 数据连接

深入理解 INNER JOIN

基于 id 字段 ONINNER JOIN 示意图

一个图示显示两张表:left_table 和 right_table。对 INNER JOIN 无关的记录被淡化显示。

SQL 数据连接

深入理解 INNER JOIN

基于 id 字段 ONINNER JOIN 示意图

一个图示显示两张表:left_table 和 right_table。右侧为连接结果,仅返回两表在 id 列上匹配的记录。

SQL 数据连接

leadership 数据库架构

截至 2024 年的世界领导人: 一个 SQL 架构图,显示 leadership 数据库中的三张表:presidents、prime_ministers、prime_minister_terms。presidents 与 prime_minister 可在 country 字段上连接,prime_ministers 与 prime_minister_terms 可在 prime_minister 字段上连接。

SQL 数据连接

总统表一览

SELECT * 
FROM presidents;
| country  | continent     | president               |
|----------|---------------|-------------------------|
| Egypt    | Africa        | Abdel Fattah el-Sisi    |
| Portugal | Europe        | Marcelo Rebelo de Sousa | 
| USA      | North America | Joe Biden               |
| Uruguay  | South America | Luis Lacalle Pou        |
| Pakistan | Asia          | Asif Ali Zardari        |
| Chile    | South America | Gabriel Boric           |
| India    | Asia          | Droupadi Murmu          |
SQL 数据连接

认识总理表

prime_ministers

来自 leadership 数据库的 prime_ministers 表,含三列:country、continent、prime_minister。

SQL 数据连接

总理表与总统表对接

presidents

并排显示两张表:presidents 和 prime_minister。两表中的匹配列以相同颜色标注。

prime_ministers

并排显示两张表:presidents 和 prime_minister。两表中的匹配列以相同颜色标注。

SQL 数据连接

首次使用 INNER JOIN

--Inner join of presidents and prime_ministers, joining on country

SELECT prime_ministers.country, prime_ministers.continent, prime_minister, president
FROM presidents
INNER JOIN prime_ministers
ON presidents.country = prime_ministers.country;

注意。 当在两个表中都存在的列进行选择时,须使用 table.column_name 格式以避免 SQL 错误。

| country        | continent | prime_minister   | president               |
|----------------|-----------|------------------|-------------------------|
| Egypt          | Africa    | Mostafa Madbouly | Abdel Fattah el-Sisi    |
| Portugal       | Europe    | Luís Montenegro  | Marcelo Rebelo de Sousa |
| Pakistan       | Asia      | Shehbaz Sharif   | Asif Ali Zardari        |
| India          | Asia      | Narendra Modi    | Ram Nath Kovind         |
SQL 数据连接

表别名(Aliasing)

--Inner join of presidents and prime_ministers, joining on country

SELECT p2.country, p2.continent, prime_minister, president
FROM presidents AS p1 INNER JOIN prime_ministers AS p2
ON p1.country = p2.country;
| country        | continent | prime_minister   | president               |
|----------------|-----------|------------------|-------------------------|
| Egypt          | Africa    | Mostafa Madbouly | Abdel Fattah el-Sisi    |
| Portugal       | Europe    | Luís Montenegro  | Marcelo Rebelo de Sousa |
| Pakistan       | Asia      | Shehbaz Sharif   | Asif Ali Zardari        |
| India          | Asia      | Narendra Modi    | Ram Nath Kovind         |

可在 SELECTON 子句中的 table.column_name 语法里使用别名。

SQL 数据连接

使用 USING

--Inner join of presidents and prime_ministers, joining on country
SELECT p2.country, p2.continent, prime_minister, president
FROM presidents AS p1
INNER JOIN prime_ministers AS p2
USING(country);
| country        | continent | prime_minister   | president               |
|----------------|-----------|------------------|-------------------------|
| Egypt          | Africa    | Mostafa Madbouly | Abdel Fattah el-Sisi    |
| Portugal       | Europe    | Luís Montenegro  | Marcelo Rebelo de Sousa |
| Pakistan       | Asia      | Shehbaz Sharif   | Asif Ali Zardari        |
| India          | Asia      | Narendra Modi    | Ram Nath Kovind         |
SQL 数据连接

让我们来练习!

SQL 数据连接

Preparing Video For Download...