| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1267 人关注过本帖
标题:where 里面一个语句不理解,请教
只看楼主 加入收藏
leon460
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2010-9-24
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:12 
where 里面一个语句不理解,请教
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#怎么没有表哇?
谢谢了
搜索更多相关主题的帖子: 成绩表 where 课程 成绩表 where 课程 
2011-08-10 10:26
panyanpan
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:82
专家分:647
注 册:2011-4-6
收藏
得分:2 
t1.C#=C#   中 两个C# 是一样的   感觉 这个 where 写不写 都一个效果
2011-08-10 14:22
png
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:126
专家分:880
注 册:2010-10-6
收藏
得分:7 
(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语句中应用"的例子.


 
2011-08-10 22:24
leon460
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2010-9-24
收藏
得分:0 
回复 2楼 panyanpan
不能取消掉的 ,我试过,取消掉,结果就错误了
2011-08-10 22:35
png
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:126
专家分:880
注 册:2010-10-6
收藏
得分:1 
回复 4楼 leon460
除非成绩表里只有一门课程.
2011-08-11 04:56
tangyunzhong
Rank: 5Rank: 5
来 自:广西
等 级:职业侠客
威 望:4
帖 子:97
专家分:364
注 册:2010-7-28
收藏
得分:7 
以下是引用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 编辑 ]
2011-08-12 01:02
小狐001
Rank: 1
等 级:新手上路
帖 子:214
专家分:0
注 册:2005-6-3
收藏
得分:0 
认真学习中……

昨天夜里,小熊坐在狮子身上哭泣, 他们告诉我—— 那只蓝色的海豚也在梦里想念你!
2011-08-12 11:01
wing7742
Rank: 2
等 级:论坛游民
帖 子:44
专家分:20
注 册:2007-9-12
收藏
得分:1 
怎么没有表?FROM后的那是什么

SQL语句可以这样来理解
首先找出课程相同的前两个最高分(where t1.C#=C#)
再来根据找出的分数匹配出学生信息

2011-08-12 17:47
pxr100
Rank: 1
等 级:等待验证会员
帖 子:3
专家分:6
注 册:2011-7-22
收藏
得分:1 
赞同2楼看法:

t1.C#=C#   中 两个C# 是一样的   感觉 这个 where 写不写 都一个效果
2011-08-15 17:28
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
收藏
得分:1 
MARK 这样的写法也用过 不过这个确实还是没有理解
2011-08-16 17:24
快速回复:where 里面一个语句不理解,请教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017982 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved