曙光建设有限公司网站,做 淘宝客最大的网站是叫什么名字,网站关键词优化效果,网络营销有哪些推广方式#x1f482;作者简介#xff1a; THUNDER王#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读#xff0c;同时任汉硕云#xff08;广东#xff09;科技有限公司ABAP开发顾问。在学习工作中#xff0c;我通常使用偏后… 作者简介 THUNDER王一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读同时任汉硕云广东科技有限公司ABAP开发顾问。在学习工作中我通常使用偏后端的开发语言ABAPSQL进行任务的完成对SAP企业管理系统SAP ABAP开发和数据库具有较深入的研究。 文章概要 各位小伙伴们大家好呀今天继续SAP ABAP系列文章的讲解本节带来的内容是OPEN SQL中FROM语句的介绍希望大家喜欢 每日一言 永远年轻永远热泪盈眶 目录前言数据库表准备FROM语句介绍 案例演示表类型选择 静态表 动态表JOIN语句 INNER JOIN LEFT OUTER JOIN FULL OUTER JOIN写在最后的话前言 各位小伙伴们大家好呀今天继续SAP ABAP系列文章的讲解本节带来的内容是OPEN SQL中FROM语句的介绍希望大家喜欢 数据库表准备 本文所有案例都是基于数据库表SFLIGHT本案例中的SFLIGHT数据库表数据如下供各位小伙伴们对照来观察代码运行结果 FROM语句介绍 ABAP中的FROM语句是用于从数据库表中检索数据的语句。它通常与SELECT语句一起使用用于指定要从哪个数据库表中检索数据。 以下是FROM语句的一般语法样式
SELECT fields
FROM TABLE database_table
[WHERE conditions]
[GROUP BY group_fields]
[HAVING having_conditions]
[ORDER BY order_fields]
[CLIENT SPECIFIED|BYPASSING BUFFER|UP TO n ROWS].参数介绍 fields需要返回的字段可以是表字段、计算字段或表达式等。 database_table表类型静态表或动态表。注动态表名称或表表达式可以是字符串或一个动态表变量。 [WHERE conditions]WHERE子句用于过滤出符合条件的行可以包含多个条件条件之间使用AND或OR连接。 [GROUP BY group_fields]GROUP BY子句用于对查询结果按照指定的字段进行分组通常用于配合聚合函数进行使用。 [HAVING having_conditions]HAVING子句用于在分组后对分组结果进行过滤可以使用聚合函数和条件进行筛选。 [ORDER BY order_fields]ORDER BY子句用于对结果集按照指定的字段进行排序可以指定多个排序字段并可以指定升序或降序排列。 [CLIENT SPECIFIED|BYPASSING BUFFER|UP TO n ROWS]可选项用于指定查询的一些选项例如是否使用客户端缓存、是否跳过缓存、是否限制查询结果集的行数等。 案例演示 下面给出一段以SFLIGHT数据库表为基准的示例代码基本涵盖以上所有参数仅供参考 这一段的代码没有带上HAVING可选项并且使用了OPEN SQL新语法老语法十分繁琐并且对上述可选项支持不友好。 SELECT carrid,SUM( PRICE ) AS CNT
FROM sflight
INTO TABLE DATA(result_set)
GROUP BY carrid.LOOP AT result_set INTO DATA(result_line).WRITE: / result_line-carrid, result_line-CNT.
ENDLOOP.这一段的代码在上一段代码的基础上带上了HAVING可选项 SELECT carrid,SUM( PRICE ) AS CNT
FROM sflight
INTO TABLE DATA(result_set)
GROUP BY carrid
HAVING SUM( PRICE ) 1000.LOOP AT result_set INTO DATA(result_line).WRITE: / result_line-carrid, result_line-CNT.
ENDLOOP.表类型选择 FROM语句中获取数据来源的数据库表既可以是静态数据库表也可以是动态数据库表。 需要注意的是ABAP的动态表在运行时可以通过添加、删除和修改表项的方式动态地调整表的大小。这使得动态表非常灵活但也意味着它们在内存使用方面比静态表更为昂贵。另一方面静态表在编译时创建其大小固定因此它们在内存使用方面更加节省。 此外在选择语句中使用动态表时需要使用INTO TABLE关键字将结果存储到表中。而对于静态表不需要使用该关键字。 在定义动态表时不需要指定表的大小因为表可以在运行时动态调整大小。而静态表在定义时必须指定表的大小因为表的大小在编译时就已经确定了。
动态表静态表在运行时动态创建在编译时创建内存使用更高因为需要动态调整表大小内存使用较少因为表大小固定可以动态添加、删除和修改表项无法在运行时添加或删除表项在选择语句中使用时需要使用INTO TABLE在选择语句中使用时不需要使用INTO TABLE定义时不需要指定表的大小定义时需要指定表的大小PS动态表名称或表表达式可以是字符串或一个动态表变量。 静态表 下面给出一段以SFLIGHT数据库表为基准的示例代码从静态表中读取数据 PS: 下面这段代码为OPEN SQL老语法。 TYPES: BEGIN OF ty_sflight,carrid TYPE s_carr_id,connid TYPE s_conn_id,fldate TYPE s_date,price TYPE s_price,END OF ty_sflight.DATA: lt_sflight TYPE STANDARD TABLE OF ty_sflight,ls_sflight TYPE ty_sflight.SELECT carrid connid fldate price
FROM sflight
INTO CORRESPONDING FIELDS OF TABLE lt_sflight.LOOP AT lt_sflight INTO ls_sflight.WRITE: / ls_sflight-carrid, ls_sflight-connid, ls_sflight-fldate, ls_sflight-price.
ENDLOOP.在上面的代码中我们首先定义了一个结构体类型ty_sflight用于描述从SFLIGHT表中选择的数据类型。然后我们声明了一个静态内表变量lt_sflight使用STANDARD TABLE OF关键字指定其类型为ty_sflight。 接着我们使用SELECT INTO TABLE语句从SFLIGHT表中选择数据并将其存储到lt_sflight中。查询结果中的字段carrid、connid、fldate和price分别与ty_sflight结构体类型中的字段对应因此可以直接存储到lt_sflight中。 最后我们使用LOOP AT语句遍历内表lt_sflight中的所有数据并使用WRITE语句打印输出每一行数据的字段值。在本例中我们使用/符号将每一行的输出放在不同的行中。 下面这段代码重构了上方的老语法代码使用了OPEN SQL的新语法。 SELECT carrid,connid,fldate,price
FROM sflight
INTO TABLE DATA(lt_sflight).LOOP AT lt_sflight INTO DATA(ls_sflight).WRITE: / ls_sflight-carrid, ls_sflight-connid, ls_sflight-fldate, ls_sflight-price.
ENDLOOP.动态表 下面给出一段以SFLIGHT数据库表为基准的示例代码从动态表中读取数据 下面是一个具体的案例详细讲解 PS: 下面这段代码为OPEN SQL老语法。 DATA:GS_SFLIGHT TYPE SFLIGHT.
PARAMETERS P_SF TYPE CHAR20.SELECT * FROM (P_SF) INTO GS_SFLIGHT UP TO 1 ROWS.WRITE:GS_SFLIGHT-CARRID, GS_SFLIGHT-CONNID.
ENDSELECT.定义一个静态数据对象 GS_SFLIGHT类型为 SFLIGHT。 定义一个参数 P_SF类型为 CHAR20用于接收动态表的名称。 使用 SELECT 语句从动态表 (P_SF) 中选择所有字段将结果集合 INTO GS_SFLIGHT 变量。 使用 UP TO 1 ROWS 选项限制结果集最多只有一行。 使用 WRITE 语句输出 GS_SFLIGHT 变量的 CARRID 和 CONNID 字段值。 ENDSELECT 结束 SELECT 查询语句块。 JOIN语句 在ABAP中JOIN语句用于将多个表中的数据连接在一起生成一个包含多个表中数据的结果集。JOIN语句通常与SELECT语句结合使用并且与FROM语句连接以从多个表中检索数据。上面的例子都是从单个数据库表中获取数据如果要从多个数据库表中获取数据则需要使用JOIN语句。 JOIN语句有多种类型包括INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN和FULL OUTER JOIN。以下是这些JOIN类型的简要说明 INNER JOIN只返回在两个表中都有匹配的行。 LEFT OUTER JOIN返回左侧表中的所有行以及右侧表中与左侧表匹配的行。 RIGHT OUTER JOIN返回右侧表中的所有行以及左侧表中与右侧表匹配的行。 FULL OUTER JOIN返回两个表中的所有行只要它们不是完全匹配。 PS: 在ABAP中只支持左外连接LEFT OUTER JOIN和全外连接FULL OUTER JOIN INNER JOIN 下方是一个INNER JOIN的流程示意图 LEFT OUTER JOIN 下方是一个LEFT OUTER JOIN的流程示意图 FULL OUTER JOIN 下方是一个FULL OUTER JOIN的流程示意图 写在最后的话 本文花费大量时间介绍了OPEN SQL中FROM语句的详细语法希望能帮助到各位小伙伴码文不易还望各位大佬们多多支持哦你们的支持是我最大的动力 ✨原创不易还希望各位大佬支持一下\textcolor{blue}{原创不易还希望各位大佬支持一下}原创不易还希望各位大佬支持一下 点赞你的认可是我创作的动力\textcolor{9c81c1}{点赞你的认可是我创作的动力}点赞你的认可是我创作的动力 ⭐️ 收藏你的青睐是我努力的方向\textcolor{ed7976}{收藏你的青睐是我努力的方向}收藏你的青睐是我努力的方向 ✏️ 评论你的意见是我进步的财富\textcolor{98c091}{评论你的意见是我进步的财富}评论你的意见是我进步的财富