收藏 分享(赏)

PowerBuilder中的select语句的使用.ppt

上传人:kuailexingkong 文档编号:1704265 上传时间:2018-08-19 格式:PPT 页数:39 大小:2.94MB
下载 相关 举报
PowerBuilder中的select语句的使用.ppt_第1页
第1页 / 共39页
PowerBuilder中的select语句的使用.ppt_第2页
第2页 / 共39页
PowerBuilder中的select语句的使用.ppt_第3页
第3页 / 共39页
PowerBuilder中的select语句的使用.ppt_第4页
第4页 / 共39页
PowerBuilder中的select语句的使用.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

1、地质研究所开发信息室 2005.10.4,PowerBuilder中的 select语句的使用,PowerBuilder中的select语句的使用 地质研究所开发信息室,目 录,一、SQL语言 1.1 数据查询语言DQL 1.2 数据类型 1.3 类型转换 1.4 表达式 二、SQL中的查询语句 2.1 简单查询 2.2 嵌套的select 语句查询 2.3 IN和OR的用法 2.4 ANY和ALL的用法 2.5 BETWEEN和NOT BETWEEN的用法 2.6 LIKE和NOT LIKE的用法 2.7 NYLL和NOT NULL的用法 2.8 GROUP BY、HAVING及ORDER

2、BY的用法 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;(create table表/view视图/index索引/syn同义词/cluster聚簇) 4.数据控制语言DCL;(授权),数据查询语言DQL基本结构是由select子句,from子句,where子句组成的

3、查询块:其书写格式为:,select from where ;,1.数据查询语言DQL,PowerBuilder中的select语句的使用 地质研究所开发信息室,2.数据类型:,数字型:number number(7,2)表示一共7位,小数点后是二位小数。 字符型:char char(120)包括空格varchar(20)不包括空格 日期型:date 布尔型:boolean。,数据类型:,3.类型转换 :,类型转换有:,1) 字符型转换为数字型:char number 2) 数字型转换为字符型:number char 3) 字符型转换为日期型:char date 4) 日期型转换为字符型:da

4、te char,PowerBuilder中的select语句的使用 地质研究所开发信息室,4.表达式,算术表达式:1)常数:如 10,20,30.05,;2)变量字段名:如NAME;3)用+,-,*,/,(,)联结的表达式。 关系表达式:关系表达式主要是关系运算符联结的算术表达式而成,运算的结果是一个逻辑值。关系运算符有:大于=:等于=:大于等于!=,:不等于 逻辑表达式:逻辑表达式是由逻辑运算符联结的表达式。逻辑表达式有:NOT、AND、OR。它们执行的优先级为:NOTANDOR。,表达式,注意:在SQL中,算术表达式可以用在select子句和order子句中,而关系表达式和逻辑表达式决不能

5、用在这两个子句中;关系表达式和逻辑表达式可以用在where子句和having子句中;表达式中还可以用字符型和日期型表达式,在日期型中,以“天”为基本单位。,PowerBuilder中的select语句的使用 地质研究所开发信息室,二、SQL中的查询语句,SQL语言的查询分为两大类:1)简单查询:简单查询只对一个表进行查询; 2)嵌套查询:又称子查询,是对多个表的复杂查询。 查询的总体结构是:,select from where group byhavingorder by;,PowerBuilder中的select语句的使用 地质研究所开发信息室,2.1、简单查询,select * from

6、daa01;显示daa01表中所有(*)的列值。,简单查询是指对一个单表的查询。它分带条件的查询和不带条件的查询。(以六区所管的井为例)1).不带条件的简单查询,例如:,PowerBuilder中的select语句的使用 地质研究所开发信息室,2)带条件的简单查询格式为:select 属性(组)form 表(组)where ;例1 查询daa01 表中每口井的井号。,select jh from daa01;,查询结果如右图:,例2 查询daa01 表中每口井的井号、矿名。,select jh,km from daa01;,查询结果如右图:,PowerBuilder中的select语句的使用

