我想了解以下SQL查询的执行情况
输出是我想了解以下SQL查询的执行情况,sql,sql-server,subquery,correlated-subquery,Sql,Sql Server,Subquery,Correlated Subquery,输出是 create table student(StudentCode varchar, Marks int); insert into student values ('a',100); insert into student values ('b',100); insert into student values ('c',100); insert into student values ('d',90); insert into student values ('e',90);
create table student(StudentCode varchar, Marks int);
insert into student values ('a',100);
insert into student values ('b',100);
insert into student values ('c',100);
insert into student values ('d',90);
insert into student values ('e',90);
insert into student values ('f',80);
insert into student values ('g',70);
SELECT *
FROM student a
WHERE a.StudentCode IN (
SELECT TOP 1 b.StudentCode
FROM student b
WHERE a.marks = b.marks
);
为什么每个记录在加入子查询后不重复?对于每个分数值,请向我显示一个有该分数的学生,即使有更多的学生有该分数 拆下顶部,所有操作都将重复:
StudentCode Marks
1 a 100
2 d 90
3 f 80
4 g 70
这是您的查询:
select * from student a where a.StudentCode in (select b.StudentCode from student b where a.marks=b.marks);
相关子查询只返回一行。因此,不需要中的。返回的行是具有相同分数的学生的任意行
如果只有一个学生具有给定的分数
值,例如'f'
和'g'
,则该学生匹配
对于其余部分,匹配的学生可能是外部查询中的一个引用,也可能不是。因此,子查询将过滤掉它们
如果删除顶部(1)
,则查询将返回所有学生
select s.*
from student s
where s.StudentCode in (select top 1 s2.StudentCode
from student s2
where s2.marks = s.marks
);