ABAP-数据库操作OPEN SQL SELECT总结

OPEN SQL 是使用ABAP语言操作数据库的一种语句,由于OPEN SQL操作的数据库表是已经在ABAP数据字典中创建的,所以使用OPEN SQL操作数据库不用关心系统使用的数据库类型。

语句用法

SELECT:

SELECT result
       FROM source
       INTO|APPENDING target
       [[FOR ALL ENTRIES IN itab] WHERE sql_cond]
       [GROUP BY group] [HAVING group_cond]
       [ORDER BY sort_key].
  ...
[ENDSELECT].

1.result
 :选择的结果。确定要选出的field。常见用法有 SINGLE , * , DISTINCT XX , FIELD(可多个)等。

2.source : 此处为数据库表。对应一个数据库表,ABAP数据字典中有一个structure类型transparent table(透明表)与之对应,这里写的就是这个transparent table的名字。
SOURCE中包含了很多语法,
... FROM { {dbtab [AS tabalias]}
         | join
         | {(dbtab_syntax) [AS tabalias]} }
         [UP TO n ROWS]
      *表示共选取多少行
         [CLIENT SPECIFIED]  *是否是指定client的
         [BYPASSING BUFFER]  *(还没见过,待补全)
         [CONNECTION {con|(con_syntax)}] ... . *(还没见过,待补全)

FROM之后的部分是source的内容。
[AS tabalias]:为dbtab重命名,例如 dbtab as a,那么其中的field可以表示为a~field。(在SELECT语句中where之后要用到from后面出现的dbtab的column时,表示表中的FIELD,用"~"来避免混淆,在where部分会说到。在表示结构的字段用"-")。
join:将多个数据库表进行联合查询的时候用JOIN来连接。

... [(] {dbtab_left [AS tabalias_left]} | join
          {[INNER] JOIN}|{LEFT [OUTER] JOIN}
            {dbtab_right [AS tabalias_right] ON join_cond AND ..} [)] ...  .

 

3.INTO|APPENDING target 用APPENDING时,不删除原来内表中的内容,而且standard,hashed,sorted table都可以使用APPENDING。

此句用法:

1. ... INTO [CORRESPONDING FIELDS OF] wa  "wa为与数据库表结构相同的结构

2. ... INTO (dobj1, dobj2 ... )  "传入field

3. ... INTO|APPENDING [CORRESPONDING FIELDS OF] TABLE itab [PACKAGE SIZE n]  "package size n :以n行为限量,打包传递。

 

4.[FOR ALL ENTRIES IN itab]: 此语句用作数据库表与内表的联合,对于itab有以下限制:itab中不能有重复的记录,且表不能为空。


5.WHERE sql_cond:这里是写从数据库表中寻找相关记录的逻辑的地方,比较重要。

句式1:... col operator f ...

此处col是指source中的dbtab的column,f可以是任何数据对象或者是source中的表的column,如果f是source的column,那么f应该表示为source~column。
operator:=(EQ) <>(NE) <(LT) >(GT) <=(LE) >=(GE)

句式2: ... col [NOT] BETWEEN dobj1 AND dobj2 ... *dobj为数字对象

句式3: ... col [NOT] LIKE dobj [ESCAPE esc] ...

 

这个表达式用来判断col是否和dobj是同一类型。注意:dobj不能指定为column ID.而且col和dobj必须为character-type。 当加上ESCAPE时,dobj可以以'XXX'的形式出现,ESCAPE esc用来去掉dobj中的通配符esc.
例如  LIKE '%!_%' ESCAPE '!'
dobj的类型中可以有通配符 _ (单个字符)、%(任意长字符串)等

句式4: ... col [NOT] IN (dobj1, dobj2 ... ) ...

 

判断col的值或内容是否与括号中的dobj的值或内容一致。举例如下:
SELECT *  FROM sbook INTO TABLE sbook_tab
       WHERE class NOT IN ('C','F','Y').
 

句式5: ... col [NOT] IN seltab ...
seltab是由SELECT-OPTIONS语句确定的选择区域。下面由一个例子说明:

DATA spfli_wa TYPE spfli.
SELECT-OPTIONS: s_carrid FOR spfli_wa-carrid NO INTERVALS
                                             NO-EXTENSION,
                s_connid FOR spfli_wa-connid NO INTERVALS
                                             NO-EXTENSION.
SELECT SINGLE * FROM spfli INTO spfli_wa
       WHERE carrid IN s_carrid AND
             connid IN s_connid.


句式6: ... col IS [NOT] NULL ...  这个不用解释了吧,就是column是否为空值。

句式7: ... cond1 AND cond2 AND cond3 ... cond1 OR cond2 OR cond3 ...

 AND 和 OR 用来连接多个条件。此处值得注意的是AND要写在OR之前,如果需要改变顺序可添加括号。

句式8: ... [NOT] EXISTS subquery ...

     ... col [NOT] IN subquery ...

subquery的形式是(select …)。

6[GROUP BY group] [HAVING group_cond][ORDER BY sort_key].
group by  group 是如果加了下划线的field在数据库表中出现了多次,那么只取一条。group不能为string
having group_cond:为group by group提供选择条件,having 后可以跟数据统计语句如count/sum等,除了数据统计语句外,having后只能跟在group by 之后的字段中出现过的字段。
sort key 必须是出现在SELECT之后的result中的column,而且有多个sort key时,自左向右确定排序顺序。后面可加DESCENDING和ASCENDING。也可以用order by primary key.

文章来自:http://www.cnblogs.com/VerySky/articles/2333727.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值