SQL( Structured Query Language )
结构化查询语言
用于定义、创建、读取数据库表数据
Native SQL(本地SQL)
每种关系型数据库都有其对应的SQL,是数据库相关的
不同的SAP系统可能使用各种不 同的数据库,使用本地SQL的 ABAP 程序无法适应所有的 SAP 系统
可直接对数据库表进行修改删除等,有一定安全风险
能实现一些OpenSQL无法实现的功能
Open SQL(开放SQL)
SAP 为ABAP定义的数据库无关的 SQL标准
在ABAP程序运行时由系统动态的转化成当前数据库使用的本地SQL
在编写程序时不需要考虑 SAP 系统使用的数据库差异
Open SQL
对数据库主要操作语法包括:
SELECT\UPDATE\INSERT\DELETE\MODIFY
执行状态通过系统变量SY-SUBRC表现
等于0,表示执行成功
不为0,表示执行失败
1.读取数据
①SELECT语法结构:
SELECT < result > FROM < dbtab >
INTO < target >
WHERE < condition >
[GROUP BY < fields >] [ORDER BY < fields >]
其中各关键字的属性描述如下:
SELECT < result >:具体的查询字段。
SELECT SINGLE:定义单行查询。
FROM < dbtab >:所查询的透明表。
INTO < target >:查询结果赋值对象,赋值到具体表或结构体。
INTO (< f1 >…< fn >):将查询结果赋值到具体字段。
INTO CORRESPONDING FILES OF < itab >:将查询结果按字段匹配赋值给具体的内表或者结构体。
WHERE < condition >:查询条件。
GROUP BY < fileds >:分组查询条件。
ORDER BY < fields >:排序条件。
WHERE中多个字段为查询条件时:
表名和字段用“~”符号连接
②读取单条数据
③读取多条数据
使用循环读多条记录:
使用SELECT…ENDSELECT语法能循环读取及操作查询
通过系统参数SY-DBCNT可以获取当前读取数据的行数
一般配合SELECT SINGLE来读取
Open SQL SELECT常用标准函数:
COUNT():统计查询总数
SUM():统计表中某个数值字段的总和
AVG():统计表中某个数值字段的平均值
MAX():统计表中某个字段的最大值
MIN() :统计表中某个字段的最小值。
④多个表数据连接查询,需要注意以下三点:
1.连接哪些表
2.连接条件
3.连接哪些列
⑤多个表数据连接查询,可以用两种方法实现表连接:
-
ABAP 字典中创建数据库视图,查询时用这个视图作为数据源
2.使用JOIN语句,跟平常数据库中用到的连接查询基本上相同
①INNER JOIN:查询结果包含两个连接表中彼此相对应的数据记录
②LEFT OUTER JOIN:查询结果集中包含左表中的所有数据记录,右表中仅查询出包含相对应的匹配条件的数据
③FULL OUTER JOIN:包含左右表所有的记录
3.在一个表连接中可以连接三个甚至更多的表
4.关键字ON:连接条件
⑥表字段名转换
在查询过程中我们通常会遇到这样的情况,将透明表查询值直接传递给内表:
两表中字段结构一样,但字段名称却不同
通常的情况下将字段名称设为一致的
除此之那还可以用AS关键字,就像SQL中的用法一样
⑦限制Open SQL获取数据条数:
使用 UP TO n ROWS语法来限制读取数据的条数,语法如下:
SELECT * INTO … UP TO N ROWS.
⑧使用PACKAGE SIZE N连续读取数据:
使用 UP TO n ROWS可读取前n条,但不能继续读取数据
使用使用PACKAGE SIZE N可连续读取数据,每次读取指定条数
必须应用于SELECT……ENDSELECT语句中
2.更新数据
UPDATE实现对数据的更新操作,语法如下:
UPDATE < dbtab > SET f1…fn (WHERE < condition >).
UPDATE < dbtab > FROM TABLE < itab > (WHERE < condition >).
UPDATE < dbtab > FROM < wa >.
3.新增数据
INSERT语句用于对数据的新增操作,语法如下:
INSERT < dbtab > FROM TABLE < itab >.
INSERT < dbtab > FROM < wa >.
4.删除数据
DELETE语句用于删除表中的数据,语法如下:
DELETE FROM < dbtab > WHERE < condition >.
DELETE FROM < dbtab >.
DELETE < dbtab > FROM TABLE < itab >.
5.修改数据
MODIFY操作是用于修改数据库中的数据
MODIFY < dbtab > FROM < wa >.
MODIFY < dbtab > FROM TABLE < itab >.
如表中不存在符合条件的数据时会添加新数据
MODIFY拥有 INSERT 和 UPDATE的操作动作
通过MODIFY修改的数据效率比较低下
FOR ALL ENTRIES IN
以内表某字段为条件,在数据库表取数
SELECT < FIELD1 > < FIELD2 >…INTO TABLE < ITAB >
FROM < TABLE > FOR ALL ENTRIES IN < ITAB1 >
WHERE < FIELD 1>=< ITAB1 >-< FIELD1 >
AND < FIELD2 >=< ITAB1 >-< FIELD2 >
6.动态SQL
①使用动态表名:
在Open SQL中可使用动态的表名
如该表名无效,则程序会出现错误而终止
SELECT …< result > FROM (tabname) into…< target > Where < condition >
②使用动态条件
在Open SQL中可使用动态的条件
SELECT …< result > FROM < tabname > into…< target > Where (where)
①使用动态表名:
在Open SQL中可使用动态的表名
如该表名无效,则程序会出现错误而终止
SELECT …< result > FROM (tabname) into…< target > Where < condition >
②使用动态条件
在Open SQL中可使用动态的条件
SELECT …< result > FROM < tabname > into…< target > Where (where)