本题目要求编写SQL语句, 查询每个同学超过他选修的平均成绩的课程。 请使用: 1)用相关子查询实现 2)使用派生表实现。 CREATE TABLE `cou` ( `cno` char(4) NOT NULL, `cname` varchar(30) NOT NULL, `credit` smallint(6) DEFAULT NULL, `ptime` char(5) DEFAULT NULL, `teacher` char(10) DEFAULT NULL, PRIMARY KEY (`cno`) ) CREATE TABLE `sc` ( `sno` char(4) NOT NULL, `cno` char(4) NOT NULL, `grade` decimal(6,1) DEFAULT NULL, PRIMARY KEY (`sno`,`cno`), CONSTRAINT `fk_sc_cno` FOREIGN KEY (`cno`) REFERENCES `cou` (`CNO`), );
时间: 2023-06-04 21:05:07 浏览: 415
使用相关子查询实现:
SELECT s.sname, c.cname, sc.grade
FROM sc
JOIN cou c ON sc.cno = c.cno
JOIN (SELECT sno, AVG(grade) AS avg_grade FROM sc GROUP BY sno) AS avg_sc ON sc.sno = avg_sc.sno
JOIN student s ON sc.sno = s.sno
WHERE sc.grade > avg_sc.avg_grade
ORDER BY s.sno, c.cno;
使用派生表实现:
SELECT s.sname, c.cname, sc.grade
FROM sc
JOIN cou c ON sc.cno = c.cno
JOIN (SELECT sno, AVG(grade) AS avg_grade FROM sc GROUP BY sno) AS avg_sc ON sc.sno = avg_sc.sno
JOIN student s ON sc.sno = s.sno
JOIN (SELECT sno, cno, grade FROM sc) AS all_grade ON sc.sno = all_grade.sno AND sc.cno = all_grade.cno
WHERE all_grade.grade > avg_sc.avg_grade
ORDER BY s.sno, c.cno;
相关问题
本题目要求编写sql语句,查询计算机工程专业学生选修但软件工程专业学生没有选修的
要查询计算机工程专业学生选修但软件工程专业学生没有选修的课程,可以通过以下 SQL 语句实现:
```sql
SELECT 课程名称
FROM 课程表
WHERE 专业 = '计算机工程'
AND 课程名称 NOT IN (
SELECT 课程名称
FROM 课程表
WHERE 专业 = '软件工程'
)
```
这个 SQL 语句使用两个表格,假设一个是 `课程表` 表格包含学生课程信息,另一个是 `专业表` 表格包含学生专业信息。
- 首先,在 `课程表` 中使用 `WHERE` 子句选择专业为 "计算机工程" 的课程。
- 接着,使用子查询,选择专业为 "软件工程" 的课程。
- 然后,使用 `NOT IN` 条件,筛选出计算机工程专业选修但软件工程专业没有选修的课程。
最后,返回查询结果包含课程名称。
SQL语句 使用连接查询 找出每个学生超过或等于他选修课程平均成绩的课程号 没有平均成绩表 有成绩表包含学号和成绩
在SQL中,如果你没有单独的平均成绩表,你需要通过子查询来计算每个学生的每门课程的平均成绩,并结合主表(成绩表)来找出满足条件的结果。假设你的成绩表名为`scores`,字段包括`student_id`(学号) 和 `course_id`(课程号),你可以尝试以下的SQL语句:
```sql
SELECT s.course_id
FROM scores AS s
JOIN (
SELECT student_id, course_id, AVG(score) AS avg_score
FROM scores
GROUP BY student_id, course_id
) AS avg_scores
ON s.student_id = avg_scores.student_id AND s.course_id = avg_scores.course_id
WHERE s.score >= avg_scores.avg_score;
```
这个查询首先对`scores`表按学生和课程分组并计算平均成绩,然后将这些平均成绩与原始成绩表连接,筛选出成绩大于等于平均成绩的学生的课程。
阅读全文