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(可多个)等。
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