ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: wuxiang_123

[原创] 一个简单的SQL排名练习

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-1-25 09:18 | 显示全部楼层
这还是简单排名啊
看了半天,也没有理解里面的where,难道这儿的where是用来连接两个表的的,而不是筛选功能?
在我印象中where用于连接时的形式是“from table1,table2 where 连接条件”这样的
望吴想老师有空回复一下,谢谢

TA的精华主题

TA的得分主题

发表于 2011-1-25 09:40 | 显示全部楼层
香香,为什么我定义子查询里的表名,而主查询用默认表名,结果全都是1啊?
  1. select 班级,学生,
  2. 语文,(select 1+count(T.语文) from [成绩表$] T where 班级=T.班级 and T.语文>语文) as 语文排名,
  3. 数学,(select 1+count(T.数学) from [成绩表$] T where 班级=T.班级 and T.数学>数学) as 数学排名,
  4. 英语,(select 1+count(T.英语) from [成绩表$] T where 班级=T.班级 and T.英语>英语) as 英语排名,
  5. 总分,(select 1+count(T.总分) from [成绩表$] T where 班级=T.班级 and T.总分>总分) as 总分排名 from [成绩表$]
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-1-25 09:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

回复 21楼 meihuiling 的帖子

这个是做数据源时,已经用公式计算出总分,然后复制-粘贴为数值.后来又修改了某些科目的分数,因为没有了公式,所以,总分没有跟着变 这个对学习语法没有影响,你就当总分是一个科目 不得不说,你还真是细心

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-1-25 09:43 | 显示全部楼层

回复 22楼 onthetrip 的帖子

你印象中的形式是多表查询,又叫WHERE字句查询.在ACCESS2007帮助有语法说明.在这里,我们使用的是嵌套查询,也叫子查询

TA的精华主题

TA的得分主题

发表于 2011-1-25 09:54 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-1-25 10:09 | 显示全部楼层

回复 24楼 wuxiang_123 的帖子

谢谢夸奖,还得跟着你们多多学习!在下一直都很佩服你们的!

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-1-25 10:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

回复 23楼 zzmxy 的帖子

我们来分析这个语句:
select 1+count(T.语文) from [成绩表$] T where 班级=T.班级 and T.语文>语文
这里,T.语文和语文都是别名为T的成绩表的语文.也就是说,他们表示的同时同一个东东.只不过一个是完整的声明了从属表的写法,一个是没有声明从属表的写法.最终的结果是自己和自己比,自己自然不可能比自己大,所以count(T.语文)返回的是0个,0+1,结果自然就是1.
假如我们改成:
select 班级,学生,
语文,(select 1+count(T.语文) from [成绩表$] T where g.班级=T.班级 and T.语文>g.语文) as 语文排名 from [成绩表$]g
那么,就可以得到对比的结果了.
这里实际上了两个表同班级的语文作比较.T.语文是子查询表的语文,g.语文是主查询的语法,count(T.语文)统计的是同班级子查询的语文比主查询语文大的次数.
需要注意的是,假如一个字段省略声明从属表,那么这个字段的从属表就是他所在的表.
正如你的语句中,T.语文和语文都是表别名为T的语文字段

TA的精华主题

TA的得分主题

发表于 2011-1-25 10:44 | 显示全部楼层
也就是说,子查询里,不写表名的字段,也就是默认写法,指的是本表,
而写了表名的字段也指的是本表(T2),所以就是自己跟自己比较啦……是不?

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-1-25 11:03 | 显示全部楼层

回复 29楼 zzmxy 的帖子

可以这么说.或者,用一个完整的语法来说明比较好.

完整字段声明从属表的写法(ACCESS默认写法):
select [成绩表$].班级,[成绩表$].语文 from [成绩表$]
表别名替代原表写法:
select a.班级,a.语文 from [成绩表$]a
省略声明从属表写法:
select 班级,语文 from [成绩表$]
说明:
一:三种写法都是表示同一样的东东.在进行多表查询或JOIN连接等时,假如一个字段在多个表可以找到,那么这个字段必须声明从属表(因为SQL不知道你想要返回的是那个表的字段),如果一个字段只在一个表中找到(如第三种写法),那么,可以省略声明从属的表
.二:表别名和字段别名的作用都可以简化语句,如第一种和第二种写法的比较.

[ 本帖最后由 wuxiang_123 于 2011-1-25 11:04 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-1-25 11:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

回复 30楼 wuxiang_123 的帖子

现在非常明白了,谢谢香香,我已经进入SQL的大门了……
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 06:40 , Processed in 0.032584 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表