「ABAP」OPEN SQL中FROM语句超详细解析(附案例源码解读)

news2025/7/6 23:50:57

在这里插入图片描述

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。


💅文章概要: 各位小伙伴们大家好呀!今天继续SAP ABAP系列文章的讲解,本节带来的内容是OPEN SQL中FROM语句的介绍,希望大家喜欢!


🤟每日一言: 永远年轻,永远热泪盈眶!

目录

  • 前言
  • FROM语句介绍
    •  案例演示
  • 表类型选择
    •  静态表
    •  动态表
  • JOIN语句
    •  INNER JOIN
    •  LEFT OUTER JOIN
    •  FULL OUTER JOIN
  • 写在最后的话


前言

在这里插入图片描述

  各位小伙伴们大家好呀!今天继续SAP ABAP系列文章的讲解,本节带来的内容是OPEN SQL中FROM语句的介绍,希望大家喜欢!


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数据库表为基准的示例代码,基本涵盖以上所有参数,仅供参考:

* 定义静态内表
DATA: stat_table TYPE STANDARD TABLE OF sflight.

* 填充静态内表数据
SELECT carrid connid fldate seatsmax seatsocc
  FROM sflight
  INTO TABLE stat_table.

* 查询静态内表中的数据,并使用GROUP BYHAVING进行分组和过滤
DATA: result_set TYPE STANDARD TABLE OF sflight,
      result_line LIKE LINE OF result_set.
SELECT connid carrid COUNT( * ) AS cnt
  FROM stat_table
  WHERE fldate BETWEEN '20100101' AND '20101231'
  GROUP BY connid carrid
  HAVING COUNT( * ) > 10
  INTO TABLE result_set.

* 对结果集进行排序,并只返回前10行数据
DATA: top_results TYPE STANDARD TABLE OF sflight,
      top_result LIKE LINE OF top_results.
SELECT carrid connid cnt
  FROM result_set
  ORDER BY cnt DESCENDING
  UP TO 10 ROWS
  INTO TABLE top_results.

* 输出查询结果
WRITE: / 'Top 10 results:'.
LOOP AT top_results INTO top_result.
  WRITE: / top_result-carrid, top_result-connid, top_result-cnt.
ENDLOOP.

  在上面的示例中,首先定义了一个静态内表变量stat_table,并使用SELECT INTO TABLE语句将sflight表中的数据填充到该静态内表中。

  然后,使用SELECT语句从静态内表stat_table中查询数据,并使用GROUP BYHAVING进行分组过滤,查询结果存储在result_set中。

  最后,对result_set进行排序,并只返回前10行数据存储到top_results中,最终输出查询结果。


表类型选择

在这里插入图片描述

  FROM语句中获取数据来源的数据库表既可以是静态数据库表也可以是动态数据库表

  需要注意的是,ABAP的动态表在运行时可以通过添加删除修改表项的方式动态地调整表的大小。这使得动态表非常灵活,但也意味着它们在内存使用方面比静态表更为昂贵。另一方面,静态表在编译时创建,其大小固定,因此它们在内存使用方面更加节省

  此外,在选择语句中使用动态表时,需要使用INTO TABLE关键字将结果存储到表中。而对于静态表,不需要使用该关键字。

  在定义动态表时,不需要指定表的大小,因为表可以在运行时动态调整大小。而静态表在定义时必须指定表的大小,因为表的大小在编译时就已经确定了。

动态表静态表
在运行时动态创建在编译时创建
内存使用更高,因为需要动态调整表大小内存使用较少,因为表大小固定
可以动态添加、删除和修改表项无法在运行时添加或删除表项
在选择语句中使用时需要使用INTO TABLE在选择语句中使用时不需要使用INTO TABLE
定义时不需要指定表的大小定义时需要指定表的大小

PS:动态表名称或表表达式,可以是字符串或一个动态表变量。

 静态表

  下面给出一段以SFLIGHT数据库表为基准的示例代码,从静态表中读取数据:

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.

SELECT carrid connid fldate price
  FROM sflight
  INTO TABLE lt_sflight.

