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