第五次作业
- 创建数据库并使用
CREATE DATABASE mydbl1_stu;
:创建名为mydbl1_stu
的数据库。USE mydbl1_stu;
:切换到刚创建的数据库,后续操作都在此数据库环境下进行。
- 创建 student 表
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));
- 创建 score 表
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 表的所有记录
SELECT * FROM student;
:查询student
表的所有行和列。SELECT * FROM score;
:查询score
表的所有行和列。
- 查询 student 表的第 2 条到 5 条记录
SELECT * FROM student LIMIT 1,4;
LIMIT
子句用于限制查询结果的数量。第一个参数1
表示从第 2 条记录开始(索引从 0 开始),第二个参数4
表示查询 4 条记录。
- 从 student 表中查询计算机系和英语系的学生的信息
SELECT * FROM student WHERE department IN ("计算机系","英语系");
WHERE
子句用于筛选满足条件的行。IN
关键字用于判断列值是否在指定的集合中。
- 从 student 表中查询年龄小于 22 岁的学生信息
SELECT * FROM student WHERE 2024 - birth < 22;
- 通过计算当前年份与出生年份的差值来判断年龄是否小于 22 岁。
- 从 student 表中查询每个院系有多少人
SELECT department, COUNT(*) AS count FROM student GROUP BY department;
GROUP BY
子句用于按照department
列进行分组,COUNT(*)
函数用于计算每组的行数,AS count
用于给计算结果列命名。
- 从 score 表中查询每个科目的最高分
SELECT c_name, MAX(grade) AS max_grade FROM score GROUP BY c_name;
- 类似地,按照
c_name
列分组,使用MAX
函数获取每组中的最高分。
- 查询李广昌的考试科目 (c_name) 和考试成绩 (grade)
SELECT c_name, grade FROM score JOIN student ON score.stu_id = student.id WHERE student.name = "李广昌";
- 通过
JOIN
操作将score
表和student
表连接起来,根据stu_id
和id
的对应关系进行关联,然后在WHERE
子句中筛选出name
为 "李广昌" 的记录。
- 用连接的方式查询所有学生的信息和考试信息
SELECT student.*, score.c_name, score.grade FROM student JOIN score ON student.id = score.stu_id;
- 连接
student
表和score
表,获取所有学生的详细信息以及对应的考试科目和成绩。
- 计算每个学生的总成绩
SELECT student.id, student.name, SUM(score.grade) AS total_grade FROM student JOIN score ON student.id = score.stu_id GROUP BY student.id, student.name;
- 连接两表后,按照学生的
id
和name
分组,使用SUM
函数计算每个学生的总成绩。
- 计算每个考试科目的平均成绩
SELECT c_name, AVG(grade) AS average_grade FROM score GROUP BY c_name;
- 11查询计算机成绩低于 95 的学生信息
SELECT student.* FROM student JOIN score ON student.id = score.stu_id WHERE score.c_name = "计算机" AND score.grade < 95;
- 12将计算机考试成绩按从高到低进行排序
SELECT * FROM score WHERE c_name = "计算机" ORDER BY grade DESC
- 13从 student 表和 score 表中查询出学生的学号,然后合并查询结果
SELECT id FROM student UNION SELECT stu_id FROM score;
UNION
操作符用于合并两个查询结果集,去除重复行。- 14查询姓张或者姓王的同学的姓名、院系和考试科目及成绩
SELECT student.name, student.department, score.c_name, score.grade FROM student JOIN score ON student.id = score.stu_id WHERE student.name LIKE "张%" OR student.name LIKE "王%";
- 通过
JOIN
操作连接两表,在WHERE
子句中使用LIKE
操作符筛选出姓名以 "张" 或 "王" 开头的记录。 - 15查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩
SELECT student.name, 2024 - student.birth AS age, student.department, score.c_name, score.grade FROM student JOIN score ON student.id = score.stu_id WHERE student.address LIKE "湖南省%";