7、地质研究所开发信息室,select jh,qkdy,cw,mqjb,km from daa01;,查询结果如右图:,例3 查询daa01表中井号、区块单元、层位、目前井别、矿名。,PowerBuilder中的select语句的使用 地质研究所开发信息室,例4 查询射开井段顶深超过1000米的井的井号、区块单元、层位、射开井段顶深、目前井别、矿名。,select jh,qkdy,cw,skjdds1,mqjb,km from daa01 where skjdds11000 ;,查询结果如右图:,PowerBuilder中的select语句的使用 地质研究所开发信息室,例5 查询射开井段顶深超过1

8、000米的井的所有中心站。,select dm from daa01 where skjdds11000;,查询结果如右图:,例6 查询射开井段顶深 超过1000米的井的所有中心 站。并消去重复值。,select distinct dm from daa01 where skjdds11000;,查询结果如下图:,PowerBuilder中的select语句的使用 地质研究所开发信息室,例7 查询井号以“杜”打头的井号的井号、队名、计量站号。,select jh,dm,jlzh from daa01 where jh like 杜%;,查询结果如右图:,PowerBuilder中的select

9、语句的使用 地质研究所开发信息室,例8 查询射开井段顶深超过1000米的井的井号、区块单元、层位、射开井段顶深、目前井别。其查询结果按射开井段顶深的递增次序排列。,select jh,qkdy,cw, skjdds1,mqjb from daa01 where skjdds11000 order by skjdds1;,查询结果如右图:,PowerBuilder中的select语句的使用 地质研究所开发信息室,例9 查询射开井段顶深超过1000米的井的队名、井号、区块单元、层位、射开井段顶深、目前井别。其查询结果按队名递减次序排列,并且与按射开井段顶深的递增次序排列。,select dm,jh

10、,qkdy,cw,skjdds1,mqjb from daa01 where skjdds11000 order by dm desc,skjdds1;,查询结果如右图:,注:用ORDER BY语句对列排序. ASC 升序, 缺省的.DESC 降序.ORDER BY语句在SELECT命令最后.,PowerBuilder中的select语句的使用 地质研究所开发信息室,例10 如果六区5站的每口井都加100m,查询该站的每口井的井号和新加的射开井段顶深的值。,select dm,jh,skjdds1,skjdds1+100from daa01 where dm=六区5站;,查询结果如右图:,Po

11、werBuilder中的select语句的使用 地质研究所开发信息室,2.2嵌套的select 语句查询,所谓嵌套查询(又称“子查询”)是指在where子句中包括的查询。它使得一系列简单查询可以构成复杂的查询。子查询的查询结果用于建立主查询的查找条件。我们来看下面的列子。 例1 查询dba01库中的井号在daa01中。i)用嵌套查询,select jh from dba01 where jh in (select jh from daa01 where km=采油作业六区);,ii)不用嵌套查询,select dba01.jh from dba01,daa01where dba01.jh=da

12、a01.jh and km=采油作业六区;,PowerBuilder中的select语句的使用 地质研究所开发信息室,例2 查询那些井和曙1-37-43井在同一中心站中。,select jh,dm from dba04 where dm=(select dm from daa01 where jh=曙1-37-43);,在这个例子中,首先要解决曙1-37-43在哪个中心站,这由子查询完成。然后再在主查询中查找和曙1-37-43在同一中心站中的其他全部井,这个查询等价于两个查询:1)先查询曙1-37-43在那一个中心站:,select dm from daa01 where jh=曙1-37-4

13、3;,得到的结果是六区5站。2)然后再查询在六区5站的井号:,select jh,dm from dba04 where dm=六区5站;,子查询可以是多层的。子查询所存取的表可以是主查询中所没有存取的表。,PowerBuilder中的select语句的使用 地质研究所开发信息室,例3 查询在曙1-37-43井中的区块单元。,select qkdy from dba04 where dm=(select dm from daa01 where jh=曙1-37-43);,当子查询返回的值不是一个值而是一个集合时,就不能简单地使用比较符了。此时必须根据语义在子查询前加上ANY或ALL,或者使用集

