SQL 内连接和外连接的区别:详细解释与示例
内连接和外连接是关系数据库中的两种连接方式,用于将两个或多个表中的数据组合在一起。
-
内连接 (INNER JOIN):内连接仅返回两个表中满足连接条件的行。也就是说,只有当两个表中的某一列值匹配时,才会返回结果。内连接只返回两个表中共同匹配的行,不包含任何不匹配的行。
-
外连接 (OUTER JOIN):外连接在返回满足连接条件的行之外,还包含不满足条件的行。外连接分为三种类型:
-
左外连接 (LEFT OUTER JOIN):左外连接会返回左表中的所有行,以及满足条件的右表中的匹配行。如果右表中没有匹配的行,则返回 NULL 值。
-
右外连接 (RIGHT OUTER JOIN):右外连接会返回右表中的所有行,以及满足条件的左表中的匹配行。如果左表中没有匹配的行,则返回 NULL 值。
-
全外连接 (FULL OUTER JOIN):全外连接会返回左表和右表中的所有行,不论是否存在匹配的行。如果没有匹配的行,则返回 NULL 值。
总结: 内连接只返回匹配的行,外连接则可以返回不匹配的行。
示例:
假设有两个表,students 和 courses,它们分别包含学生信息和课程信息。
-- 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 |
+----+--------+--------+----+----------+--------+
通过以上示例可以更直观地理解内连接和外连接的区别。选择合适的连接方式取决于具体的查询需求。
原文地址: https://www.cveoy.top/t/topic/paWn 著作权归作者所有。请勿转载和采集!