MySQL三张表关联查询练习

在MySQL数据库中,关联查询是非常常见且重要的操作。通过关联查询,我们可以从多张表中获取到我们想要的数据,从而实现更加复杂和灵活的查询功能。本文将通过一个示例,介绍如何在MySQL中进行三张表的关联查询,并给出相应的代码示例。

示例背景

假设我们有三张表:学生表课程表成绩表。学生表包含学生的基本信息,课程表包含开设的课程信息,成绩表记录了学生的课程成绩。三张表的结构如下:

学生表(students)

列名 数据类型 说明
id INT 学生ID
name VARCHAR 学生姓名
gender VARCHAR 学生性别
birthday DATE 出生日期

课程表(courses)

列名 数据类型 说明
id INT 课程ID
name VARCHAR 课程名称
teacher VARCHAR 授课教师
semester VARCHAR 学期

成绩表(scores)

列名 数据类型 说明
id INT 成绩ID
student_id INT 学生ID
course_id INT 课程ID
score DECIMAL 课程成绩

我们的目标是通过关联这三张表,查询出学生的姓名、课程名称和对应的成绩。

示例代码

下面是一个基于上述示例的MySQL关联查询示例代码:

-- 查询学生的姓名、课程名称和对应的成绩
SELECT s.name AS '学生姓名', c.name AS '课程名称', sc.score AS '成绩'
FROM students s
JOIN scores sc ON s.id = sc.student_id
JOIN courses c ON sc.course_id = c.id;

在上述代码中,使用了JOIN关键字来进行表的关联。JOIN关键字用于将多个表中的数据进行匹配,从而得到我们想要的结果。

在这个例子中,我们使用了两个JOIN语句,将学生表、成绩表和课程表关联在一起。首先,我们将学生表和成绩表通过学生ID进行关联,然后再将成绩表和课程表通过课程ID进行关联。最后,我们通过SELECT语句选择需要的列,并给它们起别名。

示例结果

运行上述代码后,我们可以得到如下的查询结果:

学生姓名 课程名称 成绩
张三 数学 90
张三 英语 85
李四 数学 95
李四 物理 80
王五 英语 92
王五 物理 88

上述结果表明了每个学生的姓名、所选课程的名称以及对应的成绩。

相关知识点解析

1. 关联查询的类型

在MySQL中,有几种不同的关联查询类型,包括内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全连接(FULL JOIN)。这些不同的连接类型可以根据实际需求选择使用。

  • 内连接(INNER JOIN):返回两个表中满足连接条件的行。只有在两个表中都存在匹配的行时,才会包含在结果中。
  • 左连接(LEFT JOIN):返回左表中的所有行,以及右表中满足连接条件的行。如果右表中没有匹配的行,那么结果中对应的列将显示为NULL。
  • 右连接(RIGHT JOIN):返回右表中的所有行,以及左表中