本文主要介绍SAP ABAP中OPEN SQL的FROM语句
FROM语句选项
语句 | 说明 |
CLIENT SPECIFIED | 解除自动client设置 |
BYPASSING BUFFER | 不会从SAP本地缓冲器中读取数据 |
UP TO n ROWS | 限制查询的个数 |
选择表
- 选择静态表
SELECT ... FROM <dtba> [AS <alias>] WHERE <condition>
- 选择动态表(在页面动态地输入数据库表sflight查询到相关的数据)
案例演示代码:
DATA:GS_SFLIGHT TYPE SFLIGHT. PARAMETERS P_SF TYPE CHAR20. SELECT * FROM (P_SF) INTO GS_SFLIGHT UP TO 1 ROWS. WRITE:GS_SFLIGHT-CARRID, GS_SFLIGHT-CONNID. ENDSELECT.
JOIN
JOIN语句是ABAP OPEN SQL中用来在查询多个表中数据时使用的一种语法,能够将多个数据库表进行连接查询(其中JOIN语句还细化分为了INNER JOIN 和 OUTER JOIN 其中若不指定OUTER JOIN 则JOIN默认为INNER JOIN),其中JOIN语句的基本语法如下:
SELECT...FROM <dbta1> [AS <alias>] [INNER][LEFT OUTER] JOIN <dbta2> [AS <alias>] ON <condition> [WHERE <condition>] [UP TO n ROWS]
- INNER JOIN
INNER JOIN为内连接,用于查询两个表中相同的数据,其中案例代码及效果如下:
DATA:BEGIN OF GS_SFLIGHT, ZCARRID LIKE SFLIGHT-CARRID, ZCARRNAME LIKE SCARR-CARRNAME, END OF GS_SFLIGHT. SELECT a~CARRID b~CARRNAME INTO GS_SFLIGHT FROM SFLIGHT AS a INNER JOIN SCARR AS b ON a~CARRID = b~CARRID UP TO 1 ROWS WHERE a~CARRID = 'AC' . WRITE:/ GS_SFLIGHT-ZCARRID,GS_SFLIGHT-ZCARRNAME. ENDSELECT.
可以看到结果显示返回了两个表中相同的数据!并且UP TO 1 ROWS限制了返回的结果行数!
- LEFT OUTER JOIN
LEFT OUTER JOIN为左外连接(ABAP OPEN SQL中目前只支持左外连接),此语句以左边基本表作为基准表读取数据(能够返回左边表拥有但右边表没有的数据)其中案例代码及效果如下:
DATA:BEGIN OF GS_SFLIGHT, ZCARRID LIKE SFLIGHT-CARRID, ZCURRCODE LIKE SCARR-CURRCODE, END OF GS_SFLIGHT. SELECT a~CARRID b~CURRCODE INTO GS_SFLIGHT FROM SFLIGHT AS a LEFT OUTER JOIN SCARR AS b ON a~CARRID = b~CARRID . WRITE:/ GS_SFLIGHT-ZCARRID,GS_SFLIGHT-ZCURRCODE. ENDSELECT.
可以看到结果显示返回了左边表中拥有但是右边表中不具有的数据(SFLIGHT中具有CARRID为SQ的数据,但是SCARR中不具有CARRID为SQ的数据)!