注册 登录
编程论坛 SQL Server论坛

where 里面一个语句不理解,请教

leon460 发布于 2011-08-10 10:26, 1267 次点击
SC(S#,C#,score) 成绩表
查询每门功成绩最好的前两名
    SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
      FROM SC t1
      WHERE score IN (SELECT TOP 2 score
              FROM SC
              WHERE t1.C#= C#
            ORDER BY score DESC
              )
其中 where WHERE t1.C#= C# 这句怎么理解? 前面一个C#和后面一个C# 一样 么? 后面的一个 C#怎么没有表哇?
谢谢了
12 回复
#2
panyanpan2011-08-10 14:22
t1.C#=C#   中 两个C# 是一样的   感觉 这个 where 写不写 都一个效果
#3
png2011-08-10 22:24
(SELECT TOP 2 score FROM SC WHERE t1.C#= C# ORDER BY score DESC)
相当于
(SELECT TOP 2 score FROM SC t2 WHERE t1.C#= t2.C# ORDER BY score DESC)

你的这段语句可以理解成-

针对表t1的所有记录进行查询,查看t1每条记录的SCORE数值是否在表t2的结果集内. 而表t2的结果集是根据表t1的每条记录的C#值重复计算出来的.

换一个角度,还可以看成t1与t2的嵌套循环,t1为外循环t2为内循环.

建议你看一下"相关子查询在WHERE语句中应用"的例子.


 
#4
leon4602011-08-10 22:35
回复 2楼 panyanpan
不能取消掉的 ,我试过,取消掉,结果就错误了
#5
png2011-08-11 04:56
回复 4楼 leon460
除非成绩表里只有一门课程.
#6
tangyunzhong2011-08-12 01:02
以下是引用leon460在2011-8-10 10:26:00的发言:

SC(S#,C#,score) 成绩表  
查询每门功成绩最好的前两名  
    SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数  
      FROM SC t1  
      WHERE score IN (SELECT TOP 2 score  
              FROM SC  
              WHERE t1.C#= C#  
            ORDER BY score DESC  
              )  
其中 where WHERE t1.C#= C# 这句怎么理解? 前面一个C#和后面一个C# 一样 么? 后面的一个 C#怎么没有表哇?
谢谢了
大哥,这两个C#是不一样的,前面的C#是(第一个SELECT语句)表t1里面的字段,后面一个是表示后面SELECT语句本身的,因为不是同一个SELECT语句里面,所以不会造成字段不确定。
这些语句不是靠猜出来的,要靠理解呀!多分析分析!

[ 本帖最后由 tangyunzhong 于 2011-8-12 01:03 编辑 ]
#7
小狐0012011-08-12 11:01
认真学习中……
#8
wing77422011-08-12 17:47
怎么没有表?FROM后的那是什么

SQL语句可以这样来理解
首先找出课程相同的前两个最高分(where t1.C#=C#)
再来根据找出的分数匹配出学生信息
#9
pxr1002011-08-15 17:28
赞同2楼看法:

t1.C#=C#   中 两个C# 是一样的   感觉 这个 where 写不写 都一个效果
#10
happynight2011-08-16 17:24
MARK 这样的写法也用过 不过这个确实还是没有理解
#11
panxingren2011-08-21 09:39
赞同2楼看法:

t1.C#=C#   中 两个C# 是一样的   感觉 这个 where 写不写 都一个效果
#12
panxingren2011-08-21 09:39
赞同2楼看法:

t1.C#=C#   中 两个C# 是一样的   感觉 这个 where 写不写 都一个效果
#13
会笑的昨天2011-08-24 17:11
学习学习。。。。
1