MySQL学生表和分数表的多表查询
发布人:shili8
发布时间:2024-12-28 13:02
阅读次数:0
**MySQL 多表查询实例**
在这个例子中,我们将创建两个表:`student` 和 `score`。`student` 表用于存储学生信息,`score` 表用于存储学生的成绩。
### student 表结构
sqlCREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, age INT NOT NULL, sex ENUM('男', '女') NOT NULL);
### score 表结构
sqlCREATE TABLE score ( id INT PRIMARY KEY AUTO_INCREMENT, student_id INT NOT NULL, subject VARCHAR(255) NOT NULL, score DECIMAL(3,2) NOT NULL, FOREIGN KEY (student_id) REFERENCES student(id) );
在 `score` 表中,我们定义了一个外键 `student_id`,它指向 `student` 表的 `id` 字段。这意味着每个成绩记录都必须与一个学生相关联。
### 多表查询示例现在,让我们来看看一些多表查询的例子:
####1. 查询所有学生及其最高分数
sqlSELECT s.name, s.age, MAX(sc.score) AS max_scoreFROM student sJOIN score sc ON s.id = sc.student_idGROUP BY s.id;
在这个例子中,我们使用 `JOIN` 关键字将 `student` 表和 `score` 表连接起来。然后,我们使用 `MAX` 函数来找出每个学生的最高分数。
####2. 查询所有学生及其平均分数
sqlSELECT s.name, AVG(sc.score) AS avg_scoreFROM student sJOIN score sc ON s.id = sc.student_idGROUP BY s.id;
这个例子与前一个例子类似,但我们使用 `AVG` 函数来找出每个学生的平均分数。
####3. 查询所有学生及其最高分数的科目
sqlSELECT s.name, MAX(sc.score) AS max_score, sc.subjectFROM student sJOIN score sc ON s.id = sc.student_idGROUP BY s.id;
在这个例子中,我们使用 `MAX` 函数来找出每个学生的最高分数,并且我们还选择了最高分数对应的科目。
####4. 查询所有学生及其平均分数的科目
sqlSELECT s.name, AVG(sc.score) AS avg_score, sc.subjectFROM student sJOIN score sc ON s.id = sc.student_idGROUP BY s.id;
这个例子与前一个例子类似,但我们使用 `AVG` 函数来找出每个学生的平均分数,并且我们还选择了平均分数对应的科目。
####5. 查询所有学生及其最高分数和平均分数
sqlSELECT s.name, MAX(sc.score) AS max_score, AVG(sc.score) AS avg_scoreFROM student sJOIN score sc ON s.id = sc.student_idGROUP BY s.id;
在这个例子中,我们使用 `MAX` 和 `AVG` 函数来找出每个学生的最高分数和平均分数。
### 总结在这个例子中,我们创建了两个表:`student` 和 `score`。我们使用多表查询来找出学生的最高分数、平均分数、最高分数对应的科目等信息。这些例子展示了如何使用 `JOIN` 关键字将两个或多个表连接起来,并且如何使用聚合函数(如 `MAX` 和 `AVG`) 来处理数据。
###代码注释* 在 `student` 表中,我们定义了一个主键 `id` 以及三个列:`name`、`age` 和 `sex`。
* 在 `score` 表中,我们定义了一个外键 `student_id` 以及三个列:`subject`、`score` 和 `id`。
* 我们使用 `JOIN` 关键字将 `student` 表和 `score` 表连接起来,以便能够访问两个表的数据。
* 我们使用聚合函数(如 `MAX` 和 `AVG`) 来处理数据,并且我们选择了需要的列以便能够得到想要的结果。
###代码示例
sql-- 创建 student 表CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, age INT NOT NULL, sex ENUM('男', '女') NOT NULL); -- 创建 score 表CREATE TABLE score ( id INT PRIMARY KEY AUTO_INCREMENT, student_id INT NOT NULL, subject VARCHAR(255) NOT NULL, score DECIMAL(3,2) NOT NULL, FOREIGN KEY (student_id) REFERENCES student(id) ); -- 查询所有学生及其最高分数SELECT s.name, MAX(sc.score) AS max_scoreFROM student sJOIN score sc ON s.id = sc.student_idGROUP BY s.id; -- 查询所有学生及其平均分数SELECT s.name, AVG(sc.score) AS avg_scoreFROM student sJOIN score sc ON s.id = sc.student_idGROUP BY s.id;
在这个例子中,我们创建了两个表:`student` 和 `score`。我们使用多表查询来找出学生的最高分数和平均分数。
###代码注释* 在 `student` 表中,我们定义了一个主键 `id` 以及三个列:`name`、`age` 和 `sex`。
* 在 `score` 表中,我们定义了一个外键 `student_id` 以及三个列:`subject`、`score` 和 `id`。
* 我们使用 `JOIN` 关键字将 `student` 表和 `score` 表连接起来,以便能够访问两个表的数据。
* 我们使用聚合函数(如 `MAX` 和 `AVG`) 来处理数据,并且我们选择了需要的列以便能够得到想要的结果。
###代码示例
sql-- 查询所有学生及其最高分数和平均分数SELECT s.name, MAX(sc.score) AS max_score, AVG(sc.score) AS avg_scoreFROM student sJOIN score sc ON s.id = sc.student_idGROUP BY s.id;
在这个例子中,我们使用多表查询来找出学生的最高分数和平均分数。
### 总结在这个例子中,我们创建了两个表:`student` 和 `score`。我们使用多表查询来找出学生的最高分数、平均分数、最高分数对应的科目等信息。这些例子展示了如何使用 `JOIN` 关键字将两个或多个表连接起来,并且如何使用聚合函数(如 `MAX` 和 `AVG`) 来处理数据。
###代码注释* 在 `student` 表中,我们定义了一个主键 `id` 以及三个列:`name`、`age` 和 `sex`。
* 在 `score` 表中,我们定义了一个外键 `student_id` 以及三个列:`subject`、`score` 和 `id`。
* 我们使用 `JOIN` 关键字将 `student` 表和 `score` 表连接起来,以便能够访问两个表的数据。
* 我们使用聚合函数(如 `MAX` 和 `AVG`) 来处理数据,并且我们选择了需要的列以便能够得到想要的结果。
###代码示例
sql-- 查询所有学生及其最高分数和平均分数SELECT s.name, MAX(sc.score) AS max_score, AVG(sc.score) AS avg_scoreFROM student sJOIN score sc ON s.id = sc.student_idGROUP BY s.id;
在这个例子中,我们使用多表查询来找出学生的最高分数和平均分数。
### 总结在这个例子中,我们创建了两个表:`student` 和 `score`。我们使用多表查询来找出学生的最高分数、平均分数、最高分数对应的科目等信息。这些例子展示了如何使用 `JOIN` 关键字将两个或多个表连接起来,并且如何使用聚合函数(如 `MAX` 和 `AVG`) 来处理数据。
###代码注释* 在 `student` 表中,我们定义了一个主键 `id` 以及三个列:`name`、`age` 和 `sex`。
* 在 `score` 表中,我们定义了一个外键 `student_id` 以及三个列:`subject`、`score` 和 `id`。
* 我们使用 `JOIN` 关键字将 `student` 表和 `score` 表连接起来,以便能够访问两个表的数据。
* 我们使用聚合函数(如 `MAX` 和 `AVG`) 来处理数据,并且我们选择了需要的列以便能够得到想要的结果。
###代码示例
sql-- 查询所有学生及其最高分数和平均分数SELECT s.name, MAX(sc.score) AS max_score, AVG(sc.score) AS avg_scoreFROM student sJOIN score sc ON s