Student(Sid,Sname,Sage,Ssex) 学生表 Course(Cid,Cname,Tid) 课程表 SC(Sid,Cid,score) 成绩表 Teacher(Tid,Tname) 教师表 查询和“”号的同学学习的课程完全相同的其他同学学号和姓名;
时间: 2024-02-18 16:59:06 浏览: 102
可以使用子查询和集合操作来解决这个问题。具体的SQL语句如下:
```
SELECT s2.Sid, s2.Sname
FROM Student s1, Student s2, Course c
WHERE s1.Sid = '""' AND s1.Sid <> s2.Sid
AND s1.Sid = sc.Sid AND s2.Sid = sc.Sid
AND sc.Cid = c.Cid
AND NOT EXISTS (
SELECT *
FROM Course c1
WHERE c1.Cid = c.Cid AND c1.Tid <> c.Tid
)
GROUP BY s2.Sid, s2.Sname
HAVING COUNT(*) = (
SELECT COUNT(*)
FROM Course c2
WHERE c2.Cid IN (
SELECT sc1.Cid
FROM SC sc1
WHERE sc1.Sid = '""'
)
)
```
解释一下上述SQL语句:
- 首先从学生表中找到学号为""的学生s1。
- 然后通过学生表、课程表和成绩表联结,找到学习了和s1完全相同的所有课程的其它学生s2。
- 再通过子查询和集合操作,找到和s1学习课程的数量相同的课程。
- 最后通过GROUP BY和HAVING子句,过滤掉学习课程数量不同的学生,并返回他们的学号和姓名。
需要注意的是,这个SQL语句中的""是一个占位符,实际使用时需要替换成具体的学号。
相关问题
student(sid,sname,sage,ssex) 学生表 course(cid,cname,tid) 课程表 sC(sid,cid,score) 成绩表 teacher(tid,tname) 教师表
这是一个关于数据库表的问题,我可以回答。您给出了四张表:学生表、课程表、成绩表和教师表。学生表包含学生ID、姓名、年龄和性别;课程表包含课程ID、课程名称和教师ID;成绩表包含学生ID、课程ID和成绩;教师表包含教师ID和姓名。这些表可以在数据库中建立关联,以便查询学生、教师和课程相关信息。
Student(Sid,Sname,Sage,Ssex)学生表 Sid:学号 Sname:学生姓名 Sage:学生年龄 Ssex:学生性别 Course(Cid,Cname,Tid)课程表 Cid:课程编号 Cname:课程名称 Tid:教师编号 SC(Sid,Cid,score)成绩表 Sid:学号 Cid:课程编号 score:成绩 10.1 查询所有同学的学号、姓名、选课数、总成绩?
可以使用以下 SQL 语句查询所有同学的学号、姓名、选课数、总成绩:
```
SELECT Student.Sid, Sname, COUNT(SC.Cid) AS course_num, SUM(SC.score) AS total_score
FROM Student
LEFT JOIN SC ON Student.Sid = SC.Sid
GROUP BY Student.Sid, Sname;
```
这个查询语句使用了学生表 Student 和成绩表 SC 的连接查询,计算了每个学生的选课数和总成绩,最后使用 GROUP BY 和聚合函数对结果进行了分组和统计。LEFT JOIN 是为了包括那些没有选课的学生在内。
阅读全文