SQL数据库操作练习:学生信息管理系统
SQL数据库操作练习:学生信息管理系统
本文提供13个SQL数据库操作练习,涵盖了基本查询、数据更新、数据删除等操作,并利用各种SQL语句实现不同功能,例如使用INTO子句创建新表、使用外连接查询没有选修课程的学生、使用COMPUTE子句统计数据等,适合初学者学习和练习SQL数据库操作。
1. 将STUDENT表中计算机系的学生信息放入一张名为JSJSTUDENT的新表中
SELECT 学号, 姓名, 性别, 年龄
INTO JSJSTUDENT
FROM STUDENT
WHERE 系别 = '计算机系'
2. 查询JSJSTUDENT表,将年龄最大的3位学生的信息放入一张本地临时表中,并查询临时表查看年龄最大的3位学生信息
SELECT TOP 3 *
INTO JSJSTUDENT
FROM JSJSTUDENT
ORDER BY 年龄 DESC
SELECT *
FROM JSJSTUDENT
3. 查询计算机系学生选修课程的信息,结果显示学号,姓名,性别,选修课程名和成绩
- 使用显式内连接
SELECT S.学号, S.姓名, S.性别, C.选修课程名, C.成绩
FROM STUDENT AS S
INNER JOIN COURSE AS C
ON S.学号 = C.学号
WHERE S.系别 = '计算机系'
- 使用派生表查询
SELECT S.学号, S.姓名, S.性别, C.选修课程名, C.成绩
FROM (SELECT 学号, 姓名, 性别
FROM STUDENT
WHERE 系别 = '计算机系') AS S
INNER JOIN COURSE AS C
ON S.学号 = C.学号
4. 查询没有选修课程的学生学号,姓名和所在系
SELECT S.学号, S.姓名, S.系别
FROM STUDENT AS S
LEFT JOIN COURSE AS C
ON S.学号 = C.学号
WHERE C.学号 IS NULL
5. 查询有哪些课程没有人选修,结果显示课程号,课程名和学分
- 使用外连接
SELECT C.课程号, C.课程名, C.学分
FROM COURSE AS C
LEFT JOIN SCORE AS S
ON C.课程号 = S.课程号
WHERE S.学号 IS NULL
- 使用嵌套查询
SELECT C.课程号, C.课程名, C.学分
FROM COURSE AS C
WHERE C.课程号 NOT IN (SELECT 课程号 FROM SCORE)
6. 统计每名学生选修课程的门数和平均分,显示学生学号,姓名,所在系和选课门数及课程平均分。结果显示选课门数排名前3的学生信息
SELECT S.学号, S.姓名, S.系别, COUNT(C.课程号) AS 选课门数, AVG(C.成绩) AS 平均分
FROM STUDENT AS S
LEFT JOIN SCORE AS C
ON S.学号 = C.学号
GROUP BY S.学号, S.姓名, S.系别
ORDER BY 选课门数 DESC
LIMIT 3
7. 统计除2号课程外的其他课程的选课人数和平均分,显示课程号,课程名,学分,选课人数及平均分。最后结果中要包含2号课程的信息
SELECT C.课程号, C.课程名, C.学分, COUNT(S.学号) AS 选课人数, AVG(S.成绩) AS 平均分
FROM COURSE AS C
LEFT JOIN SCORE AS S
ON C.课程号 = S.课程号
WHERE C.课程号 <> 2
GROUP BY C.课程号, C.课程名, C.学分
UNION ALL
SELECT C.课程号, C.课程名, C.学分, COUNT(S.学号) AS 选课人数, AVG(S.成绩) AS 平均分
FROM COURSE AS C
LEFT JOIN SCORE AS S
ON C.课程号 = S.课程号
WHERE C.课程号 = 2
GROUP BY C.课程号, C.课程名, C.学分
8. 查询选修每门课程的男女生人数和平均分,结果显示课程号、性别、选课人数和平均分。在GROUP BY子句中使用WITH ROLLUP和WITH CUBE短语,比较结果
- 使用WITH ROLLUP
SELECT C.课程号, S.性别, COUNT(S.学号) AS 选课人数, AVG(S.成绩) AS 平均分
FROM COURSE AS C
LEFT JOIN SCORE AS S
ON C.课程号 = S.课程号
GROUP BY C.课程号, S.性别 WITH ROLLUP
- 使用WITH CUBE
SELECT C.课程号, S.性别, COUNT(S.学号) AS 选课人数, AVG(S.成绩) AS 平均分
FROM COURSE AS C
LEFT JOIN SCORE AS S
ON C.课程号 = S.课程号
GROUP BY C.课程号, S.性别 WITH CUBE
9. 查询所有学生的信息,结果统计总人数和平均年龄
- 使用COMPUTE子句
SELECT 学号, 姓名, 性别, 年龄
FROM STUDENT
COMPUTE COUNT(学号), AVG(年龄)
- 使用批处理
SELECT 学号, 姓名, 性别, 年龄
FROM STUDENT
SELECT COUNT(学号), AVG(年龄)
FROM STUDENT
10. 查询每个学生选修课程的信息(学号、姓名、课程号、成绩),并统计每个学生选修的课程数和平均分
- 使用COMPUTE BY子句
SELECT S.学号, S.姓名, C.课程号, C.成绩
FROM STUDENT AS S
INNER JOIN COURSE AS C
ON S.学号 = C.学号
ORDER BY S.学号
COMPUTE COUNT(C.课程号), AVG(C.成绩) BY S.学号, S.姓名
- 使用批处理
SELECT S.学号, S.姓名, C.课程号, C.成绩
FROM STUDENT AS S
INNER JOIN COURSE AS C
ON S.学号 = C.学号
ORDER BY S.学号
SELECT 学号, 姓名, COUNT(课程号), AVG(成绩)
FROM 上一条查询结果
GROUP BY 学号, 姓名
11. 查询选修了“数据库”课程的计算机系学生信息,显示学生学号,姓名和成绩。要求最后结果中成绩以等级制显示(90分以上为“优秀”,80-90分为“良好”,70-80分为“中等”,60-70分为“及格”,60分以下为“不及格”)
SELECT S.学号, S.姓名,
CASE
WHEN C.成绩 >= 90 THEN '优秀'
WHEN C.成绩 >= 80 THEN '良好'
WHEN C.成绩 >= 70 THEN '中等'
WHEN C.成绩 >= 60 THEN '及格'
ELSE '不及格'
END AS 成绩等级
FROM STUDENT AS S
INNER JOIN COURSE AS C
ON S.学号 = C.学号
WHERE C.选修课程名 = '数据库' AND S.系别 = '计算机系'
12. 将计算机系学生的所有成绩都降低5分
- 使用子查询
UPDATE SCORE
SET 成绩 = (SELECT 成绩 FROM SCORE WHERE 学号 = (SELECT 学号 FROM STUDENT WHERE 系别 = '计算机系')) - 5
WHERE 学号 IN (SELECT 学号 FROM STUDENT WHERE 系别 = '计算机系')
- 使用FROM子句
UPDATE S
SET S.成绩 = S.成绩 - 5
FROM SCORE AS S
INNER JOIN STUDENT AS T
ON S.学号 = T.学号
WHERE T.系别 = '计算机系'
13. 删除计算机系成绩不及格学生的选课记录
- 使用子查询
DELETE FROM SCORE
WHERE 学号 IN (SELECT 学号 FROM STUDENT WHERE 系别 = '计算机系')
AND 成绩 < 60
- 使用FROM子句
DELETE S
FROM SCORE AS S
INNER JOIN STUDENT AS T
ON S.学号 = T.学号
WHERE T.系别 = '计算机系' AND S.成绩 < 60
注意:
- 以上代码仅供参考,实际使用中请根据数据库的具体情况进行调整。
- 这些练习涉及了SQL数据库的基本操作,希望能够帮助初学者更好地理解和掌握SQL语句的使用方法。
原文地址: https://www.cveoy.top/t/topic/phZO 著作权归作者所有。请勿转载和采集!