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 studentsLEFT JOIN scores ON students.id = scores.student_id
LEFT JOIN courses ON scores.course_id = courses.idORDER 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语句连接多个表的数据。掌握这些技能可以为日常开发和数据分析带来更多便利。