T-SQL 语句练习:学生信息管理系统
使用 T-SQL 语句完成以下操作:
1. 将 STUDENT 表中计算机系的学生信息放入名为 JSJSTUDENT 的新表中。
SELECT 学号, 姓名, 性别, 年龄
INTO STUDENTSCORE.dbo.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.课程名, SC.成绩
FROM STUDENT AS S
INNER JOIN SC ON S.学号 = SC.学号
INNER JOIN COURSE AS C ON SC.课程号 = C.课程号
WHERE S.所在系 = '计算机系';
4. 使用外连接查询没有选修课程的学生的学号、姓名和所在系。
SELECT S.学号, S.姓名, S.所在系
FROM STUDENT AS S
LEFT JOIN SC ON S.学号 = SC.学号
WHERE SC.课程号 IS NULL;
5. 使用外连接和嵌套查询查询没有人选修的课程,结果显示课程号、课程名和学分。
SELECT C.课程号, C.课程名, C.学分
FROM COURSE AS C
LEFT JOIN SC ON C.课程号 = SC.课程号
WHERE SC.学号 IS NULL;
6. 统计每名学生选修课程的门数和平均分,显示学生学号、姓名、所在系、选课门数和课程平均分。结果显示选课门数排名前 3 的学生信息。
SELECT S.学号, S.姓名, S.所在系, COUNT(SC.课程号) AS 选课门数, AVG(SC.成绩) AS 课程平均分
FROM STUDENT AS S
LEFT JOIN SC ON S.学号 = SC.学号
GROUP BY S.学号, S.姓名, S.所在系
ORDER BY 选课门数 DESC
OFFSET 0 ROWS FETCH NEXT 3 ROWS ONLY;
7. 统计除 2 号课程外的其它课程的选课人数和平均分,显示课程号、课程名、学分、选课人数和平均分。最后结果中包含 2 号课程的信息。
SELECT C.课程号, C.课程名, C.学分, COUNT(SC.学号) AS 选课人数, AVG(SC.成绩) AS 平均分
FROM COURSE AS C
LEFT JOIN SC ON C.课程号 = SC.课程号
WHERE C.课程号 <> '2号课程'
GROUP BY C.课程号, C.课程名, C.学分
UNION ALL
SELECT C.课程号, C.课程名, C.学分, COUNT(SC.学号) AS 选课人数, AVG(SC.成绩) AS 平均分
FROM COURSE AS C
LEFT JOIN SC ON C.课程号 = SC.课程号
WHERE C.课程号 = '2号课程'
GROUP BY C.课程号, C.课程名, C.学分;
8. 查询选修每门课程的男女生人数和平均分,结果显示课程号、性别、选课人数和平均分。在 GROUP BY 子句中使用 WITH ROLLUP 和 WITH CUBE 短语,比较结果。
SELECT C.课程号, S.性别, COUNT(SC.学号) AS 选课人数, AVG(SC.成绩) AS 平均分
FROM COURSE AS C
LEFT JOIN SC ON C.课程号 = SC.课程号
LEFT JOIN STUDENT AS S ON SC.学号 = S.学号
GROUP BY C.课程号, S.性别 WITH ROLLUP;
SELECT C.课程号, S.性别, COUNT(SC.学号) AS 选课人数, AVG(SC.成绩) AS 平均分
FROM COURSE AS C
LEFT JOIN SC ON C.课程号 = SC.课程号
LEFT JOIN STUDENT AS S ON SC.学号 = S.学号
GROUP BY C.课程号, S.性别 WITH CUBE;
9. 查询所有学生的信息,结果统计总人数和平均年龄。可使用 COMPUTE 子句或使用批处理。
SELECT 学号, 姓名, 性别, 年龄, 所在系
FROM STUDENT;
COMPUTE COUNT(学号), AVG(年龄);
10. 查询每个学生选修课程的信息,包括学号、姓名、课程号、成绩,并统计每个学生选修的课程数和平均分。可使用 COMPUTE BY 子句或使用批处理。
SELECT 学号, 姓名, 课程号, 成绩
FROM SC
ORDER BY 学号;
COMPUTE COUNT(课程号), AVG(成绩) BY 学号;
11. 查询选修了 "数据库" 课程的计算机系学生信息,显示学生学号、姓名和成绩,并以等级制显示成绩。
SELECT S.学号, S.姓名,
CASE
WHEN SC.成绩 >= 90 THEN '优秀'
WHEN SC.成绩 >= 80 THEN '良好'
WHEN SC.成绩 >= 70 THEN '中等'
WHEN SC.成绩 >= 60 THEN '及格'
ELSE '不及格'
END AS 成绩等级
FROM STUDENT AS S
INNER JOIN SC ON S.学号 = SC.学号
INNER JOIN COURSE AS C ON SC.课程号 = C.课程号
WHERE S.所在系 = '计算机系' AND C.课程名 = '数据库';
12. 将计算机系学生的所有成绩都降低 5 分。可在更新语句中使用子查询和 FROM 子句两种方式实现。
-- 使用子查询
UPDATE SC
SET 成绩 = 成绩 - 5
WHERE 学号 IN (SELECT 学号 FROM STUDENT WHERE 所在系 = '计算机系');
-- 使用 FROM 子句
UPDATE SC
SET 成绩 = 成绩 - 5
FROM SC
INNER JOIN STUDENT ON SC.学号 = STUDENT.学号
WHERE STUDENT.所在系 = '计算机系';
13. 删除计算机系成绩不及格学生的选课记录。可在删除语句中使用子查询和 FROM 子句两种方式实现。
-- 使用子查询
DELETE FROM SC
WHERE 学号 IN (SELECT 学号 FROM STUDENT WHERE 所在系 = '计算机系') AND 成绩 < 60;
-- 使用 FROM 子句
DELETE SC
FROM SC
INNER JOIN STUDENT ON SC.学号 = STUDENT.学号
WHERE STUDENT.所在系 = '计算机系' AND SC.成绩 < 60;
说明:
- 以上代码示例中,请将表名和字段名替换为实际的表名和字段名。
- 本教程仅供参考,实际应用中请根据具体情况进行修改和调整。
原文地址: https://www.cveoy.top/t/topic/ph8J 著作权归作者所有。请勿转载和采集!