LOOP AT lt_sflight INTO DATA(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语句打印输出每一行数据的字段值。在本例中,我们使用/符号将每一行的输出放在不同的行中。

PS:在上述代码中部分使用了新语法,新语法将在本章节最后进行讲解!

 动态表

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 JOINLEFT OUTER JOINRIGHT OUTER JOINFULL 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}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/387210.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

剑指offer:在排序数组中查找数字I的个数

剑指offer&#xff1a;在排序数组中查找数字I的个数 LeetCode 2698题&#xff0c;剑指offer 53题。 击败100%的用户 题目描述 统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums [5,7,7,8,8,10], target 8 输出: 2示例 2: 输入: nums [5,7,7,8,8,10], target…

模电基础(1) 半导体基础知识

基本内容&#xff1a; 1.本征半导体的基本介绍结构&#xff1b; 2.杂质半导体&#xff1b; 3.PN结的形成&#xff1b; 4.PN结的性质。 1.本征半导体 半导体&#xff1a;导电性能介于绝缘体和导体之间的物质。 本征半导体是纯净的晶体结构的半导体。 纯净→无杂质晶体结构→稳…

代码随想录中:回溯算法的基础

回溯算法是一种暴力的搜索方式&#xff1b;回溯法一般与递归同时存在。 回溯法&#xff0c;一般可以解决如下几种问题&#xff1a; 组合问题&#xff1a;N个数里面按一定规则找出k个数的集合切割问题&#xff1a;一个字符串按一定规则有几种切割方式子集问题&#xff1a;一个…

SpringBoot 集成 RabbitMQ

SpringBoot 集成 RabbitMQ 1.应用实例 需求说明/图解 -P : 消息的发送者/生产者 -C : 消息的接受者/消费者 -中间表示队列 完成步骤 添加依赖 <!--rabbitmq-需要的 AMQP 依赖--> <dependency><groupId>org.springframework.boot</groupId><art…

python判断控制语句和输出练习

作业2&#xff1a;判断一个数&#xff0c;是否是2的指数 2的指数 0000 0010 0000 0001 0000 0100 0000 0011 0000 1000 0000 0111 0001 0000 0000 1111 提示&#xff1a;所有2的指数&#xff1a;n&(n - 1) 0 作业3&#xff…

【spring】spring5特性

1、整个 Spring5 框架的代码基于 Java8&#xff0c;运行时兼容 JDK9&#xff0c;许多不建议使用的类和方 法在代码库中删除 日志框架 2、Spring 5.0 框架自带了通用的日志封装 &#xff08;1&#xff09;Spring5 已经移除 Log4jConfigListener&#xff0c;官方建议使用 Log4j…

Linux23 --- 三次握手四次挥手、客户端编程流程代码、命令netstat、 tcp协议是个面向链接的可靠的流式服务

tcp协议特点&#xff1a; 面向连接的&#xff0c;可靠的&#xff0c;流式服务。 一、三次握手 、四次挥手 链接的建立通过三次握手&#xff0c;链接的断开通过四次挥手 1、TCP固定头部结构 2、三次握手 3、四次挥手 二、命令 - netstat -natp n - 用数字来表示ip地址、端口…

【8】【用户操作日志】操作日志SpringBootStarter

操作日志 此版本操作日志主要就是通过AOP拦截器实现的&#xff0c;整体主要分为AOP拦截器、自定义函数、日志上下文、扩展接口&#xff1b;组件提供了6个扩展点&#xff0c;自定义函数、日志上下文、用户信息获取&#xff0c;日志保存&#xff0c;自定义异常获取&#xff0c;入…

2023王道考研数据结构笔记第四章串

第四章 串 4.1 串的定义 4.1.1 串的相关概念 串&#xff1a;即字符串&#xff08;String&#xff09;是由零个或多个字符组成的有限序列。一般记为S‘a1a2…an’ (n>0) 其中S是串名&#xff0c;单引号&#xff08;注&#xff1a;有的地方用双引号&#xff0c;如Java、C&am…

4. Unity之文件资源和其它杂项

1. 资源文件 unity中的Assets文件夹下的文件都可以称为时资源文件&#xff0c;包括模型文件、材质文件、纹理贴图文件、脚本文件、音频文件等&#xff0c;如果想查看某一个文件在电脑中的保存路径&#xff0c;可以选中指定文件后&#xff0c;单击鼠标右键选择show in Explorer…

