当两个表进行连接时,LEFT JOIN 和 INNER JOIN 的区别主要体现在返回结果的方式。下面我将举例说明:
假设我们有两个表:学生表(students)和班级表(classes),它们的结构如下:
学生表(students):
+----+---------+--------+
| ID | Name | ClassID|
+----+---------+--------+
| 1 | Alice | 101 |
| 2 | Bob | 102 |
| 3 | Charlie | 103 |
+----+---------+--------+
班级表(classes):
+----------+--------+
| ClassID | Name |
+----------+--------+
| 101 | A |
| 102 | B |
+----------+--------+
1.INNER JOIN 内连接:
INNER JOIN 返回两个表中满足连接条件的匹配行。
示例查询:
SELECT students.Name, classes.Name
FROM students
INNER JOIN classes
ON students.ClassID = classes.ClassID;
查询结果:
+---------+-------+
| Name | Name |
+---------+-------+
| Alice | A |
| Bob | B |
+---------+-------+
2.LEFT JOIN 左连接:
LEFT JOIN 返回左表(students)中的所有行,以及满足连接条件的右表(classes)中的匹配行。
如果在右表中没有匹配的行,则右表中的相应列将显示为 NULL 值。
示例查询:
SELECT students.Name, classes.Name
FROM students
LEFT JOIN classes
ON students.ClassID = classes.ClassID;
查询结果:
+---------+-------+
| Name | Name |
+---------+-------+
| Alice | A |
| Bob | B |
| Charlie | NULL |
+---------+-------+
3.RIGHT JOIN 右连接:
该查询语句将返回右表(classes)中的所有行和与之匹配的左表(students)中的行,如果右表中没有与左表匹配的行,则左表中的列将显示 NULL。
示例查询:
SELECT students.Name, classes.Name
FROM students
RIGHT JOIN classes
ON students.ClassID = classes.ClassID;
查询结果为:
+---------+-------+
| Name | Name |
+---------+-------+
| Alice | A |
| Bob | B |
| NULL | C |
+---------+-------+
这里是左表、右表是指什么?
通常情况下,我们将第一个出现在 SQL 语句中的表称为左表,将第二个出现的表称为右表。
join 在没有指定类型的情况下,我们都默认为inner join