T-SQL 数据库操作练习:学生成绩管理
- 使用INTO子句将STUDENT表中计算机系的学生信息放入JSJSTUDENT表中:
SELECT 学号, 姓名, 性别, 年龄
INTO JSJSTUDENT
FROM STUDENT
WHERE 系别 = '计算机系'
- 查询JSJSTUDENT表,将年龄最大的3位学生的信息放入本地临时表中:
SELECT TOP 3 学号, 姓名, 性别, 年龄
INTO #JSJSTUDENT
FROM JSJSTUDENT
ORDER BY 年龄 DESC
SELECT * FROM #JSJSTUDENT
- 使用显式内连接查询计算机系学生选修课程的信息:
SELECT S.学号, S.姓名, S.性别, C.选修课程名, C.成绩
FROM STUDENT S
INNER JOIN COURSE C ON S.学号 = C.学号
WHERE S.系别 = '计算机系'
使用派生表查询计算机系学生选修课程的信息:
SELECT S.学号, S.姓名, S.性别, C.选修课程名, C.成绩
FROM (
SELECT 学号, 姓名, 性别
FROM STUDENT
WHERE 系别 = '计算机系'
) S
INNER JOIN COURSE C ON S.学号 = C.学号
- 使用外连接查询没有选修课程的学生学号,姓名和所在系:
SELECT S.学号, S.姓名, S.系别
FROM STUDENT S
LEFT JOIN COURSE C ON S.学号 = C.学号
WHERE C.学号 IS NULL
- 使用外连接查询没有人选修的课程号,课程名和学分:
SELECT C.课程号, C.课程名, C.学分
FROM COURSE C
LEFT JOIN STUDENT S ON C.课程号 = S.课程号
WHERE S.学号 IS NULL
使用嵌套查询查询没有人选修的课程号,课程名和学分:
SELECT 课程号, 课程名, 学分
FROM COURSE
WHERE 课程号 NOT IN (
SELECT DISTINCT 课程号
FROM STUDENT
)
- 统计每名学生选修课程的门数和平均分,显示学生学号,姓名,所在系和选课门数及课程平均分,结果显示选课门数排名前3的学生信息:
SELECT S.学号, S.姓名, S.系别, COUNT(C.课程号) AS 选课门数, AVG(C.成绩) AS 平均分
FROM STUDENT S
LEFT JOIN COURSE C ON S.学号 = C.学号
GROUP BY S.学号, S.姓名, S.系别
ORDER BY 选课门数 DESC
TOP 3
- 统计除2号课程外的其它课程的选课人数和平均分,显示课程号,课程名,学分,选课人数及平均分,最后结果中要包含2号课程的信息:
SELECT C.课程号, C.课程名, C.学分, COUNT(S.学号) AS 选课人数, AVG(S.成绩) AS 平均分
FROM COURSE C
LEFT JOIN STUDENT S ON C.课程号 = S.课程号
WHERE C.课程号 <> 2
GROUP BY C.课程号, C.课程名, C.学分
UNION ALL
SELECT 课程号, 课程名, 学分, COUNT(学号) AS 选课人数, AVG(成绩) AS 平均分
FROM COURSE
WHERE 课程号 = 2
GROUP BY 课程号, 课程名, 学分
- 查询选修每门课程的男女生人数和平均分,结果显示课程号、性别、选课人数和平均分,比较结果使用WITH ROLLUP和WITH CUBE短语:
使用WITH ROLLUP:
SELECT 课程号, 性别, COUNT(学号) AS 选课人数, AVG(成绩) AS 平均分
FROM COURSE
GROUP BY 课程号, 性别 WITH ROLLUP
使用WITH CUBE:
SELECT 课程号, 性别, COUNT(学号) AS 选课人数, AVG(成绩) AS 平均分
FROM COURSE
GROUP BY 课程号, 性别 WITH CUBE
- 查询所有学生的信息,结果统计总人数和平均年龄,可使用COMPUTE子句或使用批处理:
使用COMPUTE子句:
SELECT 学号, 姓名, 性别, 年龄
FROM STUDENT
COMPUTE COUNT(学号), AVG(年龄)
使用批处理:
SELECT 学号, 姓名, 性别, 年龄
FROM STUDENT
SELECT COUNT(学号) AS 总人数, AVG(年龄) AS 平均年龄
FROM STUDENT
- 查询每个学生选修课程的信息(学号、姓名、课程号、成绩),并统计每个学生选修的课程数和平均分,可使用COMPUTE BY子句或使用批处理:
使用COMPUTE BY子句:
SELECT 学号, 姓名, 课程号, 成绩
FROM COURSE
COMPUTE COUNT(课程号), AVG(成绩)
BY 学号, 姓名
使用批处理:
SELECT 学号, 姓名, 课程号, 成绩
FROM COURSE
SELECT 学号, 姓名, COUNT(课程号) AS 选修课程数, AVG(成绩) AS 平均分
FROM COURSE
GROUP BY 学号, 姓名
- 查询选修了'数据库'课程的计算机系学生信息,显示学生学号,姓名和成绩,要求最后结果中成绩以等级制显示(90分以上为'优秀',80-90分为'良好',70-80分为'中等',60-70分为'及格',60分以下为'不及格'):
SELECT S.学号, S.姓名,
CASE
WHEN C.成绩 >= 90 THEN '优秀'
WHEN C.成绩 >= 80 AND C.成绩 < 90 THEN '良好'
WHEN C.成绩 >= 70 AND C.成绩 < 80 THEN '中等'
WHEN C.成绩 >= 60 AND C.成绩 < 70 THEN '及格'
ELSE '不及格'
END AS 成绩等级
FROM STUDENT S
INNER JOIN COURSE C ON S.学号 = C.学号
WHERE S.系别 = '计算机系' AND C.选修课程名 = '数据库'
- 将计算机系学生的所有成绩都降低5分,使用更新语句中的子查询方式:
UPDATE COURSE
SET 成绩 = 成绩 - 5
WHERE 学号 IN (
SELECT 学号
FROM STUDENT
WHERE 系别 = '计算机系'
)
使用FROM子句方式:
UPDATE C
SET 成绩 = 成绩 - 5
FROM COURSE C
INNER JOIN STUDENT S ON C.学号 = S.学号
WHERE S.系别 = '计算机系'
- 删除计算机系成绩不及格学生的选课记录,使用删除语句中的子查询方式:
DELETE FROM COURSE
WHERE 学号 IN (
SELECT 学号
FROM STUDENT
WHERE 系别 = '计算机系' AND 成绩 < 60
)
使用FROM子句方式:
DELETE C
FROM COURSE C
INNER JOIN STUDENT S ON C.学号 = S.学号
WHERE S.系别 = '计算机系' AND C.成绩 < 60
原文地址: https://www.cveoy.top/t/topic/phVr 著作权归作者所有。请勿转载和采集!