用于 SQL 连接的集合论

SQL 数据连接

Maham Faisal Khan

Senior Content Developer, DataCamp

维恩图与集合论

一幅图包含三个维恩图:UNION、INTERSECT 和 EXCEPT。UNION 的两个重叠圆整体为绿色;INTERSECT 仅重叠部分为绿色;EXCEPT 仅左圆与右圆不重叠的部分为绿色。

SQL 数据连接

维恩图与集合论

一张图展示三个维恩图,其中两个被弱化。仅 UNION 图清晰可见,两个重叠圆整体为绿色。

SQL 数据连接

UNION 示意图

  • UNION 接受两张表,返回两表的所有记录

一个图示显示两张表(左、右)。右侧展示对两表执行 UNION 的结果。

SQL 数据连接

UNION ALL 示意图

  • UNION ALL 接受两张表,返回两表所有记录(包含重复)

一个图示显示两张表(左、右)。右侧展示对两表执行 UNION ALL 的结果。

SQL 数据连接

UNION 与 UNION ALL 语法

UNION 语法

SELECT *
FROM left_table
UNION
SELECT *
FROM right_table;

UNION ALL 语法

SELECT *
FROM left_table
UNION ALL
SELECT *
FROM right_table;
SQL 数据连接

UNION 与 UNION ALL 语法

一个图示显示左、右两张表。右侧展示对两表执行 UNION 的结果。箭头标注左、右表需具有相同数量且类型匹配的列。

SQL 数据连接

UNION 与 UNION ALL 语法

一个图示显示左、右两张表。右侧展示对两表执行 UNION 的结果。箭头标注左、右表需具有相同数量且类型匹配的列。右侧结果集显示字段名沿用右表(即使有别名)。

SQL 数据连接

查看 monarchs 表

SELECT *
FROM monarchs;
| country        | continent   | monarch                 |
|----------------|-------------|-------------------------|
| Brunei         | Asia        | Hassanal Bolkiah        |
| Oman           | Asia        | Haitham bin Tarik       |
| Norway         | Europe      | Harald V                |
| United Kingdom | Europe      | Charles III             |
SQL 数据连接

首相遇见君主

SELECT monarch AS leader, country
FROM monarchs
UNION
SELECT prime_minister, country
FROM prime_ministers
ORDER BY country, leader
LIMIT 10;
SQL 数据连接

UNION 之后

|-------------------------|----------------|
| leader                  | country        |
|-------------------------|----------------|
| Anthony Albanese        | Australia      |
| Hassanal Bolkiah        | Brunei         |
| Mostafa Madbouly        | Egypt          |
| Narendra Modi           | India          |
| Christopher Luxon       | New Zealand    |
| Harald V                | Norway         |
| Jonas Gahr Støre        | Norway         |
| Haitham bin Tarik       | Oman           |
| Shehbaz Sharif          | Pakistan       |
| Luís Montenegro         | Portugal       |
|-------------------------|----------------|
SQL 数据连接

用 UNION ALL 合并领导人

SELECT monarch AS leader, country
FROM monarchs
UNION ALL
SELECT prime_minister, country
FROM prime_ministers
ORDER BY leader, country
LIMIT 10;
SQL 数据连接

UNION ALL 结果

| leader                  | country        |
|-------------------------|----------------|
| Anthony Albanese        | Australia      |
| Hassanal Bolkiah        | Brunei         |
| Hassanal Bolkiah        | Brunei         |
| Mostafa Madbouly        | Egypt          |
| Narendra Modi           | India          |
| Christopher Luxon       | New Zealand    |
| Harald V                | Norway         |
| Jonas Gahr Støre        | Norway         |
| Haitham bin Tarik       | Oman           |
| Haitham bin Tarik       | Oman           |
SQL 数据连接

Let's practice!

SQL 数据连接

Preparing Video For Download...