select * from score s1 where not exists (select * from score s2 where s_id=1 and not exists (select * from score s3 where s1.s_id=s3.s_id and s3.c_id=s2.c_id));
时间: 2024-04-05 11:31:24 浏览: 17
这是一个 SQL 查询语句,它的作用是查询出所有与学生ID为1的学生选了完全相同课程的其他学生的成绩记录。
具体来说,该查询语句包含了三个子查询:
1. 第一个子查询(最外层)用于查询学生ID为1的学生的成绩记录(从score表中筛选出s_id=1的记录)。
2. 第二个子查询用于查询所有选了和学生ID为1的学生完全相同课程的其他学生(从score表中筛选出与s_id=1的学生选课完全相同的记录)。
3. 第三个子查询用于查询某个学生是否选了某门课程(从score表中筛选出s_id对应的学生选了c_id对应的课程的记录)。
最终,通过使用not exists和三个子查询的嵌套,我们可以得到与学生ID为1的学生选了完全相同课程的其他学生的成绩记录。
相关问题
SELECT * from T1 where Exists select * from T2 where T1.id= T2.id
您的 SQL 查询语句存在语法错误,应该将 `select * from T2 where T1.id= T2.id` 用括号括起来,表示这是一个子查询,如下所示:
```
SELECT * FROM T1 WHERE EXISTS (SELECT * FROM T2 WHERE T1.id = T2.id);
```
这个查询语句的意思是,对于 T1 表中的每一行记录,都去 T2 表中查找是否存在与 T1 表中的记录具有相同 id 的记录。如果存在,则返回 T1 表中的这一行记录。
需要注意的是,这个查询语句的效率可能不太高,如果 T1 和 T2 表都非常大,可以考虑使用其他更高效的查询方式来实现相同的功能。
SELECT * FROM student s WHERE NOT EXISTS ( SELECT * FROM student WHERE a=0 AND b=0 AND c=0 AND id=s.id ); 会走索引吗
在这个查询语句中,如果 student 表中的 id 列上有索引,那么 NOT EXISTS 子查询中的条件子句中的 id=s.id 部分可以使用索引来加速查询,因此 NOT EXISTS 子查询的执行效率会有所提高。
但是,该查询语句中的 WHERE 条件子句中的 a=0 AND b=0 AND c=0 部分不能直接使用索引来加速查询,因为 a、b、c 列上的索引只能加速查询单独的列,而不能加速查询多个列的组合。因此,如果 student 表中的 a、b、c 列上有索引,那么该查询语句可能需要执行全表扫描,效率会比较低下。
为了提高该查询语句的执行效率,可以考虑为 a、b、c 列创建联合索引,这样查询时就可以使用该联合索引来加速查询,提高查询效率。