INNER JOIN ,LEFT JOIN ,RIGHT JOIN 区别

た 入场券 2023-10-12 12:43 126阅读 0赞

假设我们有两张数据表,一张是学生表(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:内连接,只返回两个表中都有匹配的记录。

  1. SELECT students.name, classes.name AS class_name
  2. FROM students
  3. INNER JOIN classes
  4. ON students.class_id = classes.id;

返回结果:

name class_name
小明 一班
小李 二班
小张 一班
小红 三班
解释:INNER JOIN会返回两个表中都有匹配的记录,因此只有四个学生的班级信息被返回了,而没有班级信息的小刘则被忽略了。

  1. 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。

  1. 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。

发表评论

表情:
评论列表 (有 0 条评论,126人围观)

还没有评论,来说两句吧...

相关阅读