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

简介: 日常开发过程中,最常用的语句可能就是查询语句了。那么如果从数据库表中查询数据呢?

SELECT 的三个部分

在 OPEN SQL 中,SELECT 语句可以查询数据字典中定义过的数据库或者视图中的数据。


常见语法:

SELECT result
  FROM source
  INTO target
  [WHERE condition]
  [GROUP BY fields]
  [HAVING cond]
  [ORDER BY fileds].


由上可知,SELECT 语句主体至少由三个必须的部分构成:


  1. SELECT result 部分
  2. FROM source 部分
  3. INTO target 部分


SELECT result 说明


第一部分是结果集。SELECT 一般是查询多条数据到内表中,result 也就是结果集,用于查询指定的字段,说明我们想从选定的表中得到说明数据。


  • 可以查询一条,也可以查询多条。如果指定只查询一条数据,则要用结构体承载数据,而不是内表,后面要跟 ENDSELECT ,但因为性能问题,SAP 也不推荐这种方式;

  • 如果查询单条数据到结构体后面不跟 ENDSELECT,使用语法检查也会得到如下提示:
Incorrect nesting: Before the end of the program, the control structure introduced by "SELECT" must be closed by "ENDSELECT".


  • 既可以直接输入字段列表,也可以使用 * 来获取表中所有的字段。同理,由于性能问题,不建议使用 * 号。通常业务中不会需要一个表中的所有字段;
  • 查询单条记录时用 SINGLE 来指定,用 DISTINCT 语句可以在查询时删除重复值。


FROM source 说明


第二部分是 FROM 语句,用来定义我们要从哪个表或者视图 source 中获取数据。


  • FROM 可以放到 INTO 表达式之前,也可以放在之后;
  • 如果是从多个表或视图中查询,可以用 JOIN 语句连接表,ON 来指定连接条件,通过 AS 来指定表的别名;
  • 还可以通过 UP TO n ROWS 来指定最多的查询记录,防止因一次查询的数据过多而导致出现性能问题;


INTO target 说明


第三部分是 INTO 语句,INTO 后面的 target 用于指定查询出来的数据存储在何处,若有多条数据则存储在内表中,若是单条数据则存放在结构体中。


接着,我们来看一个组合这三个部分的简单例子:

*&---------------------------------------------------------------------*
*& Report zlerning_select
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zlerning_select.
DATA: BEGIN OF gs_out,
        mandt  TYPE sy-mandt,
        carrid TYPE sflight-carrid, " 航线代码
        connid TYPE sflight-connid, " 航班连接编号
        fldate TYPE sflight-fldate, " 航班日期
      END OF gs_out.
DATA: gt_out LIKE TABLE OF gs_out.
DATA: gr_alv     TYPE REF TO cl_salv_table,
      gr_columns TYPE REF TO cl_salv_columns_table.
SELECT mandt carrid connid fldate FROM sflight INTO TABLE gt_out.
CALL METHOD cl_salv_table=>factory
  IMPORTING
    r_salv_table = gr_alv
  CHANGING
    t_table      = gt_out.
gr_columns = gr_alv->get_columns(  ).
gr_columns->set_optimize( value = 'X' ).
gr_alv->display( ).

运行结果截图如下:

image.png

SINGLE 和 DISTINCT 区别


SELECT 后面可以紧跟两个关键字 SINGLEDISTINCT ,我们来看一下这两者的区别:


SELECT SINGLE 代码如下:

 SELECT SINGLE mandt carrid connid fldate FROM sflight INTO gs_out.

使用如上代码,可以获取一条记录。需要注意的是:

  • 使用这条语句最好跟上 WHERE 条件,通常使用这种方式来获取描述表某个信息的描述
  • 当使用 SELECT SINGLE 时,将不能使用 ORDER BYAPPENDING 语句。


SELECT DISTINCT 代码如下:

 SELECT DISTINCT mandt carrid connid FROM sflight INTO TABLE gt_out.

结果如下:


image.png


当我们想排除重复的行时,可以使用 SELECT DISTINCT 。正如上面结果中所看到的,Airline 和 Flight No. 在任何行中都是不一样的。

相关文章
|
18天前
|
数据处理 开发者
ABAP AT NEW 关键字的用法
ABAP AT NEW 关键字的用法
20 0
|
21天前
|
SQL 数据库 索引
关于 SAP ABAP REPOSRC 数据库表在 HANA 中的 DDL Definition
关于 SAP ABAP REPOSRC 数据库表在 HANA 中的 DDL Definition
18 1
关于 SAP ABAP REPOSRC 数据库表在 HANA 中的 DDL Definition
|
17天前
|
存储
使用 ABAP 代码打印出 SAP CRM 系统里所有维护了 Sales Area 的 business partner id
使用 ABAP 代码打印出 SAP CRM 系统里所有维护了 Sales Area 的 business partner id
19 0
|
18天前
|
人工智能
Suno AI 生成 SAP ABAP 顾问之歌
Suno AI 生成 SAP ABAP 顾问之歌
14 1
|
18天前
|
存储 安全 数据库
SAP ABAP 中数据类型 xstring 的使用介绍
SAP ABAP 中数据类型 xstring 的使用介绍
19 0
|
21天前
什么是 SAP ABAP 里的 Subscreen
什么是 SAP ABAP 里的 Subscreen
15 1
什么是 SAP ABAP 里的 Subscreen
|
21天前
|
数据库 存储 BI
SAP ABAP CDS View 源代码存储的数据库表揭秘和其他相关数据库表介绍试读版
SAP ABAP CDS View 源代码存储的数据库表揭秘和其他相关数据库表介绍试读版
12 0
SAP ABAP CDS View 源代码存储的数据库表揭秘和其他相关数据库表介绍试读版
|
21天前
|
数据库
迈入 SAP CDS View 世界的前置知识 - SAP ABAP 数据库视图介绍试读版
迈入 SAP CDS View 世界的前置知识 - SAP ABAP 数据库视图介绍试读版
10 0
迈入 SAP CDS View 世界的前置知识 - SAP ABAP 数据库视图介绍试读版
|
1月前
|
前端开发 搜索推荐 开发者
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
27 0
|
1月前
|
JavaScript 前端开发 开发者
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
15 0