首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问如何实现这个查询

2012-04-09 
请教怎么实现这个查询姓名 科目 成绩小明 英语 97小明 数学 82小红 英语 100小刚 英语 83小刚 化学 67希望

请教怎么实现这个查询
姓名 科目 成绩
小明 英语 97
小明 数学 82
小红 英语 100
小刚 英语 83
小刚 化学 67

希望查询所有没有考过数学的同学的英语成绩

结果为

小红 英语 100
小刚 英语 83


[解决办法]
SELECT * FROM 表 WHERE (姓名=(SELECT * FROM 表 where 科目<>'数学' ))and (科目='英语')
[解决办法]
刚刚测试了NOT IN 和NOT EXISTS 的速度, 发现NOT EXISTS 要比 NOT IN 快的多, 不知道对不对?

以下是测试例子:

-- generate the temporal table
create table #table
(id1 INT, id2 INT, value int)

set nocount on
declare @i1 int, @i2 int
set @i1 = 300
SEt @i2 = 300

while @i1>0
Begin
while @i2 > 0
Begin
insert #table
values(@i1, @i2, @i1*@i2)
set @i2 = @i2-1
End
set @i2 = @i1
set @i1 = @i1-1
end

-- truncate table #table
-- select * from #table


-- testing
declare @a DateTime, @b DateTime

set @a = Current_TimeStamp
select * from #table where id2 = 1 and id1 not in (select id1 from #table where id2 = 99)
set @b = current_TimeStamp
select DateDiff(ms, @a, @b), @a, @b


set @a = Current_TimeStamp
select * from #table t where id2 = 1
AND NOT Exists (
select 1 from #table where id2 = 99 and id1 = t.id1)
set @b = current_TimeStamp
select DateDiff(ms, @a, @b), @a, @b

热点排行