ORDER BY
用于按 fields 指定的字段进行由小到大的排序,也可以使用主键 PRIMARY KEY
进行排序,这种情况再表连接和视图查询时不能使用:
SELECT carrid connid FROM sflight INTO CORRESPONDING FIELDS OF TABLE gt_sflight ORDER BY PRIMARY KEY.
它还可以以升序或降序对其他列进行排序,通过加上 ASCENDING
或者 DESCENDING
:
SELECT carrid connid planetype FROM sflight INTO CORRESPONDING FIELDS OF TABLE gt_sflight ORDER BY planetype ASCENDING.
UP TO ROWS
UP TO (natural number) ROWS
用来增加一个限制:来限定可以被查询到的行数。如下,限定 10 行:
SELECT carrid connid planetype UP TO 10 ROWS FROM sflight INTO CORRESPONDING FIELDS OF TABLE gt_sflight.
FOR ALL ENTRIES
FOR ALL ENTRIES
可以在两个表的情况下,我们想根据第一个表的字段,从第二个表中获取数据。
SELECT carrid connid FROM sflight INTO CORRESPONDING FIELDS OF gt_sflight WHERE planetype = '747-400'. IF gt_sflight IS NOT INITIAL. SELECT carrid connid counryfr cityfr airpfrom countryto FROM spfli INTO CORRESPONDING FIELDS OF TABLE gt_spfli FOR ALL ENTRIES IN gt_sflight WHERE carrid = gt_sflight-carrid AND carrid = gt_sflight-connid. ENDIF.
在第一条 SELECT 语句中,我们得到了关于 carrid 和 connid 的数据,但是只有当 planetype 是 '747-400'。在第二个表中,由于我们没有 planetype ,我们只能得到我们想要的行。
在使用 FOR ALL ENTRIES
时,我们需要记住的一件事是,我们需要在执行带有 FOR ALL ENTRIES
的 SELECT 之前,要检查使用该表的表是否为空。
如果表是空的,在这个例子中,所有的记录都将从 spfli
表中获得。
子查询
子查询可以在 WHERE 条件中使用,直接从另一个表中获得最大值。例如,在使用 SUBQUERY 时,可以增加以下内容:
ALL | ANY | SOME
EXIST
IN
如果,我们想预定一个价格最高的航班,可以使用如下代码:
SELECT * FROM sflight INTO CORRESPONDING FIELDS OF gt_sflight WHERE price = ( SELECT MAX( price ) FROM sflight ).
JOIN
如果我们在许多表中进行查询,就不得不用上 JOIN
语句,ABAP 中有两种类型的连接在数据库表中进行数据查询:
INNER JOIN
: 内连接需要在第二个表中提取带有一个表的主键的条目到一个内部表中。OUTER JOIN
:外连接不管第二张表中是否有条目存在,仍然是从第一个表中提取数据。
INNER JOIN 代码示例:
SELECT KNA1~KUNNR KNA1~NAME1 KNA1~NAME2 KNA1~SORTL KNA1~LAND1 KNA1~REGIO KNA1~ADRNR KNA1~KTOKD KNA1~ERDAT KNA1~ERNAM KNVV~VKORG KNVV~VTWEG KNVV~BZIRK KNVV~VKBUR KNVV~VKGRP KNVV~WAERS KNVV~KTGRD KNVV~ZTERM KNVV~KDGRP KNVV~INCO1 KNVV~INCO2 FROM KNA1 INNER JOIN KNVV ON KNA1~KUNNR EQ KNVV~KUNNR INTO CORRESPONDING FIELDS OF TABLE GT_OUT.
OUT JOIN 代码示例:
SELECT KNA1~KUNNR KNA1~NAME1 KNA1~NAME2 KNA1~SORTL KNA1~LAND1 KNA1~REGIO KNA1~ADRNR KNA1~KTOKD KNA1~ERDAT KNA1~ERNAM KNB1~BUKRS KNA1~AUFSD KNA1~LIFSD KNA1~FAKSD KNB1~AKONT KNB1~ZTERM SKAT~TXT50 FROM KNA1 INNER JOIN KNB1 ON KNA1~KUNNR = KNB1~KUNNR LEFT OUTER JOIN SKAT ON KNB1~AKONT = SKAT~SAKNR AND SKAT~KTOPL = 'HM00' AND SKAT~SPRAS = SY-LANGU INTO CORRESPONDING FIELDS OF TABLE GT_OUT.
总结
至此,本文总结了跟在 SELECT
语句后的条件。ABAP 中有很多方便查询的操作,比如:WHERE
、GROUP
、ORDER
、FOR ALL ENTRIES
等等,希望对你帮助。