多表查询实例:学生成绩管理系统

目录

第一步:创建数据库和数据表

第二步:插入数据

第三步:多表查询实例

1.查询student表的所有记录

2.查询student表的第2条到4条记录

[3. 从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息](#3. 从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息)

4.从student表中查询计算机系和英语系的学生的信息

5.从student表中查询年龄18~22岁的学生信息

6.从student表中查询每个院系有多少人

7.从score表中查询每个科目的最高分

8.查询李四的考试科目(c_name)和考试成绩(grade

9.用连接的方式查询所有学生的信息和考试信息

[10. 计算每个学生的总成绩](#10. 计算每个学生的总成绩)

[11. 计算每个考试科目的平均成绩](#11. 计算每个考试科目的平均成绩)

12.查询计算机成绩低于95的学生信息

[13. 查询同时参加计算机和英语考试的学生的信息](#13. 查询同时参加计算机和英语考试的学生的信息)

[14. 将计算机考试成绩按从高到低进行排序](#14. 将计算机考试成绩按从高到低进行排序)

[15. 从student表和score表中查询出学生的学号,然后合并查询结果](#15. 从student表和score表中查询出学生的学号,然后合并查询结果)

[16. 查询姓张或者姓王的同学的姓名、院系和考试科目及成绩](#16. 查询姓张或者姓王的同学的姓名、院系和考试科目及成绩)

17.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩

总结


引言: 在今天的数据库应用中,多表查询是一项非常重要的技能。它允许我们从不同的数据表中获取有关联的数据,并且在实际的应用中非常常见。本篇博客将带你一步步了解如何使用多表查询来创建一个简单的学生成绩管理系统,以学生和成绩两个表为例进行演示。

第一步:创建数据库和数据表

首先,我们需要创建一个数据库,我们将其命名为"学生成绩管理系统"。然后,在该数据库中创建两个数据表,分别为"student"和"score"表。"student"表用于存储学生的基本信息,"score"表用于存储学生的成绩信息。

复制代码
CREATE DATABASE 学生成绩管理系统;

USE 学生成绩管理系统;

CREATE TABLE student (
  id INT(10) NOT NULL UNIQUE PRIMARY KEY,
  name VARCHAR(20) NOT NULL,
  sex VARCHAR(4),
  birth YEAR,
  department VARCHAR(20),
  address VARCHAR(50)
);

CREATE TABLE score (
  id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,
  stu_id INT(10) NOT NULL,
  c_name VARCHAR(20),
  grade INT(10)
);

第二步:插入数据

接下来,我们向"student"表和"score"表中插入一些示例数据,以便后续查询和演示。

复制代码
INSERT INTO student VALUES(901, '张老大', '男', 1985, '计算机系', '北京市海淀区');
INSERT INTO student VALUES(902, '张老二', '男', 1986, '中文系', '北京市昌平区');
INSERT INTO student VALUES(903, '张三', '女', 1990, '中文系', '湖南省永州市');
INSERT INTO student VALUES(904, '李四', '男', 1990, '英语系', '辽宁省阜新市');
INSERT INTO student VALUES(905, '王五', '女', 1991, '英语系', '福建省厦门市');
INSERT INTO student VALUES(906, '王六', '男', 1988, '计算机系', '湖南省衡阳市');

INSERT INTO score VALUES(NULL, 901, '计算机', 98);
INSERT INTO score VALUES(NULL, 901, '英语', 80);
INSERT INTO score VALUES(NULL, 902, '计算机', 65);
INSERT INTO score VALUES(NULL, 902, '中文', 88);
INSERT INTO score VALUES(NULL, 903, '中文', 95);
INSERT INTO score VALUES(NULL, 904, '计算机', 70);
INSERT INTO score VALUES(NULL, 904, '英语', 92);
INSERT INTO score VALUES(NULL, 905, '英语', 94);
INSERT INTO score VALUES(NULL, 906, '计算机', 90);
INSERT INTO score VALUES(NULL, 906, '英语', 85);

第三步:多表查询实例

1.查询student表的所有记录

复制代码
SELECT * FROM student;

2.查询student表的第2条到4条记录

复制代码
SELECT * FROM student LIMIT 1 OFFSET 1; -- This will fetch the second record
SELECT * FROM student LIMIT 1 OFFSET 2; -- This will fetch the third record
SELECT * FROM student LIMIT 1 OFFSET 3; -- This will fetch the fourth record

3. 从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息

复制代码
SELECT id, name, department FROM student;

4.从student表中查询计算机系和英语系的学生的信息

复制代码
SELECT * FROM student WHERE department IN ('计算机系', '英语系');

5.从student表中查询年龄18~22岁的学生信息

复制代码
SELECT * FROM student WHERE YEAR(CURRENT_DATE) - birth BETWEEN 18 AND 22;

6.从student表中查询每个院系有多少人

复制代码
SELECT department, COUNT(*) AS total_students FROM student GROUP BY department;

7.从score表中查询每个科目的最高分

复制代码
SELECT c_name, MAX(grade) AS max_grade FROM score GROUP BY c_name;

8.查询李四的考试科目(c_name)和考试成绩(grade

复制代码
SELECT c_name, grade FROM score WHERE stu_id = (SELECT id FROM student WHERE name = '李四');

9.用连接的方式查询所有学生的信息和考试信息

复制代码
SELECT s.id, s.name, s.sex, s.birth, s.department, s.address, sc.c_name, sc.grade
FROM student s
JOIN score sc ON s.id = sc.stu_id;

10. 计算每个学生的总成绩

复制代码
SELECT s.id, s.name, SUM(sc.grade) AS total_score
FROM student s
JOIN score sc ON s.id = sc.stu_id
GROUP BY s.id, s.name;

11. 计算每个考试科目的平均成绩

复制代码
SELECT c_name, AVG(grade) AS average_grade
FROM score
GROUP BY c_name;

12.查询计算机成绩低于95的学生信息

复制代码
SELECT s.id, s.name, s.department, sc.c_name, sc.grade
FROM student s
JOIN score sc ON s.id = sc.stu_id
WHERE sc.c_name = '计算机' AND sc.grade < 95;

13. 查询同时参加计算机和英语考试的学生的信息

复制代码
SELECT s.id, s.name, s.department, sc.c_name, sc.grade
FROM student s
JOIN score sc ON s.id = sc.stu_id
WHERE sc.c_name IN ('计算机', '英语')
GROUP BY s.id, s.name, s.department
HAVING COUNT(DISTINCT sc.c_name) = 2;

14. 将计算机考试成绩按从高到低进行排序

复制代码
SELECT s.id, s.name, s.department, sc.c_name, sc.grade
FROM student s
JOIN score sc ON s.id = sc.stu_id
WHERE sc.c_name = '计算机'
ORDER BY sc.grade DESC;

15. 从student表和score表中查询出学生的学号,然后合并查询结果

复制代码
SELECT s.id AS stu_id, s.name AS stu_name, sc.c_name, sc.grade
FROM student s
LEFT JOIN score sc ON s.id = sc.stu_id;

16. 查询姓张或者姓王的同学的姓名、院系和考试科目及成绩

复制代码
SELECT s.name, s.department, sc.c_name, sc.grade
FROM student s
JOIN score sc ON s.id = sc.stu_id
WHERE s.name LIKE '张%' OR s.name LIKE '王%';

17.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩

复制代码
SELECT s.name, YEAR(CURRENT_DATE) - s.birth AS age, s.department, sc.c_name, sc.grade
FROM student s
JOIN score sc ON s.id = sc.stu_id
WHERE s.address LIKE '%湖南%';

总结

本文以学生成绩管理系统为例,通过多表查询实例的展示,详细介绍了使用SQL语句从不同数据表中获取相关联数据的方法。掌握多表查询的技巧可以帮助我们在实际应用中更高效地操作数据库,提高数据检索和分析的效率。希望这篇博文能够对你在学习和应用多表查询时有所帮助。希望能够点个关注,有问题也可以私信询问。

相关推荐
tobias.b5 分钟前
408真题解析-2009-39-网络-TCP拥塞控制
网络·网络协议·tcp/ip·计算机考研·408考研·408真题解析
lang2015092812 分钟前
Jackson 1.x到2.x的演进与Spring集成
数据库·sql·spring
数通工程师12 分钟前
IPv4和IPv6 地址分配:从划分到工具全解析
网络·网络协议·tcp/ip·华为
我星期八休息12 分钟前
MySQL数据可视化实战指南
数据库·人工智能·mysql·算法·信息可视化
niaiheni17 分钟前
PHP文件包含
开发语言·php
初次见面我叫泰隆18 分钟前
Qt——1、初识Qt
开发语言·c++·qt
Arms20629 分钟前
python时区库学习
开发语言·python·学习
无名的小三轮42 分钟前
第二章 信息安全概述
开发语言·php
清水白石0081 小时前
深入 Python 对象模型:PyObject 与 PyVarObject 全解析
开发语言·python
独自破碎E1 小时前
说说Java中的反射机制
java·开发语言