集算器中SQL的使用
来源:互联网 发布:互联网软件测试 编辑:程序博客网 时间:2024/05/22 05:15
i数据库的连接与断开
用SQL访问数据库,首先要连接到指定的数据库。连接数据库通常可以选择两种方式:在数据源设定中直接连接,或者在网格中调用函数连接。
A1=connect("EsProc")
在使用时,直接连接的数据库,直接使用连接名调用,在数据库未断开时有效;而通过函数连接的,使用单元格名调用,在调用函数关闭之前有效。
AB1=connect("EsProc") 2=EsProc.query("select * from states") 3=A1.query("select * from states")同样,数据库连接的断开,也有两种方式:
A1=connect("EsProc")在使用时,直接连接的数据库,直接使用连接名调用,在数据库未断开时有效;而通过函数连接的,使用单元格名调用,在调用函数关闭之前有效。
4=A1.close()ii简单SQL的使用
使用db.query()函数即可在指定数据集中执行sql命令。在sql语句中,可以包含各种查询子句以及数据库函数。
AB1=connect("EsProc") 2=A1.query("select * from states where ShortName like'N%' order by Population desc") 3=A1.close()A2中查询结果如下:
在sql语句中,也可以使用网格中的其它数据作为参数:
3=["CA","ME","NM","SC","LA"] 4=A1.query("select * from states where ShortName in(?) order by Area",A3)A4中查询结果如下:
iii无返回值的SQL
如果需要通过sql对数据库操作,而没有返回的结果集,如使用create、update、delete等sql语句。那么在执行时需要使用db.execute()函数,同时,由于不需要对单元格赋值,使用”>”代替”=”。例如:
5>A1.execute("update states set ShortName='CAA' where ShortName='CA'")在无返回值的sql中,也是可以使用参数的:
6CAACA7>A1.execute("update states set ShortName=? where ShortName=?",A6,B6)iv利用SQL的查询结果
在esProc中,可以利用SQL的查询结果,进行过滤、排序、组合等等操作,以提高查询效率,或者解决一些比较复杂的问题。
下面的例子都是基于A2格中的查询结果做的:
AB1=connect("EsProc") 2=A1.query("select * from states order by Population desc")
例如,对数据过滤:(检索指定缩写的州数据)
3=["CA","ME","NM","SC","LA"] 4=A2.select(A3.pos(shortName)>0)
例如,对数据聚合计算:(缩写以C开头的州共有多少个)
5=A2.count(like(ShortName,"C*"))例如,对数据库数据按要求分组:(按照缩写的首字母分组)
6
=A2.group(left(ShortName,1))
其中选中成员的具体数据为:(双击可查看)
v常见的SQL语句与esProc语法的对照
1. select * from
3=connect("EsProc") 4=A1.query("select * from PlayersHitting")查询结果如下:
2. select … from
从表中取出指定字段,查询结果是相同的,如下:
3. as
4=A2.new(Name,round(OBP+SLG,3):OPS)=A1.query("select Name,round(OBP+SLG,3) as OPS from PlayersHitting")根据上垒率(On-Base Percentage)和长打率(Slugging Percentage)计算出上垒加长打率(On-Base percentage Plus Slugging percentage保留三位小数),查询结果是相同的,如下:
4. where
5=A4.select(OPS>0.9)=A1.query("select Name,round(OBP+SLG,3) as OPS from PlayersHitting where OBP+SLG>0.9")查询上垒加长打率大于0.9的球员,在esProc中,可以利用已有的结果计算,查询结果如下:
5. count、sum、avg、max和min
6=A2.count(AVG>=0.3)=A1.query("select count(Name),round(OBP+SLG,3) from PlayersHitting where AVG>0.9")查询打击率(Batting Average)大于或等于0.3的球员数,结果如下:
sum、avg、max和min等sql函数的使用方法和count基本类似。在sql函数中需要使用条件时,也可以使用sumif、avgif,maxif,minif和countif这几个函数,如A2.countif(AVG;AVG>=0.3)
6. distinct 7=A2.id(Team)=A1.query("select distinct Team from PlayersHitting")查询打击率(Batting Average)大于或等于0.3的球员,并按照打击率降序和姓名升序排序,查询结果如下:
7. order by
8=A2.select(AVG>=0.3).new(Name,AVG).sort(AVG:-1,Name)=A1.query("select Name,AVG from PlayersHitting where AVG>=0.3 order by AVG desc,Name")查询打击率(Batting Average)大于或等于0.3的球员,并按照打击率降序和姓名升序排序,查询结果如下:
8. and、or、not和<>
9=A2.select(SB>=CS&&SB>=20).new(Name,SB,CS)=A1.query("select Name,SB,CS from PlayersHitting where SB>=CS and SB>=20")查询盗垒成功数(Stolen Bases)大于等于盗垒失败数(Caught Stealing),且盗垒成功数不小于20的球员,结果如下:
与之类似,or在esProc中使用操作符“||”,not在esProc中使用操作符“!”,<>在esProc中使用操作符“!=”
9. like
查询姓名以C开头的球员,查询结果如下:
在使用like函数时,不同的数据库,对通配符的使用是不同的,如本例中,用通配符“%”来表示零个或多个任意字符,而在某些数据库中,要用通配符“*”;而用esProc来处理的话,对任何数据库,语法都是统一的。
10. group
根据球员体重分组,在esProc中,可以用group函数对记录分组,结果如下:
其中选中成员的具体数据如下:
在SQL中,其实并没有真正的“组”的概念,只能在查询中,根据分组直接聚集计算,结果如下:
- 集算器中SQL的使用
- sql reporting的使用
- SQL 索引的使用
- sql游标的使用
- Sql Loader的使用
- sql函数的使用
- sql*Loader的使用
- SQL视图的使用
- SQL游标的使用
- SQL 变量的使用
- SQL语言的使用
- sql游标的使用
- SQL 游标的使用
- PL-SQL的使用
- SQL触发器的使用
- sql 游标的使用
- [SQL]触发器的使用
- SQL游标的使用
- 关于 java.lang.IllegaAccessError:Class ref in pre-verified class resoved to unexpected implementation
- VC++6.0中内存泄漏检测
- libevent介绍
- Android进阶:ListView性能优化异步加载图片 使滑动效果流畅
- 关于Struts2上传文件的最大Size的设置
- 集算器中SQL的使用
- window server 2008 64bit R2 下tomcat6w.exe调用VBA问题
- Android canvas的save restore translate rotate用法介绍
- VC6在WIN7下的安装以及解决无法打开文件的bug
- SQL 基础-----command 命令汇总
- 2011-07-18 melis 里面int 不能强制转换成枚举类型的问题原因
- 简易栈模版(链表实现)
- 什么是OpenGL中的深度、深度缓存、深度测试?
- 华为编程规范化