PowerBuilder中的select语句的使用_第1页
PowerBuilder中的select语句的使用_第2页
PowerBuilder中的select语句的使用_第3页
PowerBuilder中的select语句的使用_第4页
PowerBuilder中的select语句的使用_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

地质研究所开发信息室2005 10 4 PowerBuilder中的select语句的使用 PowerBuilder中的select语句的使用地质研究所开发信息室 目录 一 SQL语言1 1数据查询语言DQL1 2数据类型1 3类型转换1 4表达式二 SQL中的查询语句2 1简单查询2 2嵌套的select语句查询2 3IN和OR的用法2 4ANY和ALL的用法2 5BETWEEN和NOTBETWEEN的用法2 6LIKE和NOTLIKE的用法2 7NYLL和NOTNULL的用法2 8GROUPBY HAVING及ORDERBY的用法2 9表连接操作 三 常用的函数3 1算术函数3 2日期函数3 3字符串函数3 4空值函数3 5聚组函数 PowerBuilder中的select语句的使用地质研究所开发信息室 一 SQL语言分类 命令共分为四大类 1 数据查询语言DQL select 2 数据操作语言DML insert update delete 3 据定义语言DDL createtable表 view视图 index索引 syn同义词 cluster聚簇 4 数据控制语言DCL 授权 数据查询语言DQL基本结构是由select子句 from子句 where子句组成的查询块 其书写格式为 selectfromwhere 1 数据查询语言DQL PowerBuilder中的select语句的使用地质研究所开发信息室 2 数据类型 数字型 numbernumber 7 2 表示一共7位 小数点后是二位小数 字符型 charchar 120 包括空格 varchar 20 不包括空格 日期型 date布尔型 boolean 数据类型 3 类型转换 类型转换有 1 字符型转换为数字型 char number2 数字型转换为字符型 number char3 字符型转换为日期型 char date4 日期型转换为字符型 date char PowerBuilder中的select语句的使用地质研究所开发信息室 4 表达式 算术表达式 1 常数 如10 20 30 05 2 变量 字段名 如NAME 3 用 联结的表达式 关系表达式 关系表达式主要是关系运算符联结的算术表达式而成 运算的结果是一个逻辑值 关系运算符有 大于 等于 大于等于 不等于逻辑表达式 逻辑表达式是由逻辑运算符联结的表达式 逻辑表达式有 NOT AND OR 它们执行的优先级为 NOT AND OR 表达式 注意 在SQL中 算术表达式可以用在select子句和order子句中 而关系表达式和逻辑表达式决不能用在这两个子句中 关系表达式和逻辑表达式可以用在where子句和having子句中 表达式中还可以用字符型和日期型表达式 在日期型中 以 天 为基本单位 PowerBuilder中的select语句的使用地质研究所开发信息室 二 SQL中的查询语句 SQL语言的查询分为两大类 1 简单查询 简单查询只对一个表进行查询 2 嵌套查询 又称子查询 是对多个表的复杂查询 查询的总体结构是 selectfrom where groupby having orderby PowerBuilder中的select语句的使用地质研究所开发信息室 2 1 简单查询 select fromdaa01 显示daa01表中所有 的列值 简单查询是指对一个单表的查询 它分带条件的查询和不带条件的查询 以六区所管的井为例 1 不带条件的简单查询 例如 PowerBuilder中的select语句的使用地质研究所开发信息室 2 带条件的简单查询格式为 select属性 组 form表 组 where 例1查询daa01表中每口井的井号 selectjhfromdaa01 查询结果如右图 例2查询daa01表中每口井的井号 矿名 selectjh kmfromdaa01 查询结果如右图 PowerBuilder中的select语句的使用地质研究所开发信息室 selectjh qkdy cw mqjb kmfromdaa01 查询结果如右图 例3查询daa01表中井号 区块单元 层位 目前井别 矿名 PowerBuilder中的select语句的使用地质研究所开发信息室 例4查询射开井段顶深超过1000米的井的井号 区块单元 层位 射开井段顶深 目前井别 矿名 selectjh qkdy cw skjdds1 mqjb kmfromdaa01whereskjdds1 1000 查询结果如右图 PowerBuilder中的select语句的使用地质研究所开发信息室 例5查询射开井段顶深超过1000米的井的所有中心站 selectdmfromdaa01whereskjdds1 1000 查询结果如右图 例6查询射开井段顶深超过1000米的井的所有中心站 并消去重复值 selectdistinctdmfromdaa01whereskjdds1 1000 查询结果如下图 PowerBuilder中的select语句的使用地质研究所开发信息室 例7查询井号以 杜 打头的井号的井号 队名 计量站号 selectjh dm jlzhfromdaa01wherejhlike 杜 查询结果如右图 PowerBuilder中的select语句的使用地质研究所开发信息室 例8查询射开井段顶深超过1000米的井的井号 区块单元 层位 射开井段顶深 目前井别 其查询结果按射开井段顶深的递增次序排列 selectjh qkdy cw skjdds1 mqjbfromdaa01whereskjdds1 1000orderbyskjdds1 查询结果如右图 PowerBuilder中的select语句的使用地质研究所开发信息室 例9查询射开井段顶深超过1000米的井的队名 井号 区块单元 层位 射开井段顶深 目前井别 其查询结果按队名递减次序排列 并且与按射开井段顶深的递增次序排列 selectdm jh qkdy cw skjdds1 mqjbfromdaa01whereskjdds1 1000orderbydmdesc skjdds1 查询结果如右图 注 用ORDERBY语句对列排序 ASC 升序 缺省的 DESC 降序 ORDERBY语句在SELECT命令最后 PowerBuilder中的select语句的使用地质研究所开发信息室 例10如果六区5站的每口井都加100m 查询该站的每口井的井号和新加的射开井段顶深的值 selectdm jh skjdds1 skjdds1 100fromdaa01wheredm 六区5站 查询结果如右图 PowerBuilder中的select语句的使用地质研究所开发信息室 2 2嵌套的select语句查询 所谓嵌套查询 又称 子查询 是指在where子句中包括的查询 它使得一系列简单查询可以构成复杂的查询 子查询的查询结果用于建立主查询的查找条件 我们来看下面的列子 例1查询dba01库中的井号在daa01中 i 用嵌套查询 selectjhfromdba01wherejhin selectjhfromdaa01wherekm 采油作业六区 ii 不用嵌套查询 selectdba01 jhfromdba01 daa01wheredba01 jh daa01 jhandkm 采油作业六区 PowerBuilder中的select语句的使用地质研究所开发信息室 例2查询那些井和 曙1 37 43 井在同一中心站中 selectjh dmfromdba04wheredm selectdmfromdaa01wherejh 曙1 37 43 在这个例子中 首先要解决 曙1 37 43 在哪个中心站 这由子查询完成 然后再在主查询中查找和 曙1 37 43 在同一中心站中的其他全部井 这个查询等价于两个查询 1 先查询 曙1 37 43 在那一个中心站 selectdmfromdaa01wherejh 曙1 37 43 得到的结果是六区5站 2 然后再查询在六区5站的井号 selectjh dmfromdba04wheredm 六区5站 子查询可以是多层的 子查询所存取的表可以是主查询中所没有存取的表 PowerBuilder中的select语句的使用地质研究所开发信息室 例3查询在 曙1 37 43 井中的区块单元 selectqkdyfromdba04wheredm selectdmfromdaa01wherejh 曙1 37 43 当子查询返回的值不是一个值而是一个集合时 就不能简单地使用比较符了 此时必须根据语义在子查询前加上ANY或ALL 或者使用集合关系操作符IN NOTIN等 若上面的列子位于 曙1 37 43 这个井的站不止一个 那么就应将条件改成 wheredmnotin selectdmfromdaa01wherejh 曙1 37 43 PowerBuilder中的select语句的使用地质研究所开发信息室 例4找出其它中心站中比六区5站中某一井产量高的井 速度较慢 selectjhfromdba04whereycyl any selectycylfromdba04wheredm 六区5站 andny 200508 andkm 采油作业六区 anddm 六区5站 andny 200508 andkm 采油作业六区 orderbyycyldesc 例5找出其它中心站中比六区5站中全部井产量都高的井 速度较慢 selectjhfromdba04whereycyl all selectycylfromdba04wheredm 六区5站 andny 200508 andkm 采油作业六区 anddm 六区5站 andny 200508 andkm 采油作业六区 orderbyycyldesc 从这几个例子中可以看出 ALL等价于AND关系 ANY等价于OR关系 IN是属于关系 NOTIN是不属于关系 当字查询返回的值多于一列时 主查询的where子句中的列名要在扩号中 PowerBuilder中的select语句的使用地质研究所开发信息室 例6查找与 曙1 38 更037 有相同的计量站号和中心站号的井号 层位 和区块单元 selectjh cw qkdyfromdaa01where jlzh dm selectjlzh dmfromdaa01wherejh 曙1 38 更037 selectjh dm ycylfromdba04wheredm selectdmfromdba04wherejh 曙1 34 548 orycyl selectycylfromdba04wherejh 曙1 34 548 例7查找与 曙1 34 548 单位相同或者月产油量比它高的井号 在书写时要注意 多个列的位置要对应正确 SQL允许将基本select查询块组合成较复杂的命令 一个查询的where子句可以包含标准查找条件 连接条件 函数等 PowerBuilder中的select语句的使用地质研究所开发信息室 例8查找月产油量比 杜813 兴平51 高 且在2005 7 26日投产的井号 selectdba04 jh dba04 dm ycyl tcrqfromdba04 daa01wheretcrq 26 jul 2005 anddba04 jh daa01 jhandycyl selectycylfromdba04wherejh 杜813 兴平51 子查询中不能有orderby子句 因为orderby子句只能改变查询结果数据显示的顺序 并不改变存储的顺序 子查询和主查询可以同步操作 在上面的例子中 子查询都是先确定的 然后再以此作为主查询的条件 但有时子查询需要根据主查询进行计算 然后再将其查询结果影响主查询 这种情况称为主查询和子查询的同步操作 参见下例 PowerBuilder中的select语句的使用地质研究所开发信息室 例9查找所有月产油量高于所在单位平均月产油量的井号 selectdm jh ycylfromdba04awhereycyl selectavg ycyl fromdba04wherea km kmandkm 采油作业六区 andny 200508 andkm 采油作业六区 andny 200508 用主查询选取的单位在子查询中计算平均产量 然后用该平均产量判断主查询所选取的单位是否满足条件 PowerBuilder中的select语句的使用地质研究所开发信息室 2 3IN和OR的用法 例查询 六区5站 或者 六区6站 的所有井号 矿名 此查询有三种实现方法 1 可以在where子句中用or来实现 selectjh kmfromdaa01wheredm 六区5站 ordm 六区6站 2 可以在where子句中用in来实现 selectjh km dmfromdaa01wheredmin 六区5站 六区6站 PowerBuilder中的select语句的使用地质研究所开发信息室 3 可以在where子句中用union来实现 selectjh km dmfromdaa01wheredm 六区5站 unionselectjh km dmfromdaa01wheredm 六区6站 查询结果如右图 PowerBuilder中的select语句的使用地质研究所开发信息室 2 4ANY和ALL的用法 在嵌套select语句中 当子查询结果是一组值时 any和all可以与子查询前面的比较运算符一起使用 关于any和all的用法请注意两点 写查询时 不要将any和all错误的理解为英语中通常意义下的any和all 而要按它们在技术上专门的定义理解 in和 any 的意义相同 notin和 all 的意义相同 例找出至少超过 采油作业六区 中 六区6站 的每个站所在的队名和井号 此查询有两种实现方法 1 用any来实现 selectdm jhfromdba04whereny 200508 andkm any selectkmfromdba04wheredm 六区6站 andny 200508 PowerBuilder中的select语句的使用地质研究所开发信息室 2 用min函数来实现 selectdm jhfromdba04whereny 200508 andkm any selectmin km fromdba04wheredm 六区6站 andny 200508 查询结果如右图 PowerBuilder中的select语句的使用地质研究所开发信息室 2 5BETWEEN和NOTBETWEEN的用法 between操作符给出查询范围内的某些列 而notbetween则给出查询选择范围之外的某些列 例1找出8月份六区月产油量在400和600之间的所有井 selectjh qkdy ycylfromdba04whereycylbetween400and600andny 200508 andkm 采油作业六区 例2找出8月份六区月产油量不在400和600之间的所有井 selectjh qkdy ycylfromdba04whereycylnotbetween400and600andny 200508 andkm 采油作业六区 PowerBuilder中的select语句的使用地质研究所开发信息室 2 6LIKE和NOTLIKE的用法 例2找出以 4 结尾的井号 select fromdaa01wherejhlike 4 andkm 采油作业六区 例3找出以 杜 开头 后面有三个字符的井号 select fromdaa01wherejhlike 杜 andkm 采油作业六区 注意 代表一个字符 例4找出所有不以 曙 开头的井号 select fromdaa01wherejhnotlike 曙 andkm 采油作业六区 例1找出以 曙 开头的井号 like操作符在where中列出了一些特殊的字符 可用select子句去找带有这些字符的字段 而notlike的意义同like正好相反 select fromdaa01wherejhlike 曙 andkm 采油作业六区 注意 代表0或多个字符 PowerBuilder中的select语句的使用地质研究所开发信息室 2 7NYLL和NOTNULL的用法 null空值不代表任何一个数值 不是一个数字 也不分类型 例1找出曾用井号是空的井 select fromdaa01wherecyjhisnullandkm 采油作业六区 例2找出曾用井号是非空的井 select fromdaa01wherecyjhisnotnullandkm 采油作业六区 PowerBuilder中的select语句的使用地质研究所开发信息室 2 8GROUPBY HAVING及ORDERBY的用法 例1计算中心站的月产量 selectdm sum ycyl fromdba04whereny 200508 andkm 采油作业六区 groupbydm 例2计算中心站的月产量 平均产量 最大产量和最低产量 selectdm sum ycyl round avg ycyl 0 max ycyl min ycyl fromdba04whereny 200508 andkm 采油作业六区 groupbydm 每一个单位为一组 返回一个记录 PowerBuilder中的select语句的使用地质研究所开发信息室 例3计算每个中心站中每个计量站各有多少井 selectdm jlzh count fromdaa01wherekm 采油作业六区 groupbydm jlzh 例4查询哪些中心站月产量超过6000吨 selectdm sum ycyl fromdba04whereny 200508 andkm 采油作业六区 groupbydmhavingsum ycyl 6000 要特别注意having子句和where子句的区别 where子句是用来指定表中元组所应满足的条件 只有那些满足where条件的元组才能被选择出来 也才能被排序 orderby 或被分组 groupby 而having子句是用来指定每一分组所应满足的条件 只有满足having条件的那些组才能在结果中显示 因此 having条件必须是描述分组性质的属性 见例5 有时 我们只希望选择满足一定条件的分组 这时可以使用having子句来说明 见下面例4 PowerBuilder中的select语句的使用地质研究所开发信息室 例5having子句与where子句的混合使用 selectdm qkdy sum ycyl fromdba04whereny 200508 andkm 采油作业六区 andrcbzisnotnullgroupbydm qkdyhavingqkdy 杜84东 andsum ycyl 6000orderbydm 在这个查询中 首先where子句说明只有那些能够获得产量的井才能作进一步的分组 groupby子句将所有满足where子句的元组按照dm和qkdy这两个属性进行分组 而having子句则指出在这些分组中 我们只关心那些非 杜84东 的 而且月总产量超过6000吨的组 只有这些分组才是我们最后所要的 将这些分组按dm的值排序就是查询的结果 在这里 having子句中出现的都是分组属性 尽管dm和qkdy都是个体属性 每口井只有一个值 由于是按dm和qkdy进行的分组 所以qkdy就升级为组的属性了 在下面的例子中 应注意select子句中各项的一致性 在出现groupby子句时必须全部为分组属性 否则会出现错误 见例6和例7 PowerBuilder中的select语句的使用地质研究所开发信息室 例6having子句与select子句的混合使用 selectjh sum rcyl fromdba01whereto char rq yyyymm 200509 andjhin selectjhfromdaa01wherekm 采油作业六区 groupbyjhhavingjhlike 曙 这是正确的分组 例7having子句与select子句的限制 selectrcylfromdba01whereto char rq yyyymm 200509 andjhin selectjhfromdaa01wherekm 采油作业六区 groupbyjh 这是错误的分组 尽管根据jh分组 每个组都只有一个元组 因此从语义上说 rcyl既能描述分组中的个体 也能描述分组 但从语法上说 rcyl只能描述分组中的个体 只有sum rcyl 才是描述分组性质的 所以以下的查询才是正确的 PowerBuilder中的select语句的使用地质研究所开发信息室 例8查询每个中心站的月总产量和平均产量 selectsum rcyl fromdba01whereto char rq yyyymm 200509 andjhin selectjhfromdaa01wherekm 采油作业六区 groupbyjh selectdm sum ycyl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论