Open+SQL-1.ppt

上传人:仙人指路1688 文档编号:2623625 上传时间:2023-02-20 格式:PPT 页数:33 大小:565KB
返回 下载 相关 举报
Open+SQL-1.ppt_第1页
第1页 / 共33页
Open+SQL-1.ppt_第2页
第2页 / 共33页
Open+SQL-1.ppt_第3页
第3页 / 共33页
Open+SQL-1.ppt_第4页
第4页 / 共33页
Open+SQL-1.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《Open+SQL-1.ppt》由会员分享,可在线阅读,更多相关《Open+SQL-1.ppt(33页珍藏版)》请在三一办公上搜索。

1、1.Overview2.Select,内容目录,SAP系统本身并不提供数据库硬件系统,但支持多种类型的数据库,程序员通过SAP的数据库接口操作这些底层数据库,该接口可以将ABAP语言转换成特定的数据库系统可以识别的SQL语言.SAP系统支持两种在程序中操作数据库的语句形式,分别为ABAP语言中的Open SQL语句和特定数据库的自身SQLNative SQL语句.Open SQL是完全集成到ABAP语言的标准SQL子集,其优越之处在于其独立于不同类型的数据库之上,通过SAP的数据库接口来识别各种不同的数据库,然后由该接口把SAP的Open SQL语句自动转换为相应数据库的特定SQL语句,这样S

2、AP程序员就无需去阅读不同数据库的标准SQL文档,而且ABAP程序也因此实现了数据库平台无关性.标准SQL有三种类型:数据定义语言DDL,数据操纵语言DML,数据控制语言DCL.Open SQL只包含数据操纵语言DML,包含语句有SELECT,INSERT,UPDATE,MODIFY,DELETE等.,1.Overview,1.Overview,ABAP程序通常使用Open SQL的数据查询语句Select将数据库条目选择到内存中.该语句操作时可将一行数据或其中的部分字段选择到结构体或基本类型字段中,也可以一次性将多行数据选择到内表中,在选择数据的同事还可以进行求最大值,最小值,求和等统计功能

3、.,1.Overview,SELECT FROM INTO WHERE GROUP BY HAVING ORDER BY.说明:SELECT子句用于去诶的那个读取数据表中的那些字段FROM子句用于确定从哪些表或者视图中读取数据INTO子句用于确定将数据读取到程序内部的那些数据对象WHERE子句用于限定选择条件GROUP BY子句用于将一组数据条目压缩为一个单行作为选择最终结果HAVING子句用于限定GROUP BY子句中数据条目组的选择条件ORDER BY子句用于未选定的行排序组合使用Select语句中的这些子句可以使数据查询功能十分强大.但在实际项目的程序中,很少会用到GROUP BY,HA

4、VING,ORDER BY,因为使用这些语句会加重数据库服务器的负担,通常情况我们将数据读取过来,在内表中对数据进行进一步操作.,2.Select,SELECT SINGLE INTO FROM.如果只需要读一条数据,系统在数据库中找到第一个符合条件的数据条目时,就停止查询.在确定数据条目唯一性(例如通过表关键字)的情况下,使用单行选择可以提高查询效率.如果系统找到一条满足条件的行,SY-SUBRC返回0,否则返回4.,2.Select,2.1 选择单行数据,1.选择全部字段如果需要选取整个数据行,一般不需要指明所有字段,而是在SELECT子句中使用”*”符号.INTO语句中的目标对象最好和F

5、ROM语句中指定的选择表行结构类型相同,至少要与之兼容.,2.Select,2.1 选择单行数据,输出结果,2.选择指定字段如果不需要在程序中使用全部字段,应在FROM子句中指定所需要选择的字段,同时在INTO子句中指明与这些字段对应的结构或者一系列基本类型数据对象.如果指定多个数据对象,则需要将这些对象放在括号中,并用逗号隔开,而且其顺序需要与SELECT子句中指定的表字段顺序一致,且类型适宜.在该形式中,括号和字段之间不能有空格,但在字段之前可以有空格.,2.Select,2.1 选择单行数据,INTO子句的CORRESPONDING FIELDS 选项将SELECT子句中指明的字段传送到