14、合关系操作符IN,NOT IN等。若上面的列子位于曙1-37-43这个井的站不止一个,那么就应将条件改成,where dm not in(select dm from daa01 where jh=曙1-37-43);,PowerBuilder中的select语句的使用 地质研究所开发信息室,例4 找出其它中心站中比六区5站中某一井产量高的井。(速度较慢),select jh from dba04 where ycyl any(select ycyl from dba04 where dm=六区5站 and ny=200508 and km=采油作业六区)and dm!=六区5站 and ny

15、=200508 and km=采油作业六区 order by ycyl desc;,例5 找出其它中心站中比六区5站中全部井产量都高的井。速度较慢),select jh from dba04 where ycyl all(select ycyl from dba04 where dm=六区5站 and ny=200508 and km=采油作业六区)and dm!=六区5站 and ny=200508 and km=采油作业六区 order by ycyl desc;,从这几个例子中可以看出:ALL等价于AND 关系;ANY 等价于OR关系;IN 是属于关系;NOT IN是不属于关系。当字查询

16、返回的值多于一列时,主查询的where 子句中的列名要在扩号中。,PowerBuilder中的select语句的使用 地质研究所开发信息室,例6 查找与曙1-38-更037有相同的计量站号和中心站号的井号,层位,和区块单元。,select jh,cw,qkdy from daa01 where (jlzh,dm)=(select jlzh,dm from daa01 where jh=曙1-38-更037);,select jh,dm,ycyl from dba04 where dm=(select dm from dba04 where jh=曙1-34-548)or ycyl (selec

17、t ycyl from dba04 where jh=曙1-34-548);,例7 查找与曙1-34-548单位相同或者月产油量比它高的井号。*,在书写时要注意,多个列的位置要对应正确。SQL允许将基本select查询块组合成较复杂的命令,一个查询的where子句可以 包含标准查找条件、连接条件、函数等。,PowerBuilder中的select语句的使用 地质研究所开发信息室,例8 查找月产油量比杜813-兴平51高,且在2005.7.26日投产的井号。,select dba04.jh,dba04.dm,ycyl,tcrqfrom dba04,daa01 where tcrq=26-jul-

18、2005and dba04.jh=daa01.jh and ycyl (select ycyl from dba04 where jh=杜813-兴平51);,子查询中不能有order by子句,因为order by子句只能改变查询结果数据显示的顺序,并不改变存储的顺序。子查询和主查询可以同步操作。在上面的例子中,子查询都是先确定的,然后再以此作为主查询的条件。但有时子查询需要根据主查询进行计算,然后再将其查询结果影响主查询。这种情况称为主查询和子查询的同步操作。参见下例:,PowerBuilder中的select语句的使用 地质研究所开发信息室,例9 查找所有月产油量高于所在单位平均月产油量

19、的井号。,select dm,jh,ycyl from dba04 a where ycyl (select avg(ycyl) from dba04 where a.km=km and km=采油作业六区 and ny=200508) and km=采油作业六区 and ny=200508;,用主查询选取的单位在子查询中计算平均产量,然后用该平均产量判断主查询所选取的单位是否满足条件。,PowerBuilder中的select语句的使用 地质研究所开发信息室,2.3 IN和OR的用法,例 查询六区5站或者六区6站的所有井号、矿名。此查询有三种实现方法:1)可以在where 子句中用or来实现

20、。,select jh,km from daa01 where dm=六区5站or dm=六区6站;,2)可以在where 子句中用in来实现。,select jh,km,dm from daa01 where dm in (六区5站,六区6站);,PowerBuilder中的select语句的使用 地质研究所开发信息室,3)可以在where 子句中用union来实现。,select jh,km,dm from daa01 where dm=六区5站union select jh,km,dm from daa01 where dm=六区6站;,查询结果如右图:,PowerBuilder中的se

