MySQL实现三个表的外连接(mysql 三表外连接)

MySQL实现三个表的外连接

在MySQL中,外连接是指可以连接两个或多个表中的数据,不管它们是否有对应的匹配数据。在实际应用中,有时候需要使用三个或更多的表进行连接。本文将演示如何使用MySQL实现三个表的外连接。

下面以学生、课程和成绩三个表为例,分别存储了学生信息、课程信息和学生成绩信息。

学生表(students):

| id | name | age | gender |

|—-|———|—–|——–|

| 1 | 张三 | 18 | 男 |

| 2 | 李四 | 19 | 女 |

| 3 | 王五 | 20 | 男 |

| 4 | 赵六 | 19 | 女 |

课程表(courses):

| id | name | teacher |

|—-|———-|———|

| 1 | 语文 | 张老师 |

| 2 | 数学 | 李老师 |

| 3 | 英语 | 王老师 |

| 4 | 物理 | 赵老师 |

成绩表(scores):

| id | student_id | course_id | score |

|—-|————|———-|——-|

| 1 | 1 | 1 | 80 |

| 2 | 1 | 2 | 90 |

| 3 | 1 | 3 | 85 |

| 4 | 2 | 1 | 95 |

| 5 | 2 | 3 | 70 |

| 6 | 3 | 1 | 75 |

| 7 | 3 | 2 | 85 |

| 8 | 3 | 3 | 90 |

| 9 | 4 | 1 | 80 |

| 10 | 4 | 2 | 85 |

| 11 | 4 | 3 | 70 |

现在需要查询每个学生的姓名、年龄、性别、选修了哪些课程及对应的成绩情况。由于成绩表中只有学生ID和课程ID对应的成绩,所以需要使用外连接才能获取到全部信息。

具体实现:

使用以下SQL语句进行三个表的外连接:

SELECT students.name, students.age, students.gender, courses.name AS course_name, scores.score
FROM students
LEFT JOIN scores ON students.id = scores.student_id
LEFT JOIN courses ON scores.course_id = courses.id
ORDER BY students.id, courses.id;

该语句首先使用LEFT JOIN连接students表和scores表,以便获取每个学生的成绩信息。然后再使用LEFT JOIN连接scores表和courses表,以便获取每个成绩对应的课程信息。最后将结果按学生ID和课程ID排序,即可得到完整的信息。

执行上述语句后,将得到以下输出结果:

| name | age | gender | course_name | score |

|——|—–|——–|————|——-|

| 张三 | 18 | 男 | 语文 | 80 |

| 张三 | 18 | 男 | 数学 | 90 |

| 张三 | 18 | 男 | 英语 | 85 |

| 李四 | 19 | 女 | 语文 | 95 |

| 李四 | 19 | 女 | 数学 | NULL |

| 李四 | 19 | 女 | 英语 | 70 |

| 王五 | 20 | 男 | 语文 | 75 |

| 王五 | 20 | 男 | 数学 | 85 |

| 王五 | 20 | 男 | 英语 | 90 |

| 赵六 | 19 | 女 | 语文 | 80 |

| 赵六 | 19 | 女 | 数学 | 85 |

| 赵六 | 19 | 女 | 英语 | 70 |

可以看到,每个学生的信息都出现了多次,分别对应了不同的成绩和课程,同时也可以看到李四在数学科目上没有成绩。

补充几个相关的概念:

1. INNER JOIN(内连接):连接两个或多个表中的数据,只返回它们之间有匹配的数据。

2. LEFT JOIN(左外连接):连接两个或多个表中的数据,返回左表中所有的数据,以及右表中与之对应的信息,没有对应数据的字段对应NULL。

3. RIGHT JOIN(右外连接):连接两个或多个表中的数据,返回右表中所有的数据,以及左表中与之对应的信息,没有对应数据的字段对应NULL。

4. FULL JOIN(全外连接):连接两个或多个表中的数据,返回左表和右表中所有的数据,只要有一边没有对应数据,那么该数据的字段就对应NULL。

总结:

通过以上的分析,了解了MySQL如何实现三个表的外连接,并学会使用LEFT JOIN语句连接多个表的数据。掌握这些技能可以为日常开发和数据分析带来更多便利。


数据运维技术 » MySQL实现三个表的外连接(mysql 三表外连接)