有学生表S(S#,SN,SEX,AGE,DEPT) 和学生选课表SC (S#,C#,GRADE),其中:S#为学号,SN为姓名,SEX为性别,AGE为年龄,DEPT为系别,C#为课程号,GRADE为成绩。查询选修了“C001”号课程的学生姓名和所在系,T-SQL语句为:SELECT SN, DEPT FROM S WHERE S# IN (___)。
时间: 2023-09-18 15:13:51 浏览: 146
可以使用子查询的方式来查询选修了“C001”号课程的学生学号,然后将这些学号作为条件查询学生表S中的姓名和所在系。具体的 T-SQL 语句如下:
```sql
SELECT SN, DEPT
FROM S
WHERE S# IN (
SELECT S#
FROM SC
WHERE C# = 'C001'
)
```
其中,子查询 `SELECT S# FROM SC WHERE C# = 'C001'` 查询选修了“C001”号课程的学生学号,然后将这些学号作为条件查询学生表S中的姓名和所在系。
相关问题
学生关系 S(S#,SNAME,AGE,SEX) 选课关系 SC(S#,C#,GRADE) 课程关系 C(C#,CNAME,TEACHER) 查询学习课程号为C2的学生学号与成绩
可以使用如下 SQL 语句查询学习课程号为 C2 的学生学号与成绩:
```sql
SELECT S.S#, SC.GRADE
FROM S, SC
WHERE S.S# = SC.S# AND SC.C# = 'C2';
```
该语句通过内连接(使用 WHERE 子句)将学生关系 S 和选课关系 SC 进行关联,并筛选出选修课程号为 C2 的记录,最后选择学生学号和成绩两个字段进行查询。
7、 Student(S#,Sname, Sage,Ssex) 学生表 Teacher(T#,Tname) 教师表SC(S#,C#,score) 成绩表问题:1、查询001”课程比”002”课程成绩高的所有学生的学号
要查询“001”课程比“002”课程成绩高的所有学生的学号,可以使用如下 SQL 语句:
```sql
SELECT DISTINCT sc1.S#
FROM SC sc1
JOIN SC sc2 ON sc1.S# = sc2.S#
WHERE sc1.C# = '001' AND sc2.C# = '002' AND sc1.score > sc2.score;
```
该查询语句中,使用了自连接的方式,将 SC 表自身连接起来,然后使用 WHERE 子句对连接后的结果进行筛选,只保留符合条件的记录。具体来说,使用了以下语句:
- `JOIN SC sc2 ON sc1.S# = sc2.S#`:将 SC 表自身连接起来,使用 S# 字段进行连接,得到所有选了“001”课程和“002”课程的学生的记录。
- `WHERE sc1.C# = '001' AND sc2.C# = '002' AND sc1.score > sc2.score`:对连接后的结果进行筛选,只保留选了“001”课程和“002”课程的学生,并且“001”课程成绩比“002”课程成绩高的记录。
- `SELECT DISTINCT sc1.S#`:最终查询结果只需要学生的学号,使用 DISTINCT 关键字去重后返回。
因此,以上 SQL 语句可以查询“001”课程比“002”课程成绩高的所有学生的学号。
阅读全文