SQL语句,已知Student、Course和SC表,查询学生姓名、年龄、所在系以及该系的平均年龄、最大年龄和最小年龄。
时间: 2023-06-12 10:04:51 浏览: 848
可以使用以下 SQL 语句进行查询:
```
SELECT s.name, s.age, d.name AS dept_name, AVG(s2.age) AS avg_age, MAX(s2.age) AS max_age, MIN(s2.age) AS min_age
FROM Student s
JOIN SC ON s.sid = SC.sid
JOIN Course c ON c.cid = SC.cid
JOIN Student s2 ON s2.sid = SC.sid
JOIN Department d ON d.did = s.did
GROUP BY s.name, s.age, d.name
```
其中,我们通过 JOIN 连接 Student、SC、Course、Department 四个表,然后使用 GROUP BY 对结果进行分组,统计出每个学生所在系的平均年龄、最大年龄和最小年龄。最终的结果包括学生姓名、年龄、所在系、该系的平均年龄、最大年龄和最小年龄。
相关问题
SQL语句,已知Student、Course和SC表,查询计算机系学生的考试情况,列出学号、姓名、考试课程名、考试成绩及成绩排名。
可以使用以下 SQL 语句查询:
```
SELECT s.ID AS 学号, s.Name AS 姓名, c.Name AS 考试课程名, sc.Score AS 考试成绩,
(SELECT COUNT(*) FROM SC sc2 WHERE sc2.CourseID = sc.CourseID AND sc2.Score > sc.Score) AS 成绩排名
FROM Student s
JOIN SC sc ON s.ID = sc.StudentID
JOIN Course c ON sc.CourseID = c.ID
WHERE s.Department = '计算机系'
ORDER BY sc.CourseID, sc.Score DESC;
```
解释:
1. 使用 `JOIN` 将学生、课程和成绩表连接起来。
2. 使用嵌套查询计算成绩排名,即查询与当前学生在同一门课程中成绩高于当前学生的学生数量。
3. 使用 `WHERE` 子句过滤出计算机系的学生。
4. 使用 `ORDER BY` 子句按照课程和成绩进行排序,以便进行结果展示。
SQL语句,已知Student、Course和SC表,查询至少选了C001和C002两门课程的学生的学号和所选的课程号。
可以使用子查询的方式来解决这个问题。具体的 SQL 语句如下:
```
SELECT SC.SID, SC.CID
FROM SC
WHERE SC.CID IN ('C001', 'C002')
AND SC.SID IN (SELECT SC2.SID
FROM SC SC2
WHERE SC2.CID='C001'
AND SC2.SID IN (SELECT SC3.SID
FROM SC SC3
WHERE SC3.CID='C002'))
```
其中,第一个子查询选出选了 C001 或 C002 课程的学生,第二个子查询选出同时选了 C001 和 C002 课程的学生。两个子查询的交集即为至少选了 C001 和 C002 两门课程的学生。
阅读全文