6、目标工作区的同名组件中.如果需要还有可能将值转换成目标字段的数据类型.,输出结果,如果要查询从纽约出发的所有航班信息,就要用到多行选择.这时就不能用到SINGLE关键字,语句结构也要有所改变,包括循环选择和选择之内表两种情况1.循环选择SELECT DISTINCT.ENDSELECT.通过SELECT/ENDSELECT循环从数据库表中读取多行,每个循环内部过程类似于单行选择,步骤如下:根据选择结果,声明一个工作区或者几个基本类型变量;用SELECT语句选择当前满足条件的一行进入结果对象;对当前选择结果进行操作(如输出值或附加到某内表中);直到ENDSELECT语句,若系统数据库满足条件的数

7、据不止一行,继续选择新行至目标数据对象,旧的值被覆盖,直至所有满足条件的数据被处理,循环结束.DISTINCT项可以自动去掉结果重复的行.系统字段SY-DBCNT给读取的行计数,每循环一次,SY-DBCNT的值加1,2.Select,2.2 选择多行数据,示例,2.Select,2.2 选择多行数据,输出结果,2.选择至内表SELECT.INTO|APPENDINGCORRESPONDING FIELDS OF TABLE itab.多行选择更为方便的形式是一次性把数据选择到一个内表中,这样就不需要进行循环.该语句将满足条件的数据一次性都读到内表中,INTO将覆盖原内表内容,APPENDING

8、则在原内表后进行追加.如果结构不完全相同,也可以使用CORRESPONDING FIELDS语句将同名区域相对应.,2.Select,2.2 选择多行数据,该程序包含两个查询语句,一个选择所有符合条件的整行,内表结构与数据库表行结构相同,另一个则将符合提哦见的行中部分数据选入同名内表字段.,2.Select,2.2 选择多行数据,输出结果,3.指定选择包大小SELECT*.INTO TABLE itab PACKAGE SIZE n.ENDSELECT.包的大小指的是一次选择到内表的行数,用PACKAGE SIZE语句.如果使用SELECT/ENDSELECT则表示每次取出n条数据.,2.Se

9、lect,2.2 选择多行数据,比较运算符:WHERE.f g.范围运算符:WHERE.f NOT BETWEEN g1 AND g2.字符比较运算符:WHERE.f NOT LIKE g ESCAPE h.检查列表值:WHERE.f NOT IN(g1,.,gn).检查空值:WHERE.f IS NOT NULL.检查选择表:WHERE.f NOT IN seltab.,seletab为SELECT-OPTION或者为RANGE类型的内表,2.Select,2.3 指定查询条件,动态指定查询条件:,2.Select,2.2 选择多行数据,输出结果,前面讲的都是对单表进行查询,下面讲多表查询.

10、1.SELECT语句嵌套可以通过SELECT语句的嵌套来实现这种相关联的多个表中的数据结合选择.下面这个例子,每次从表SPFLI中读取两个字段,并在SCARR表中读取一个字段CARRNAME.,2.Select,2.3 多表结合查询,输出结果,2.FOR ALL ENTRIES SELECT.FOR ALL ENTRIES IN itab WHERE.为了避免多次重复的数据库查询(嵌套查询的效率很低),可以先将SPFLI中符合条件的数据选进一个内表,然后仅根据该内表中包含的carrid字段值继续查询表SCARR,这样将大大减少对SCARR的查询次数.该SELECT语句的结果是用每一行itab中

11、的相应字段值替换WHERE居中指定字段并进行多次选择的结果集联合,然后从中删除重复行.是用该格式时,数据库字段与内表中的关联比较字段必须具有相同的类型和长度,且不能在比较中是用操作符:LIKE,BETWEEN,IN,同时不能使用ORDER BY子句.,2.Select,2.3 多表结合查询,输出结果,2.Select,2.3 多表结合查询-示例,3.结合查询1.INNER JOINSELECT.FROM tableINNER JOIN jointable1 AS aliasA ON.INNER JOIN jointable2 AS aliasB ON.FROM子句的table是主选择表,后面可

