MySQL 两张表的关联方案
在MySQL数据库中,我们可以通过关联(JOIN)来将两个或多个表的数据连接在一起。关联操作在数据库中非常常见,它能够通过共享一个或多个列(通常是主键和外键)来建立表之间的关系,使得我们可以更方便地进行查询和分析。
下面我们将通过一个具体的问题场景来演示如何在MySQL中关联两张表,并给出相应的代码示例。
问题场景
假设我们有两张表,分别是students
和scores
。
-
students
表包含学生的基本信息,结构如下:字段名 类型 说明 id int 学生ID name varchar(50) 学生姓名 gender varchar(10) 学生性别 birthday date 学生生日 address varchar(100) 学生住址 -
scores
表包含学生的考试成绩,结构如下:字段名 类型 说明 id int 成绩ID student_id int 学生ID subject varchar(50) 科目 score int 考试成绩 exam_date date 考试日期
我们的问题是:如何根据学生ID查询出学生的基本信息以及他们的考试成绩?
关联方案
我们可以使用JOIN
关键字来关联students
表和scores
表。具体步骤如下:
- 使用
INNER JOIN
关键字将两张表进行关联。 - 指定关联条件,即
students
表的主键id
与scores
表的外键student_id
进行关联。 - 选择需要查询的字段,可以是
students
表中的字段,也可以是scores
表中的字段,或者两者的组合。
下面是具体的代码示例:
SELECT students.id, students.name, students.gender, students.birthday, students.address, scores.subject, scores.score, scores.exam_date
FROM students
INNER JOIN scores ON students.id = scores.student_id;
以上代码中,我们使用SELECT
语句选择了students
表和scores
表中的字段,并使用INNER JOIN
将两者关联起来。通过指定关联条件students.id = scores.student_id
,我们可以根据学生ID查询出学生的基本信息以及他们的考试成绩。
示例结果
假设我们有以下数据:
students
表:
id | name | gender | birthday | address |
---|---|---|---|---|
1 | 张三 | 男 | 1990-01-01 | 北京市海淀区 |
2 | 李四 | 男 | 1992-05-10 | 上海市浦东新区 |
3 | 王五 | 女 | 1991-11-20 | 广州市天河区 |
scores
表:
id | student_id | subject | score | exam_date |
---|---|---|---|---|
1 | 1 | 数学 | 80 | 2021-01-01 |
2 | 1 | 英语 | 90 | 2021-01-02 |
3 | 2 | 数学 | 85 | 2021-01-01 |
4 | 2 | 英语 | 95 | 2021-01-02 |
5 | 3 | 数学 | 75 | 2021-01-01 |
6 | 3 | 英语 | 85 | 2021-01-02 |
运行以上的SQL查询语句,我们会得到以下结果:
id | name | gender | birthday | address | subject | score | exam_date |
---|---|---|---|---|---|---|---|
1 | 张三 | 男 | 199 |