21、lect语句的使用 地质研究所开发信息室,2.4 ANY和ALL的用法,在嵌套select语句中,当子查询结果是一组值时,any和all可以与子查询前面的比较运算符一起使用。关于any和all的用法请注意两点:写查询时,不要将any和all错误的理解为英语中通常意义下的any和all,而要按它们在技术上专门的定义理解;in和“=any”的意义相同,not in和”all”的意义相同。例 找出至少超过采油作业六区中六区6站的每个站所在的队名和井号。 此查询有两种实现方法:1)用any来实现。,select dm,jh from dba04 where ny=200508 and kmany (s

22、elect km from dba04 where dm=六区6站 and ny=200508);,PowerBuilder中的select语句的使用 地质研究所开发信息室,2)用min 函数来实现。,select dm,jh from dba04 where ny=200508 and kmany (select min(km) from dba04 where dm=六区6站 and ny=200508);,查询结果如右图:,PowerBuilder中的select语句的使用 地质研究所开发信息室,2.5 BETWEEN和NOT BETWEEN的用法,between操作符给出查询范围内的某

23、些列,而not between则给出查询选择范围之外的某些列。例 1 找出8月份六区月产油量在400和600之间的所有井。,select jh,qkdy,ycyl from dba04 where ycyl between 400 and 600 and ny=200508 and km=采油作业六区;,例 2 找出8月份六区月产油量不在400和600之间的所有井。,select jh,qkdy,ycyl from dba04 where ycyl not between 400 and 600 and ny=200508 and km=采油作业六区;,PowerBuilder中的select

24、语句的使用 地质研究所开发信息室,2.6 LIKE和NOT LIKE的用法,例2 找出以“4”结尾的井号。,select * from daa01 where jh like %4 and km=采油作业六区;,例3 找出以“杜”开头,后面有三个字符的井号。,select * from daa01 where jh like 杜_and km=采油作业六区;,注意:“_”代表一个字符。,例4 找出所有不以“曙”开头的井号。,select * from daa01 where jh not like 曙%and km=采油作业六区;,例 1 找出以“曙”开头的井号。,like操作符在where中

25、列出了一些特殊的字符。可用select子句去找带有这些字符的字段。而not like的意义同like正好相反。,select * from daa01 where jh like 曙%and km=采油作业六区;,注意:“%”代表0或多个字符。,PowerBuilder中的select语句的使用 地质研究所开发信息室,2.7 NYLL和NOT NULL的用法,null空值不代表任何一个数值,不是一个数字,也不分类型。例1 找出曾用井号是空的井。,select * from daa01 where cyjh is null and km=采油作业六区;,例2 找出曾用井号是非空的井。,selec

26、t * from daa01 where cyjh is not null and km=采油作业六区;,PowerBuilder中的select语句的使用 地质研究所开发信息室,2.8 GROUP BY、HAVING及ORDER BY的用法,例 1 计算中心站的月产量。,select dm,sum(ycyl) from dba04 where ny=200508 and km=采油作业六区group by dm;,例 2 计算中心站的月产量、平均产量,最大产量和最低产量。,select dm,sum(ycyl),round(avg(ycyl),0),max(ycyl),min(ycyl) f

27、rom dba04 where ny=200508 and km=采油作业六区 group by dm;,每一个单位为一组,返回一个记录。,PowerBuilder中的select语句的使用 地质研究所开发信息室,例 3 计算每个中心站中每个计量站各有多少井。,select dm,jlzh,count(*) from daa01 where km=采油作业六区group by dm,jlzh;,例 4 查询哪些中心站月产量超过6000吨。,select dm,sum(ycyl) from dba04 where ny=200508 and km=采油作业六区 group by dm havin

28、g sum(ycyl) 6000;,要特别注意having子句和where子句的区别。where子句是用来指定表中元组所应满足的条件,只有那些满足where条件的元组才能被选择出来,也才能被排序(order by)或被分组(group by);而having子句是用来指定每一分组所应满足的条件,只有满足having条件的那些组才能在结果中显示。因此,having条件必须是描述分组性质的属性,见例5。,有时,我们只希望选择满足一定条件的分组,这时可以使用having子句来说明,见下面例4。,PowerBuilder中的select语句的使用 地质研究所开发信息室,例 5 having子句与whe

