一、SELECT 語句
SELECT <lines>[DISTINCT]<columns>[AS<alias>] INTO|APPEND [CORRESPONDING FIELDS OF]<wa> TABLE<itab>[PACKAGE SIZE<n>].. FROM <dbtab>[AS <alias>]<options> UP TO <n> ROWS... [INNER]JOIN <dbtab> [AS <alias>] ON <cond><options>... WHERE <s> <opertor> <f> ... GROUP BY <f1> <f2>.. HIVING <condition>. ORDER BY PRIMARY KEY.
lines:single
讀取一條數據:.
SELECT SINGLE <cols> ... WHERE
注意:限制好where條件,否則返回任意一條數據,與預期結果不同.
DISTINCT :刪除重復值。
SELECT [DISTINCT]<cols>...WHERE
當INTO 為字段或者結構體時,結尾必須加上ENDSELECT;如果是內表則不需要。
AS<alias>:別名
SELECT <cols> [AS <cols>]..
INTO語句:
1. [CORRESPONDING FIELDS OF]<wa>:自動給相同字段名匹配賦值。wa為結構體,變量,查詢一條數據時,常用語loop循環中。
SELECT ...INTO [CORRESPONDING FIELDS OF]<wa> .
2.內表
查詢多條數據是使用內表,須使用APPENDING,不能使用INTO,INTO是刪除內表數據后插入時使用的。
SELECT ...INTO|APPEND [CORRESPONDING FIELDS OF]<wa> TABLE<itab>[PACKAGE SIZE<n>]..
PACKAGE SIZE:表示每次追加到內表的條數,此時須使用ENDSELECT.
SELECT INTO CORRESPONDING FIELDS OF TABLE itab PACKAGE SIZE 5 FROM SPFLI. ENDSELECT.
FROM語句:
1.選擇靜態表:
SELECT ...FROM <dbtab>[AS <alias>]<options>
2.JOIN語句
SELECT ...FROM <tab>[INNER] JOIN <dbtab> [AS <alias>] ON <cond><options>...
3.限制查詢個數
SELECT ...FROM <tab> UP TO <n> ROWS...
WHERE語句:
1.where條件語句
SELECT ...WHERE <s> <opertor> <f> ...
2.常用語句
SELECT ...WHERE <s> [NOT]BETWEEN <f1> AND <F2>. SELECT ...WHERE COL2 LIKE '_ABC%'. SELECT ...WHERE <s> [NOT]IN (<f1>,..,<fn>)... SELECT ...WHERE <s> [NOT]IN <seltab>... 查詢存在selection table,Range變量里的數據。
3.FOR ALL ENTRIES 語句.
SELECT ... FOR ALL ENTRIES IN <itab> WHERE <cond>

SELECT MATNR MTART FROM MARA INTO CORRESPONDING FIELDS OF TABLE GT_MARA WHERE MATNR IN S_MATNR. IF GT_MARA[] IS NOT INITIAL. SELECT MATNR MAKTX FROM MAKR INTO CORRESPONDING FIELDS OF TABLE GT_MAKT FOR ALL ENTRIES IN GT_MARA WHERE MATNR IN S_MATNR AND SPRAS = SY-LANGU AND MATNR = GT_MARA-MATNR. ENDIF. SORT GT_MAKT BY MATNR. LOOP AT GT_MARA. CLEAR GT_TOTAL. MOVE-CORRESPONDING GT_MARA TO GT_TOTAL. READ TABLE GT_MAKT WITH KEY MATNR = GT_MARA-MATNR BINARY SEARCH. IF SY-SUBRC = 0. GT_TOTAL-MAKTX =GT_MAKT-MAKTX. ELSE. CONTINUE. ENDIF. APPEND GT_TOTAL. ENDLOOP.
注意:
1.itab的字段要與比較對象的表字段類型一致。
2.判斷內表itab不能為空,否則相當於全表掃描。
3.程序中的continue退出當前循環,執行下一次。本語句執行時,相當於INNER-JOIN;不執行時,相當於LEFT-JOIN.
4.不能與sum、avg、max、min等聚合函數一起使用,group by。
5.使用該選項后,對於最后得出的結果集系統會自動刪除重復行。因此如果要保留重復行記錄時,記得在SELECT語句中添加足夠字段
GROUP :
SELECT <f1> <f2> <agg>... GROUP BY <f1> <f2> ... HIVING <condition>.
ORDER BY:
-根據標的key值進行排序。
-只適合於SELECT * 語句。
-在JOIN語句和視圖中無法使用。
SELECT ... ORDER BY <f1> [ASCENDING|DESCENDING] <f2> [ASCENDING|DESCENDING]
二、INSERT
一條數據
INSERT INTO <target> VALUES <wa>. INSERT <target> FROM <wa>.
多條數據.
INSERT <target> FROM TABLE <itab> [ACCEPTING DUPLICATE KEYS]
插入數據時,避免有相同主鍵引起dump error錯誤,使用ACCEPTING DUPLICATE。此時sy-subrc返回4.
三、UPDATE
一條數據
UPDATE <target> FROM <wa>. "表結構相同
多條數據.
UPDATE <target> FROM TABLE <itab>. UPDATE <target> SET <set1> <set2> WHERE <cond>.
四、DELETE
一條數據
DELETE <target> FROM <wa>. "表結構相同
多條數據.
DELETE FROM <target> WHERE <cond>.
五、MODIFY.
一條數據
MODIFY <target> FROM <wa>. "表結構相同
多條數據.
MODIFY <target> FROM TABLE <itab>.