INNER JOIN ,LEFT JOIN ,RIGHT JOIN 区别
假设我们有两张数据表,一张是学生表(students),包含学生的ID、姓名和班级信息;另一张是班级表(classes),包含班级的ID和名称信息。两个表的结构如下:
students表:
id name class_id
1 小明 1
2 小李 2
3 小张 1
4 小红 3
5 小刘 NULL
classes表:
id name
1 一班
2 二班
3 三班
4 四班
现在我们要查询每个学生所在的班级名称,可以使用JOIN操作来实现。不同JOIN操作的区别如下:
INNER JOIN:内连接,只返回两个表中都有匹配的记录。
SELECT students.name, classes.name AS class_name
FROM students
INNER JOIN classes
ON students.class_id = classes.id;
返回结果:
name class_name
小明 一班
小李 二班
小张 一班
小红 三班
解释:INNER JOIN会返回两个表中都有匹配的记录,因此只有四个学生的班级信息被返回了,而没有班级信息的小刘则被忽略了。
LEFT JOIN:左连接,返回左表中所有记录以及在右表中存在匹配的记录。
SELECT students.name, classes.name AS class_name
FROM students
LEFT JOIN classes
ON students.class_id = classes.id;
返回结果:
name class_name
小明 一班
小李 二班
小张 一班
小红 三班
小刘 NULL
解释:LEFT JOIN会返回左表(即students表)中所有记录,即使在右表(即classes表)中没有匹配的记录。因此,所有学生的信息都被返回了,而没有班级信息的小刘则被返回了,但是班级名称为NULL。
RIGHT JOIN:右连接,返回右表中所有记录以及在左表中存在匹配的记录。
SELECT students.name, classes.name AS class_name
FROM students
RIGHT JOIN classes
ON students.class_id = classes.id;
返回结果:
name class_name
小明 一班
小李 二班
小张 一班
小红 三班
NULL 四班
解释:RIGHT JOIN会返回右表(即classes表)中所有记录,即使在左表(即students表)中没有匹配的记录。因此,所有班级的信息都被返回了,而没有学生的四班则被返回了,但是学生姓名为NULL。
还没有评论,来说两句吧...