12、以根据需要用JOIN关键字选项加入几个数据库表,称为结合表.ON选项用于指定结合条件,条件中的语法与WHERE子句类似,但不同逻辑之间只能通过AND连接,而且每一个条件中必须包含一个主选择表中的字段.因为不同表中可能出现同名字段,可以通过”指明其所属的数据库表作为前缀.此外,为了选择过程的清晰性可见,还引入了alias作为数据库表的别名,对于一个数据表在多个结合表达式中出现的情况,必须使用别名作为前缀.可以把中的条件放置于WHERE子句中,因为二者的效果是相同的,但至少必须在ON中指明一个条件.该语句的INNER关键字可以省略.,2.Select,2.3 多表结合查询,2.Select,2.3

13、 多表结合查询,输出结果,2.LEFT OUTER JOINSELECT.FROM tableLEFT OUTER JOIN jointable1 AS aliasA ON.LEFT OUTER JOIN与INNER JOIN的主要区别是前者,对于主选择表的数据,即使在结合数据表中结合条件字段值不存在,也将该数据行选出,结合表中不存在的字段保持空白.LEFT OUTER JOIN的语法要求更为严格,在ON附加项中,只能使用”=”符,且必须至少有一个条件是对主选择表和结合表中的字段进行比较.此为,不能在WHERE子句中对结合数据表中的字段进行条件限定.该语句中的OUTER关键字可以省略.,2.S

14、elect,2.3 多表结合查询,如下图所示,INNER JOIN,LEFT OUTER JOIN,2.Select,2.3 多表结合查询,Open SQL的SELECT雨中在选择的同时提供了总计功能与此同时,还可以通过GROUP BY子句和HAVING子句进行将选择结果进行分组.总计功能分组总计指定分组条件指定行的顺序,2.Select,2.4 组合查询结果,1.总计功能SELECT agg(DISTINCT s1)agg(DISTINCT s2).为特定字段指定MAX(最大值),MIN(最小值),SUM(求和),AVG(平均值),COUNT(行数)等功能.其中agg为使用总计功能表达式,s

15、为字段,用于存放总计结果.算术操作符AVG和SUM只能对数字字段进行操作,DISTINCT选项将在统计之前先排除相同的选择结果.,2.Select,2.4 组合查询结果,示例:找出AA航班的座位总和,最大座位数和最小座位数,输出结果,2.Select,2.4 组合查询结果,2.分组总计SELECT s1 s2.agg(sm)agg(sn).INTO(f1,f2,.fm,fn)|CORRESPONDING FIELDS OF itab.GROUP BY s1 s2.数据选择时,s1,s2等字段全部相同的数据行被组合成一行,而sm,sn等字段则是需要进行统计的字段.如果将总计功能与GROUP,2.

16、Select,2.4 组合查询结果,输出结果,2.Select,2.4 组合查询结果,示例:找出所有航班的最低票价和最高票价,3.指定分组条件SELECT s1 s2.agg(sm)agg(sn).INTO(f1,f2,.,fm,fn)|CORRESPONDINg FIELDS OF itab.GROUP BY s1,s2.HAVING.HAVING子句用于给分组选择的结果限定条件,只有出现GROUP BY子句时,才可以使用该子句.,2.Select,2.4 组合查询结果,示例:找出最低票价小于1000的航班,2.Select,2.4 组合查询结果,输出结果,4.指定行的顺序SELECT f1

17、 f2.ORDER BY f1 ASCENDINg|DESCENDING f2 ASCENDING|DESCENDING.使用ASCENDING 升序,DESCENDING降序为字段指定排序顺序,默认为升序.,2.Select,2.4 组合查询结果,示例:按carrid,connid进行分组,取出最大座位数,按carrid升序,max降序选择并输出,输出结果,2.Select,2.4 组合查询结果,1.使用表工作区TABLES dbtab.表工作区相当于参照表结构声明的普通结构体变量。在指定了表工作区之后,SELECT语句中可以省略INTO子句,系统默认将数据行读取至同名表工作区中。TABLE

18、S spfliSELECT SINGLE*FROM spfli WHERE cityfrom=NEW YORK.,2.Select,2.5 其他格式说明,2.动态指定数据库表SELECT.FROM(dbtabname).此语句可以在运行过程中通过变量值指定数据库表名。变量字段dbtabname必须包含一个数据库表的名称,且必须为大写形式。动态指定时,不能使用表工作区忽略INTO子句。dbname=SPFLI.SELECT carrid connid FROM(dbname)INTO(carrid,connid)where cityfrom=NEW YORK.,2.Select,2.5 其他格式说明,

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号