select Sno,Sname from Student where Sno in(select distinct Sno from SC s1 where not exists(select * from SC s2 where s2.Sno='200215121' and not exists(select * from SC s3 where s1.Sno=s3.Sno and s2.Cno=s3.Cno))
时间: 2023-06-09 21:06:54 浏览: 255
这是一个 SQL 查询语句,目的是查找选修了与学号为200215121的学生选修的课程相同的其他学生的学号和姓名。具体实现为:首先从 SC 表中查出所有选过与学号为200215121的学生选修相同课程的学生学号,然后再从 Student 表中查出这些学生的学号和姓名。
请注意,这只是一个查询语句,需要在实际数据库系统中执行才能得到正确结果。
相关问题
使用not exists
也可以使用 NOT EXISTS 子查询来查询至少选修了刘晨选修的全部课程的学生学号和姓名,SQL 语句如下:
```
SELECT DISTINCT Student.Sno, Student.Sname
FROM Student
JOIN SC ON Student.Sno = SC.Sno
WHERE NOT EXISTS (
SELECT Cno
FROM SC
JOIN Student ON SC.Sno = Student.Sno
WHERE Student.Sname = '刘晨'
AND NOT EXISTS (
SELECT Cno
FROM SC AS SC2
WHERE SC2.Sno = Student.Sno
AND SC2.Cno = SC.Cno
)
)
```
该语句会查询出选修了某个与刘晨选修的课程相同的课程的学生,并筛选出其中选修了所有与刘晨选修的课程相同的课程的学生。这里使用了两个 NOT EXISTS 子查询,第一个子查询筛选出选修了某个与刘晨选修的课程相同的课程的学生,第二个子查询则判断该学生是否选修了所有与刘晨选修的课程相同的课程。
对于教学数据库的三个基本表 S (SNO, SNAME, AGE, SEX, SDEPT) SC (SNO, CNO, GRADE) C (CNO, CNAME, CDEPT, TNAME) 其中,S代表学生关系,其属性分别为:学号,姓名,年龄,性别,系别。 SC代表学习关系,其属性分别为:学号,课程号,成绩。 C代表课程关系,其属性分别为:课程号,课程名,开课系别,教师 试用SQL的查询语句表达下列查询: 1)检索至少选修DING老师所教课程中一门课程的男学生姓名。 2)检索全部学生都选修的课程的课程号与课程名。 3)检索年龄小于20岁的女学生的学号和姓名。 4)检索至少选修DING老师所教课程中一门课程的男学生姓名。
1)检索至少选修DING老师所教课程中一门课程的男学生姓名。
```
SELECT DISTINCT S.SNAME
FROM S, SC, C
WHERE S.SNO = SC.SNO AND SC.CNO = C.CNO AND C.TNAME = 'DING' AND S.SEX = '男';
```
2)检索全部学生都选修的课程的课程号与课程名。
```
SELECT C.CNO, C.CNAME
FROM C
WHERE NOT EXISTS (
SELECT S.SNO
FROM S
WHERE NOT EXISTS (
SELECT SC.CNO
FROM SC
WHERE S.SNO = SC.SNO AND C.CNO = SC.CNO
)
);
```
3)检索年龄小于20岁的女学生的学号和姓名。
```
SELECT S.SNO, S.SNAME
FROM S
WHERE S.AGE < 20 AND S.SEX = '女';
```
4)检索至少选修DING老师所教课程中一门课程的男学生姓名。
```
SELECT DISTINCT S.SNAME
FROM S, SC, C
WHERE S.SNO = SC.SNO AND SC.CNO = C.CNO AND C.TNAME = 'DING' AND S.SEX = '男';
```
阅读全文