研究生退税的详细流程

本文介绍在个人所得税软件中&#xff0c;进行退税操作的详细流程。 又到了一年一度的退税时间了。作为研究生&#xff0c;由于每个月都有固定的工资&#xff0c;有时还会有导师发放的补助、国家或院校等发放的奖学金等收入&#xff0c;所以其中有时需要缴纳一部分税款&#xff…

vue-template-admin的keep-alive缓存与移除缓存

一&#xff0c;场景 A页面是表单页面&#xff0c;填写后需要跳转B页面。如果B页面不操作返回的话&#xff0c;应该能还原A页面的内容&#xff0c;而如果B页面点击提交&#xff0c;再回到A页面的时候&#xff0c;应该清除缓存。 二&#xff0c;实现方法 A页面要缓存数据&…

网络互连模型:OSI 七层模型

OSI 七层模型 七层模型&#xff0c;亦称 OSI&#xff08;Open System Interconnection&#xff09;。OSI 七层参考模型是国际标准化组织&#xff08;ISO&#xff09;制定的一个用于计算机或通信系统间网络互联的标准体系&#xff0c;一般称为 OSI 参考模型或七层模型。OSI 七层…

询问new bing关于android开发的15个问题(前景、未来、发展方向)

前言&#xff1a;new bing是基于chat-gpt的新搜索工具&#xff0c;可以采用对话方式进行问题搜索&#xff0c;经过排队等候终于可以使用new bing&#xff0c;询问了目前我最关心的关于android开发几个问题 文章目录1.如何学好android开发&#xff1f;2.android开发能做什么?3.…

最近爆火的ChatGPT核心技术演进历程

文章目录1.前言2.初识ChatGPT2.1.什么是ChatGPT2.2.ChatGPT和其他模型对比具有的特性3.ChatGPT技术演进历程3.1.Transformer&#xff08;转移学习&#xff09;和基础模型3.2.GPT-1&#xff1a;简化模型&#xff0c;使其更适合自然语言生成3.2.1.什么是GPT-13.2.1.GPT-1的优势3.…

3.crypto-config.yaml配置文件分析和cryptogen工具使用[fabric2.2]

在fabric网络启动的过程中&#xff0c;会使用使用cryptogen 工具创建组织的证书文件&#xff0c;这时候就会用到crypto-config.yaml配置文件&#xff0c;例如fabric官方测试例程test-network中就用到了crypto-config-org1.yaml&#xff0c;crypto-config-org2.yaml&#xff0c;…

java实例解析类图中【关联、组合和聚合】的区别

总目录链接==>> AutoSAR入门和实战系列总目录 文章目录 聚合Composition聚合与组合的区别关联是两个独立类之间的关系,它通过它们的对象建立关联。关联可以是一对一、一对多、多对一、多对多。在面向对象的编程中,一个对象与另一个对象通信以使用该对象提供的功能和服…

轮盘赌选择法

轮盘赌选择原理 轮盘赌选择法&#xff08;roulette wheel selection&#xff09;是最简单也是最常用的选择方法&#xff0c;在该方法中&#xff0c;各个个体的选择概率和其适应度值成比例&#xff0c;适应度越大&#xff0c;选中概率也越大。 从图中可以看出一等奖、二等奖、…

Rust学习总结之数组,元组,结构体用法

学过数据结构的都知道有这么一个公式&#xff0c;程序数据结构算法&#xff0c;好的数据结构能大大降低算法设计的复杂度&#xff0c;也能更好的为算法服务。了解一门新的计算机编程语言其数据结构是必须首先要学的&#xff0c;这有利于对该语言的理解和快速上手。本文将对Rust…

vue引入cdn Vue 优化Vue引入 cdn vue cdn Vue优化引入CDN vue 项目 CDN优化

vue引入cdn Vue 优化Vue引入 cdn vue cdn Vue优化引入CDN vue 项目 CDN优化未引入 CDN前 main.js更改CDN方式引入在 vue.config 中引入 CDNindex.html 加载 cdn资源使用CDN引入资源后的main.js如果引入CDN后 组件不生效CDN 服务商推荐未引入 CDN前 main.js // 依赖使用 npm 方…