29、re子句的混合使用。,select dm,qkdy,sum(ycyl) from dba04 where ny=200508 and km=采油作业六区 and rcbz is not null group by dm,qkdy having qkdy !=杜84东and sum(ycyl) 6000 order by dm;,在这个查询中,首先where子句说明只有那些能够获得产量的井才能作进一步的分组;group by 子句将所有满足where子句的元组按照dm和qkdy 这两个属性进行分组;而having子句则指出在这些分组中,我们只关心那些非杜84东的,而且月总产量超过6000吨的组。

30、只有这些分组才是我们最后所要的。将这些分组按dm的值排序就是查询的结果。在这里,having子句中出现的都是分组属性,尽管dm和qkdy都是个体属性,每口井只有一个值,由于是按dm和qkdy进行的分组,所以qkdy就升级为组的属性了。在下面的例子中,应注意select子句中各项的一致性,在出现group by 子句时必须全部为分组属性,否则会出现错误。见例6和例7。,PowerBuilder中的select语句的使用 地质研究所开发信息室,例6 having子句与select子句的混合使用。,select jh,sum(rcyl) from dba01 where to_char(rq,yyy

31、ymm)=200509 and jh in (select jh from daa01 where km=采油作业六区)group by jh having jh like 曙%;,这是正确的分组。,例7 having子句与select子句的限制。,select rcyl from dba01 where to_char(rq,yyyymm)=200509 and jh in (select jh from daa01 where km=采油作业六区)group by jh;,这是错误的分组。尽管根据jh分组,每个组都只有一个元组,因此从语义上说,rcyl既能描述分组中的个体,也能描述分组,但

32、从语法上说,rcyl只能描述分组中的个体,只有sum(rcyl)才是描述分组性质的。所以以下的查询才是正确的。,PowerBuilder中的select语句的使用 地质研究所开发信息室,例8 查询每个中心站的月总产量和平均产量。,select sum(rcyl) from dba01 where to_char(rq,yyyymm)=200509 and jh in (select jh from daa01 where km=采油作业六区)group by jh;,select dm,sum(ycyl),round(avg(ycyl),0)from dba04 where ny=200508

33、 and km=采油作业六区group by dm;,查询结果如右图:,PowerBuilder中的select语句的使用 地质研究所开发信息室,例9 查询每个中心站有多少口井。,select dm,count(*) from dba04 where ny=200508 and km=采油作业六区group by dm;,查询结果如右图:,PowerBuilder中的select语句的使用 地质研究所开发信息室,由于“连接字段”是两个表共有的,因此在连接时,在写连接字段时要指明其属主,如dba01.jh。但若其属主的名字比较长,这将显得过于麻烦,如dba01_kfsj_6q.daa01_kfs

34、j_6q,这时就可以使用别名。 别名的命名应放在 from子句中,也称作 “临时表名”,其中别 名放在本名的后面, 中间用空格隔开,见 下例:,2.9 表连接操作,例如,select dm,sum(rcyl) from dba01,daa01where to_char(rq,yyyymm)=200509 and dba01.jh=daa01.jh and km=采油作业六区 group by dm;,select dm,sum(rcyl) from dba01 a,daa01 b where to_char(rq,yyyymm)=200509 and a.jh=b.jh and km=采油作业

35、六区group by dm;,以前讨论的表操作只是单表的操作,实际上,还可以进行多表的连接操作,其目的是通过连接条件将多个表连接起来,达到在多个表之间进行查询数据和获得数据的目的。所谓“连接字段”是在多个表连接中都包含的一个公共字段。比如dba01和daa01中的井号是两个表共有的,所以jh为“连接字段”。,PowerBuilder中的select语句的使用 地质研究所开发信息室,三、常用的函数 1算术函数,PowerBuilder中的select语句的使用 地质研究所开发信息室,2日期函数,3字符串函数,PowerBuilder中的select语句的使用 地质研究所开发信息室,4空值函数,5聚组函数,空值函数NVL(参数1,参数2)给出了一种能在null字段上进行运算的功能。NVL的值如下:参数1 (参数1非null) NVL(参数1,参数2)=参数2 (参数1为null),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报