(5)使用group by子句列出各个学生的平均成绩。 (6)使用union运算符将student_info表中姓“肖”的学生的id和name与course表的id、course_name返回在一个表中,且列名为u_编号、u_名称。 (7)嵌套查询。 ①在student_info表中查找与“林一飞”sex相同的所有学生的name、birthday。 ②使用in子查询查找所修课程编号为0002、0005的学生id、name、sex。 ③列出学号为0001的学生的grade比学号为0002号的学生的最低grade高的课程编号和分数。 (8)连接查询 student_id = student_info.id = 学号 course_id = course.id = 课程编号 ①查询分数在80-90范围内的学生的学号、name和grade信息。 ②查询学习“C语言程序设计”课程的学生的学号、name和grade。 ③查询所有男同学的选课情况,要求列出学号、name、course_name和grade。 ④查询每个学生的所选课程的最高成绩,要求列出学号、name、课程编号和grade。 ⑤查询所有学生的总成绩,要求列出学号、name、总成绩,没有选修课程的学生的总成绩为空。 ⑥ 为grade表添加数据行:学号为0004、课程编号为0006、grade为76。查询所有课程的选修情况,要求列出课程编号、course_name、选修人数,course表中没有的课程列值为空。
时间: 2023-06-05 18:08:55 浏览: 358
抱歉,我可以回答你的问题。以下是对你的问题的回答:
(5) 使用group by子句列出各个学生的平均成绩。
SELECT student_id, AVG(grade) as avg_grade
FROM grade
GROUP BY student_id;
(6) 使用union运算符将student_info表中姓“肖”的学生的id和name与course表的id、course_name返回在一个表中,且列名为u_编号、u_名称。
SELECT id AS u_编号, name AS u_名称
FROM student_info
WHERE name LIKE '肖%'
UNION
SELECT id AS u_编号, course_name AS u_名称
FROM course
WHERE id IN (
SELECT id
FROM student_info
WHERE name LIKE '肖%'
);
(7) 嵌套查询。
① 在student_info表中查找与“林一飞”sex相同的所有学生的name、birthday。
SELECT name, birthday
FROM student_info
WHERE sex = (SELECT sex FROM student_info WHERE name = '林一飞');
② 使用in子查询查找所修课程编号为0002、0005的学生id、name、sex。
SELECT id, name, sex
FROM student_info
WHERE id IN (
SELECT student_id
FROM grade
WHERE course_id IN ('0002', '0005')
);
③ 列出学号为0001的学生的grade比学号为0002号的学生的最低grade高的课程编号和分数。
SELECT course_id, grade
FROM grade
WHERE student_id = '0001' AND grade > (
SELECT MIN(grade)
FROM grade
WHERE student_id = '0002'
);
(8) 连接查询 student_id = student_info.id = 学号 course_id = course.id = 课程编号
① 查询分数在80-90范围内的学生的学号、name和grade信息。
SELECT student_info.id AS 学号, student_info.name AS name, grade AS grade
FROM grade
JOIN student_info ON grade.student_id = student_info.id
WHERE grade BETWEEN 80 AND 90;
② 查询学习“C语言程序设计”课程的学生的学号、name和grade。
SELECT student_info.id AS 学号, student_info.name AS name, grade AS grade
FROM grade
JOIN student_info ON grade.student_id = student_info.id
JOIN course ON grade.course_id = course.id
WHERE course.course_name = 'C语言程序设计';
③ 查询所有男同学的选课情况,要求列出学号、name、course_name和grade。
SELECT student_info.id AS 学号, student_info.name AS name, course.course_name AS course_name, grade.grade AS grade
FROM grade
JOIN student_info ON grade.student_id = student_info.id
JOIN course ON grade.course_id = course.id
WHERE student_info.sex = '男';
④ 查询每个学生的所选课程的最高成绩,要求列出学号、name、课程编号和grade。
SELECT student_info.id AS 学号, student_info.name AS name, course.id AS 课程编号, MAX(grade) AS grade
FROM grade
JOIN student_info ON grade.student_id = student_info.id
JOIN course ON grade.course_id = course.id
GROUP BY student_info.id, course.id;
⑤ 查询所有学生的总成绩,要求列出学号、name、总成绩,没有选修课程的学生的总成绩为空。
SELECT student_info.id AS 学号, student_info.name AS name, SUM(grade) AS 总成绩
FROM student_info
LEFT JOIN grade ON student_info.id = grade.student_id
GROUP BY student_info.id, student_info.name;
⑥ 为grade表添加数据行:学号为0004、课程编号为0006、grade为76。查询所有课程的选修情况,要求列出课程编号、course_name、选修人数,course表中没有的课程列值为空。
INSERT INTO grade (student_id, course_id, grade)
VALUES ('0004', '0006', '76');
SELECT course.id AS 课程编号, course.course_name AS course_name, COUNT(grade.student_id) AS 选修人数
FROM course
LEFT JOIN grade ON course.id = grade.course_id
GROUP BY course.id, course.course_name;
阅读全文