Student(sno,sname,ssex,sage,clno); Course(cno,cname,credit); Class(clno,speciality,inyear,number,monitor); Grade(sno,cno,gmark); 查询选3学分的课最多的学生的学号、姓名和课程数
时间: 2023-12-03 16:46:26 浏览: 33
可以使用以下 SQL 语句来实现:
```sql
SELECT s.sno, s.sname, COUNT(*) AS course_count
FROM Student s, Course c, Grade g
WHERE s.sno = g.sno AND c.cno = g.cno AND c.credit = 3
GROUP BY s.sno, s.sname
HAVING COUNT(*) = (
SELECT MAX(count_)
FROM (
SELECT COUNT(*) AS count_
FROM Student s, Course c, Grade g
WHERE s.sno = g.sno AND c.cno = g.cno AND c.credit = 3
GROUP BY s.sno
) t
)
```
该语句通过连接三个表 Student、Course 和 Grade,筛选出选课学分为 3 的成绩记录,再按学号和姓名分组统计每位学生选了多少门 3 学分的课程。最后,通过子查询找出选课门数最多的学生,并返回其学号、姓名和课程数。
相关问题
STUDENT表有 sno sname ssex sage sdept,couse 有cno cname credit semester,sc有sno cno gradr,请使用SQL语句完成查询选修了生物信息学课程且成绩高于该门课程平均分数的学生的姓名。
SELECT s.sname
FROM student s, sc, couse c
WHERE s.sno = sc.sno
AND sc.cno = c.cno
AND c.cname = '生物信息学'
AND sc.grade > (
SELECT AVG(sc.grade)
FROM sc, couse
WHERE sc.cno = couse.cno
AND couse.cname = '生物信息学'
)
```
① student1 表数据输入 Sno Sname Ssex Sage Sdept 3005 赵达 女 14 SX 3006 杨红 南 21 JSJ
可以使用 SQL 语句向 student1 表中插入数据:
```
INSERT INTO student1(Sno, Sname, Ssex, Sage, Sdept) VALUES
('3005', '赵达', '女', 14, 'SX'),
('3006', '杨红', '男', 21, 'JSJ');
```
执行完上述语句后,student1 表中就会有两条数据。