sql每个学生的学号姓名选修课程和成绩
时间: 2023-11-16 07:59:40 浏览: 164
可以使用如下的SQL语句来查询每个学生的学号、姓名、选修课程和成绩:
```
SELECT students.id, students.name, courses.course_name, scores.score
FROM students
INNER JOIN scores ON students.id = scores.student_id
INNER JOIN courses ON scores.course_id = courses.id;
```
这条SQL语句会从三个表中获取数据,分别是`students`、`scores`和`courses`。通过`INNER JOIN`关键字将三个表连接起来,其中`students.id = scores.student_id`表示`students`表和`scores`表通过学生ID进行连接,`scores.course_id = courses.id`表示`scores`表和`courses`表通过课程ID进行连接。
最终查询结果会包含每个学生的学号、姓名、选修课程和成绩。
相关问题
(1)查询选修课程号为C01,并且成绩及格的学生学号、姓名和系别名称。 (2)查询计算机学院选修C03课程的学生姓名、课程名称以及这门课程的成绩。(3)在Reports表中查询至少选修课了程号为C01和C02的学生学号和姓名。(4)查询既没有选修课程号C01,也没有选修课程号C02的学生的学号和姓名。(5) 查询每个同学基本信息及其选修课程的情况。(6)查询每个学生及其选修课程的情况(若某一个学生没有选课,只输出学生的基本情况信息,其选课信息为空值)。 (7)查询选修了课程名为“GIS开发”的学生学号和姓名。(8) 查询没有选修C02课程的学生学号和姓名。 (9)查询所有课程成绩均大于90分的学生学号和姓名。(10)查询选修了4门及以上课程的学生的学号、姓名和选修课程数。(11) 查询选修全部课程的学生姓名,相当于查询这样的学生,没有一门课程是他不选的。 (12) 查询平均成绩大于等于黄河同学的平均成绩的学生的学号、姓名和平均成绩。(13)查询每门课程获得最高分的同学的学号、姓名、课程名称和成绩,并按照最高成绩从高到低进行排序。
很好,您的问题是关于 SQL 语句的。以下是您提出的问题的 SQL 查询语句:
(1)查询选修课程号为C01,并且成绩及格的学生学号、姓名和系别名称。
```
SELECT StudentID, StudentName, DepartmentName
FROM Student, Department, SC
WHERE Student.StudentID = SC.StudentID
AND SC.CourseID = 'C01'
AND SC.Score >= 60
AND Student.DepartmentID = Department.DepartmentID;
```
(2)查询计算机学院选修C03课程的学生姓名、课程名称以及这门课程的成绩。
```
SELECT StudentName, CourseName, Score
FROM Student, Course, SC, Department
WHERE Student.StudentID = SC.StudentID
AND Course.CourseID = SC.CourseID
AND Department.DepartmentID = Student.DepartmentID
AND Department.DepartmentName = '计算机学院'
AND Course.CourseID = 'C03';
```
(3)在Reports表中查询至少选修课了程号为C01和C02的学生学号和姓名。
```
SELECT StudentID, StudentName
FROM Reports
WHERE CourseID IN ('C01','C02')
GROUP BY StudentID, StudentName
HAVING COUNT(DISTINCT CourseID) >= 2;
```
(4)查询既没有选修课程号C01,也没有选修课程号C02的学生的学号和姓名。
```
SELECT StudentID, StudentName
FROM Student
WHERE StudentID NOT IN (
SELECT StudentID
FROM SC
WHERE CourseID IN ('C01','C02')
);
```
(5)查询每个同学基本信息及其选修课程的情况。
```
SELECT Student.StudentID, Student.StudentName, Student.Gender, Student.Birthday, Student.Address, Department.DepartmentName, SC.CourseID, Course.CourseName, SC.Score
FROM Student
LEFT JOIN SC ON Student.StudentID = SC.StudentID
LEFT JOIN Course ON SC.CourseID = Course.CourseID
LEFT JOIN Department ON Student.DepartmentID = Department.DepartmentID
ORDER BY Student.StudentID, SC.CourseID;
```
(6)查询每个学生及其选修课程的情况(若某一个学生没有选课,只输出学生的基本情况信息,其选课信息为空值)。
```
SELECT Student.StudentID, Student.StudentName, Student.Gender, Student.Birthday, Student.Address, Department.DepartmentName, SC.CourseID, Course.CourseName, SC.Score
FROM Student
LEFT JOIN SC ON Student.StudentID = SC.StudentID
LEFT JOIN Course ON SC.CourseID = Course.CourseID
LEFT JOIN Department ON Student.DepartmentID = Department.DepartmentID
ORDER BY Student.StudentID, SC.CourseID;
```
(7)查询选修了课程名为“GIS开发”的学生学号和姓名。
```
SELECT Student.StudentID, Student.StudentName
FROM Student, SC, Course
WHERE Student.StudentID = SC.StudentID
AND SC.CourseID = Course.CourseID
AND Course.CourseName = 'GIS开发';
```
(8)查询没有选修C02课程的学生学号和姓名。
```
SELECT Student.StudentID, Student.StudentName
FROM Student
WHERE Student.StudentID NOT IN (
SELECT StudentID
FROM SC
WHERE CourseID = 'C02'
);
```
(9)查询所有课程成绩均大于90分的学生学号和姓名。
```
SELECT StudentID, StudentName
FROM SC, Student
WHERE SC.StudentID = Student.StudentID
AND Score >= 90
GROUP BY StudentID, StudentName
HAVING COUNT(DISTINCT CourseID) = (
SELECT COUNT(DISTINCT CourseID)
FROM Course
);
```
(10)查询选修了4门及以上课程的学生的学号、姓名和选修课程数。
```
SELECT StudentID, StudentName, COUNT(*) AS CourseCount
FROM SC, Student
WHERE SC.StudentID = Student.StudentID
GROUP BY StudentID, StudentName
HAVING COUNT(*) >= 4;
```
(11)查询选修全部课程的学生姓名,相当于查询这样的学生,没有一门课程是他不选的。
```
SELECT Student.StudentName
FROM Student
WHERE NOT EXISTS (
SELECT CourseID
FROM Course
WHERE NOT EXISTS (
SELECT SC.StudentID
FROM SC
WHERE SC.StudentID = Student.StudentID
AND SC.CourseID = Course.CourseID
)
);
```
(12)查询平均成绩大于等于黄河同学的平均成绩的学生的学号、姓名和平均成绩。
```
SELECT AVG(SC.Score) AS AvgScore, Student.StudentID, Student.StudentName
FROM SC, Student
WHERE SC.StudentID = Student.StudentID
GROUP BY Student.StudentID, Student.StudentName
HAVING AVG(SC.Score) >= (
SELECT AVG(SC.Score)
FROM SC, Student
WHERE SC.StudentID = Student.StudentID
AND Student.StudentName = '黄河'
);
```
(13)查询每门课程获得最高分的同学的学号、姓名、课程名称和成绩,并按照最高成绩从高到低进行排序。
```
SELECT SC.StudentID, Student.StudentName, Course.CourseName, MAX(SC.Score) AS MaxScore
FROM SC, Student, Course
WHERE SC.StudentID = Student.StudentID
AND SC.CourseID = Course.CourseID
GROUP BY SC.CourseID
ORDER BY MaxScore DESC;
```
有学生一课程关系数据库,各关系表描述如下: 学生(学号,姓名,性别,年龄,系)课程(课程号,课程名,先修课,学分)选课(学号,课程号,成绩) 用 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 FLOOR(年龄 / 10) * 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 学生.学号, 学生.姓名
FROM 学生, 选课 AS s1, 选课 AS s2
WHERE 学生.学号 = s1.学号 AND 学生.学号 = s2.学号 AND s1.课程号 = 'C1' AND s2.课程号 = 'C3';
```
阅读全文