内连接和外连接是关系数据库中的两种连接方式,用于将两个或多个表中的数据组合在一起。

  1. 内连接 (INNER JOIN):内连接仅返回两个表中满足连接条件的行。也就是说,只有当两个表中的某一列值匹配时,才会返回结果。内连接只返回两个表中共同匹配的行,不包含任何不匹配的行。

  2. 外连接 (OUTER JOIN):外连接在返回满足连接条件的行之外,还包含不满足条件的行。外连接分为三种类型:

  • 左外连接 (LEFT OUTER JOIN):左外连接会返回左表中的所有行,以及满足条件的右表中的匹配行。如果右表中没有匹配的行,则返回 NULL 值。

  • 右外连接 (RIGHT OUTER JOIN):右外连接会返回右表中的所有行,以及满足条件的左表中的匹配行。如果左表中没有匹配的行,则返回 NULL 值。

  • 全外连接 (FULL OUTER JOIN):全外连接会返回左表和右表中的所有行,不论是否存在匹配的行。如果没有匹配的行,则返回 NULL 值。

总结: 内连接只返回匹配的行,外连接则可以返回不匹配的行。

示例:

假设有两个表,studentscourses,它们分别包含学生信息和课程信息。

-- Students 表
+----+--------+--------+
| ID | Name   | Age    |
+----+--------+--------+
| 1  | Alice  | 20     |
| 2  | Bob    | 22     |
| 3  | Charlie| 21     |
+----+--------+--------+

-- Courses 表
+----+----------+--------+
| ID | Name      | Teacher |
+----+----------+--------+
| 1  | Math     | Smith   |
| 2  | Physics  | Jones   |
| 3  | History  | Brown   |
+----+----------+--------+

内连接:

SELECT * FROM students INNER JOIN courses ON students.ID = courses.ID;

结果:

+----+--------+--------+----+----------+--------+
| ID | Name   | Age    | ID | Name      | Teacher |
+----+--------+--------+----+----------+--------+
| 1  | Alice  | 20     | 1  | Math     | Smith   |
+----+--------+--------+----+----------+--------+

左外连接:

SELECT * FROM students LEFT OUTER JOIN courses ON students.ID = courses.ID;

结果:

+----+--------+--------+----+----------+--------+
| ID | Name   | Age    | ID | Name      | Teacher |
+----+--------+--------+----+----------+--------+
| 1  | Alice  | 20     | 1  | Math     | Smith   |
| 2  | Bob    | 22     | NULL| NULL      | NULL    |
| 3  | Charlie| 21     | NULL| NULL      | NULL    |
+----+--------+--------+----+----------+--------+

右外连接:

SELECT * FROM students RIGHT OUTER JOIN courses ON students.ID = courses.ID;

结果:

+----+--------+--------+----+----------+--------+
| ID | Name   | Age    | ID | Name      | Teacher |
+----+--------+--------+----+----------+--------+
| 1  | Alice  | 20     | 1  | Math     | Smith   |
| NULL| NULL   | NULL    | 2  | Physics  | Jones   |
| NULL| NULL   | NULL    | 3  | History  | Brown   |
+----+--------+--------+----+----------+--------+

全外连接:

SELECT * FROM students FULL OUTER JOIN courses ON students.ID = courses.ID;

结果:

+----+--------+--------+----+----------+--------+
| ID | Name   | Age    | ID | Name      | Teacher |
+----+--------+--------+----+----------+--------+
| 1  | Alice  | 20     | 1  | Math     | Smith   |
| 2  | Bob    | 22     | NULL| NULL      | NULL    |
| 3  | Charlie| 21     | NULL| NULL      | NULL    |
| NULL| NULL   | NULL    | 2  | Physics  | Jones   |
| NULL| NULL   | NULL    | 3  | History  | Brown   |
+----+--------+--------+----+----------+--------+

通过以上示例可以更直观地理解内连接和外连接的区别。选择合适的连接方式取决于具体的查询需求。

SQL 内连接和外连接的区别:详细解释与示例

原文地址: https://www.cveoy.top/t/topic/paWn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录