用一条SQL语句查询出每门课都大于80分的学生姓名。
创建表并初始化数据
create table Grade
(
Name nvarchar(20),
Course nvarchar(10),
Score int
)
insert Grade values('张三','语文',80)
insert Grade values('张三','数学',75)
insert Grade values('李四','语文',66)
insert Grade values('李四','数学',91)
insert Grade values('王五','语文',84)
insert Grade values('王五','数学',100)
insert Grade values('王五','英语',97)
insert Grade values('杨六','英语',86)
insert Grade values('杨六','数学',93)
期望的结果为:王五和杨六。
方法一 not in +子查询 :
select distinct Name from Grade where Name not in (select distinct Name from Grade where Score<=80)
方法二 group by +聚合函数:
select Name from Grade group by Name having min(score)>80
或另外一种方法适合学生所考的科目都一样的情况,但是此方法在这里无效。
select Name from Grade where Score>80 group by Name having count(Score)=3
下面的几种方法也可以解题,但是不怎么好。
select distinct a.Name from Grade a left join Grade b on a.Name=b.Name and b.Score<=80 where b.Name is null
或
select distinct Name from Grade a where not exists (select Name from Grade b where b.Score<=80 and b.Name=a.Name)
或
(select distinct Name from Grade) except (select distinct Name from Grade where Score<=80)
posted on
浙公网安备 33010602011771号