使用半连接和反连接进行子查询

SQL 数据连接

Maham Faisal Khan

Senior Content Developer, DataCamp

调用所有连接

id 字段上执行 INNER JOIN 的图示

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

SQL 数据连接

加性连接

SELECT *
FROM left_table
INNER JOIN right_table
ON left_table.id = right_table.id;
SQL 数据连接

加性连接

一个图示,解释加性连接。左侧显示两个表 left_table 和 right_table。右侧显示在两表上用 id 列进行 INNER JOIN 的结果。不同名的字段以原名加入。由于两表都含有 date 字段,它会加入两次。

SQL 数据连接

半连接

"半连接"在第二张表满足条件时,选取第一张表中的记录。

一个图示,包含两个表:left_table 和 right_table,用于演示半连接。left_table 含两列 id 与 col1。right_table 仅含一列 col2。

SQL 数据连接

半连接

一个图示,包含两个表:left_table 和 right_table,用于演示半连接。将用 col2 过滤 col1。left_table 中 col1 在 col2 中找不到匹配的记录被淡化。

SQL 数据连接

半连接

一个图示,包含两个表:left_table 和 right_table。右侧显示两表进行半连接的结果。仅返回 left_table 中在 col2 中找到匹配的 col1 记录。对应 id 为 2 和 3。

SQL 数据连接

开始我们的半连接

SELECT country, continent, president
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 数据连接

扩展半连接

SELECT country
FROM states
WHERE indep_year < 1800;
|----------|
| country  |
|----------|
| Portugal |
| Spain    |
|----------|
SQL 数据连接

完成半连接(子查询入门)

SELECT president, country, continent
FROM presidents
WHERE country IN
    (SELECT country
     FROM states
     WHERE indep_year < 1800);
|-------------------------|-----------|-------------|
| president               | country   | continent   |
|-------------------------|-----------|-------------|
| Marcelo Rebelo de Sousa | Portugal  | Europe      |
|-------------------------|-----------|-------------|
SQL 数据连接

反连接

一个图示,包含两个表:left_table 和 right_table,用于演示反连接。将用 col2 过滤 col1。left_table 中 col1 在 col2 中找不到匹配的记录未被淡化。

SQL 数据连接

反连接

一个图示,包含两个表:left_table 和 right_table。右侧显示两表进行反连接的结果。仅返回 left_table 中在 col2 中找不到匹配的 col1 记录。对应 id 为 1 和 4。

SQL 数据连接

用 presidents 表做反连接

SELECT country, president
FROM presidents
WHERE continent LIKE '%America' 
    AND country NOT IN
        (SELECT country
         FROM states
         WHERE indep_year < 1800);
| country  |  president       |
| -------- | ---------------- | 
| Uruguay  | Luis Lacalle Pou |
| Chile    | Gabriel Boric    |
SQL 数据连接

Passons à la pratique !

SQL 数据连接

Preparing Video For Download...