工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(下)(3)

简介: 在上一篇文章中,我们介绍了 ABAP 的查询语句关键的三个部分:1.SELECT result 部分2.FROM source 部分3.INTO target 部分

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 中有很多方便查询的操作,比如:WHEREGROUPORDERFOR ALL ENTRIES 等等,希望对你帮助。

相关文章
|
3月前
|
存储 安全 数据库
什么是 SAP ABAP 数据库表的 Display Maintenance Allowed with Restrictions
什么是 SAP ABAP 数据库表的 Display Maintenance Allowed with Restrictions
|
3月前
|
安全 API 数据库
SAP ABAP OData 中 Function import 的概念介绍
SAP ABAP OData 中 Function import 的概念介绍
|
3月前
|
前端开发 数据库 开发者
如何在 SEGW 事务码里为 SAP ABAP OData 服务实现 Function Import 试读版
如何在 SEGW 事务码里为 SAP ABAP OData 服务实现 Function Import 试读版
SAP ABAP OData 服务里需要指定 guid 类型的请求参数时,正确语法是什么?
SAP ABAP OData 服务里需要指定 guid 类型的请求参数时,正确语法是什么?
|
3月前
|
SQL 应用服务中间件 数据库
关于 ABAP OPEN SQL SELECT 语句的一些额外说明
关于 ABAP OPEN SQL SELECT 语句的一些额外说明
|
3月前
|
SQL 监控 Oracle
SAP ABAP 系统错误 Return value of the database layer SQL dbsl rc 99
SAP ABAP 系统错误 Return value of the database layer SQL dbsl rc 99
|
3月前
|
前端开发 搜索推荐 开发者
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
|
3月前
|
JavaScript 前端开发 开发者
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
|
3月前
|
Web App开发 数据采集 前端开发
纯技术讨论:如何让 SAP UI5 应用无法被别人在浏览器里调试 - 这种做法不推荐试读版
纯技术讨论:如何让 SAP UI5 应用无法被别人在浏览器里调试 - 这种做法不推荐试读版
|
3月前
|
XML 存储 数据格式
SAP UI5 控件 customData 属性的应用介绍
SAP UI5 控件 customData 属性的应用介绍