sql 查询选修“数据库系统”且考试成绩前五名的学生的学号和姓名;
时间: 2023-11-19 22:06:26 浏览: 53
好的,以下是查询选修“数据库系统”且考试成绩前五名的学生的学号和姓名的 SQL 语句:
```
SELECT student_id, student_name
FROM students
WHERE student_id IN
(SELECT student_id
FROM scores
WHERE course_name = '数据库系统'
ORDER BY score DESC
LIMIT 5);
```
其中,`students` 表为学生信息表,包含学生学号(`student_id`)和学生姓名(`student_name`)两个字段。`scores` 表为学生成绩表,包含学生学号(`student_id`)、课程名称(`course_name`)和对应的成绩(`score`)三个字段。首先,在 `scores` 表中筛选出选修“数据库系统”的学生,然后按成绩降序排列,只选取前五名学生的学号,最后再在 `students` 表中查询这些学生的学号和姓名。
需要注意的是,这里使用了子查询来获取前五名学生的学号。如果您有其他问题,欢迎随时问我哦。
相关问题
包括学生学号以及每个学生选修课程的门数(要求成绩非空)和平均成绩; 8、查询每个学生的选课总学分,要求列出学生学号和总学分(说明:考试成绩超过60才能获得此课程的学分) 9、查询计算机系成绩在80分以上的学生姓名、课程名和成绩,并按成绩降序排列结果; 10、查询既选修了"数据库"又选修了"操作系统"的学生学号及姓名。
这是一组关于学生成绩管理系统的查询请求。以下是相应的 SQL 语句:
1. 查询所有学生的学号、姓名和性别:
```sql
SELECT 学号, 姓名, 性别 FROM 学生;
```
2. 查询所有课程的课程号和课程名:
```sql
SELECT 课程号, 课程名 FROM 课程;
```
3. 查询所有学生成绩的学号、课程号和成绩:
```sql
SELECT 学号, 课程号, 成绩 FROM 成绩;
```
4. 查询所有学生的选课情况(包括学号、姓名、课程号和成绩):
```sql
SELECT 学生.学号, 学生.姓名, 课程.课程号, 成绩.成绩
FROM 学生, 课程, 成绩
WHERE 学生.学号 = 成绩.学号 AND 课程.课程号 = 成绩.课程号;
```
5. 查询平均成绩大于等于 60 分的课程号和对应的平均成绩:
```sql
SELECT 课程号, AVG(成绩) AS 平均成绩
FROM 成绩
WHERE 成绩 IS NOT NULL
GROUP BY 课程号
HAVING AVG(成绩) >= 60;
```
6. 查询每个学生的选课门数和平均成绩:
```sql
SELECT 学生.学号, COUNT(成绩.课程号) AS 选课门数, AVG(成绩) AS 平均成绩
FROM 学生, 成绩
WHERE 学生.学号 = 成绩.学号 AND 成绩 IS NOT NULL
GROUP BY 学生.学号;
```
7. 查询每个学生选修的课程数(要求成绩非空)和平均成绩:
```sql
SELECT 学生.学号, COUNT(DISTINCT 成绩.课程号) AS 选修课程数, AVG(成绩) AS 平均成绩
FROM 学生, 成绩
WHERE 学生.学号 = 成绩.学号 AND 成绩 IS NOT NULL
GROUP BY 学生.学号;
```
8. 查询每个学生的选课总学分:
```sql
SELECT 学生.学号, SUM(课程.学分) AS 总学分
FROM 学生, 成绩, 课程
WHERE 学生.学号 = 成绩.学号 AND 成绩.课程号 = 课程.课程号 AND 成绩 >= 60
GROUP BY 学生.学号;
```
9. 查询计算机系成绩在80分以上的学生姓名、课程名和成绩,并按成绩降序排列结果:
```sql
SELECT 学生.姓名, 课程.课程名, 成绩.成绩
FROM 学生, 成绩, 课程
WHERE 学生.学号 = 成绩.学号 AND 成绩.课程号 = 课程.课程号 AND 学生.系别 = '计算机系' AND 成绩 >= 80
ORDER BY 成绩 DESC;
```
10. 查询既选修了"数据库"又选修了"操作系统"的学生学号及姓名:
```sql
SELECT 学生.学号, 学生.姓名
FROM 学生, 成绩 AS c1, 成绩 AS c2, 课程 AS k1, 课程 AS k2
WHERE 学生.学号 = c1.学号 AND 学生.学号 = c2.学号 AND c1.课程号 = k1.课程号 AND c2.课程号 = k2.课程号 AND k1.课程名 = '数据库' AND k2.课程名 = '操作系统';
```
有学生一课程关系数据库,各关系表描述如下: 学生(学号,姓名,性别,年龄,系) 课程(课程号,课程名,先修课,学分) 选课(学号,课程号,成绩) 用SQL语向实现下列问题 1、向学生选修课程表中插入元组“学生S6选修课程号C2”。 2、查询每个学生的学号、姓名及其所选课程的课程名: 3、检索姓”李”且倒数第2个字为”华”字的学生的姓名和学号: 4、删除选课成绩在60分以下的学生记录; 5、把“大学英语”课程成绩提高5%; 6、求出男同学的每一年龄组(超过4人)有多少人? 7、定义视图S_age,其中包括学生学号以及每个学生选修课程的门数(要求成绩非空)和平均成绩; 8、查询每个学生的选课总学分,要求列出学生学号和总学分(说明:考 试成绩超过60才能获得此课程的学分)9、查询计算机系成绩在80分以上的学生姓名、课程名和成绩,并按成绩降序排列结果; 10、查询既选修了“数据库”又选修了“操作系统”的学生学号及姓名。
1、向学生选修课程表中插入元组“学生S6选修课程号C2”:
```
INSERT INTO 选课 (学号, 课程号) VALUES ('S6', 'C2');
```
2、查询每个学生的学号、姓名及其所选课程的课程名:
```
SELECT 学生.学号, 学生.姓名, 课程.课程名
FROM 学生, 选课, 课程
WHERE 学生.学号 = 选课.学号 AND 选课.课程号 = 课程.课程号;
```
3、检索姓”李”且倒数第2个字为”华”字的学生的姓名和学号:
```
SELECT 学号, 姓名
FROM 学生
WHERE 姓名 LIKE '李%华_';
```
4、删除选课成绩在60分以下的学生记录:
```
DELETE FROM 选课 WHERE 成绩 < 60;
```
5、把“大学英语”课程成绩提高5%:
```
UPDATE 选课 SET 成绩 = 成绩 * 1.05 WHERE 课程号 = 'C1';
```
6、求出男同学的每一年龄组(超过4人)有多少人?
```
SELECT TRUNCATE(年龄/10, 0)*10 AS 年龄组, COUNT(*) AS 人数
FROM 学生
WHERE 性别 = '男'
GROUP BY 年龄组
HAVING COUNT(*) > 4;
```
7、定义视图S_age,其中包括学生学号以及每个学生选修课程的门数(要求成绩非空)和平均成绩:
```
CREATE VIEW S_age AS
SELECT 学号, COUNT(*) AS 选修门数, AVG(成绩) AS 平均成绩
FROM 选课
WHERE 成绩 IS NOT NULL
GROUP BY 学号;
```
8、查询每个学生的选课总学分,要求列出学生学号和总学分(说明:考试成绩超过60才能获得此课程的学分):
```
SELECT 选课.学号, SUM(课程.学分) AS 总学分
FROM 选课, 课程
WHERE 选课.课程号 = 课程.课程号 AND 成绩 > 60
GROUP BY 选课.学号;
```
9、查询计算机系成绩在80分以上的学生姓名、课程名和成绩,并按成绩降序排列结果:
```
SELECT 学生.姓名, 课程.课程名, 选课.成绩
FROM 学生, 选课, 课程
WHERE 学生.学号 = 选课.学号 AND 选课.课程号 = 课程.课程号 AND 学生.系 = '计算机系' AND 选课.成绩 > 80
ORDER BY 选课.成绩 DESC;
```
10、查询既选修了“数据库”又选修了“操作系统”的学生学号及姓名:
```
SELECT S1.学号, S1.姓名
FROM 学生 S1, 选课 C1, 选课 C2
WHERE S1.学号 = C1.学号 AND S1.学号 = C2.学号 AND C1.课程号 = 'C3' AND C2.课程号 = 'C4';
```