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语句的使用方法。
SQL数据库操作练习:学生信息管理系统

原文地址: https://www.cveoy.top/t/topic/phZO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录