当前位置: 首页 > news >正文

「SAP ABAP」OPEN SQL(四)【FROM语句】

在这里插入图片描述

💂作者简介: 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语句的介绍,希望大家喜欢!


数据库表准备

  本文所有案例都是基于数据库表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 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}{评论,你的意见是我进步的财富!}评论,你的意见是我进步的财富!

相关文章:

「SAP ABAP」OPEN SQL(四)【FROM语句】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…...

一文吃透 SpringMVC 中的转发和重定向

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

Hbase操作命令

目录 创建表&#xff0c;表中有两个列族 baseinfo, schoolinfo 查看指定表全名空间中的表 查看表描述 禁用/启用 查看是否启用/禁用 删除表 注意&#xff0c;首先要将删除的表设置为禁用状态才可以删除&#xff0c;否则会报错 新增列族 删除列族 更改列族存储版本的限制 增…...

1>LINK : fatal error LNK1104: cannot open file ‘libconvtname.obj‘

我自己最后找到问题原因是&#xff1a; 引用的库名称没有.lib&#xff0c;只有libconvtname。 改成完整的libconvtname.lib即可。 以下是chatGPT的回答 The error message "fatal error LNK1104: cannot open file libconvtname.obj" usually occurs when Visual S…...

数据结构——链表OJ题目讲解(1)

作者&#xff1a;几冬雪来 时间&#xff1a;2023年3月7日 内容&#xff1a;数据结构链表OJ题目讲解 题目来源&#xff1a;力扣和牛客 目录 前言&#xff1a; 刷题&#xff1a; 1.移出链表元素&#xff1a; 2.链表的中间结点&#xff1a; 3. 链表中倒数第k个结点&#xff1…...

LeetCode_二分搜索_困难_154.寻找旋转排序数组中的最小值 II

目录1.题目2.思路3.代码实现&#xff08;Java&#xff09;1.题目 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,4,4,5,6,7] 在变化后可能得到&#xff1a; 若旋转 4…...

面向对象设计模式:创建型模式之建造者模式

一、引入 Build&#xff1a;建造和构建具有建筑结构的大型物体 建楼&#xff1a;打牢地基、搭建框架、然后自下而上一层层盖起来。构建物体&#xff1a;通常需要先建造组成这个物体的各个部分&#xff0c;然后分阶段把它们组装起来 二、建造者模式 2.1 Intent 意图 Separate…...

集成学习boosting、bagging、stacking

目录 一、介绍 二、三种架构学习 &#xff08;1&#xff09;boosting &#xff08;2&#xff09;bagging &#xff08;3&#xff09;stacking 一、介绍&#xff1a; 对于单个模型来说很难拟合复杂的数&#xff0c;模型的抗干扰能力较低&#xff0c;所以我们希望可以集成多…...

数据模型(上):模型分类和模型组成

1.模型分类 ​ 数据模型是一种由符号、文本组成的集合,用以准确表达信息景观,达到有效交流、沟通的目的。数据建模者要求能与来自不同部门,具有不同技术背景,不同业务经验,不同技术水平的人员交流、沟通。数据建模者要了解每个人员的观点,并通过反馈证明理解无误,最终作…...

郑州轻工业大学2022-2023(2) 数据结构题目集 - ZZULI

6-1 线性表元素的区间删除 6-1 线性表元素的区间删除 分数 20 全屏浏览题目 切换布局 作者 DS课程组 单位 浙江大学 给定一个顺序存储的线性表&#xff0c;请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储&#xff0c;并且相对位置不能改变…...

【Python语言基础】——Python MySQL Drop Table

Python语言基础——Python MySQL Drop Table 文章目录Python语言基础——Python MySQL Drop Table一、Python MySQL Drop Table一、Python MySQL Drop Table 删除表 您可以使用 “DROP TABLE” 语句来删除已有的表&#xff1a; 实例 删除 “customers” 表&#xff1a; import…...

2023美团面试真题

面试前需要准备&#xff1a; 1. Java 八股文&#xff1a;了解常考的题型和回答思路&#xff1b; 2. 算法&#xff1a;刷 100-200 道题&#xff0c;记住刷题最重要的是要理解其思想&#xff0c;不要死记硬背&#xff0c;碰上原题很难&#xff0c;但 大多数的解题思路是相通的…...

【微信小程序开发全流程】篇章0:基于JavaScript开发的校园综合类微信小程序的概览

基于JavaScript开发的校园综合类微信小程序的概览 本文仅供学习&#xff0c;未经同意请勿转载 一些说明&#xff1a;上述项目来源于笔者我本科大三阶段2019年电子设计课程项目&#xff0c;在这个项目中&#xff0c;我主要是负责的部分有前端&#xff0c;前后端的对接&#xf…...

如何分析sql性能

1、前言 提到sql性能分析&#xff0c;可能都会想到explain&#xff0c;它在mysql里被称为执行计划&#xff0c;也就是说可以通过该命令看出mysql在通过优化器分析之后如何执行sql。mysql的内置优化器十分强大&#xff0c;它能帮我们把sql再次优化&#xff0c;以最低的成本去执…...

市场营销书籍推荐:《经理人参阅:市场营销》

要学好市场营销有什么好方法&#xff1f;答案是看书&#xff01;比起碎片化地去阅读一些文章或看一些相关视频&#xff0c;读书来得更实在些。倘若能静下心来好好读上一本系统性的市场营销书籍&#xff0c;学好营销管理将不会再是一件难事。然而&#xff0c;问题的关键是&#…...

WPF 控件专题 MediaElement控件详解

1、MediaElement 介绍 MediaElement&#xff1a;表示包含音频和/或视频的控件。 MediaOpened在引发事件之前&#xff0c;ActualWidth控件将ActualHeight报告为零&#xff0c;因为媒体内容用于确定控件的最终大小和位置。 对于仅音频内容&#xff0c;这些属性始终为零。 对于固…...

基于SpringBoot+SpringCloud+Vue前后端分离项目实战 --开篇

本文目录前言做项目的三大好处强强联手(天狗组合)专栏作者简介专栏的优势后端规划1. SpringBoot 和 SpringCloud 的选择2. Mybatis 和 MybatisPlus 和 JPA 的选择3. MySQL 和 Mongodb 的选择4. Redis 和 RocketMQ5. 后端规划小总结后端大纲提前掌握的知识点一期SpringBoot二期S…...

循环队列的实现

我们知道队列的实现可以用单链表和数组&#xff0c;但是循环链表也可以使用这两种方式。首先我们来看看单链表&#xff1a;首先使用单链表&#xff0c;我们需要考虑循环队列的一些特点。单链表实现循环队列我们要考虑几个核心问题&#xff1a;首先我们要区别 解决 空 和 满 的问…...

MTK平台开发入门到精通(休眠唤醒篇)休眠唤醒LPM框架

文章目录 一、lpm驱动源码分析二、设备属性调试文件沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍 lpm 驱动源码分析。 mtk 平台下,其默认的 lpm 机制的源码位置:drivers/misc/mediatek/lpm/ 一、lpm驱动源码分析 目录:drivers/misc/mediatek/lpm/…...

ThreadLocal详解

一、ThreadLocal简介 1、简介 ThreadLocal叫做线程变量&#xff0c;它是一个线程的本地变量&#xff0c;意味着这个变量是线程独有的&#xff0c;是不能与其他线程共享的。这样就可以避免资源竞争带来的多线程的问题。 即 ThreadLocal类用来提供线程内部的局部变量&#xff0…...

利用Cookie劫持+HTML注入进行钓鱼攻击

目录 HTML注入和cookie劫持&#xff1a; 发现漏洞 实际利用 来源 HTML注入和cookie劫持&#xff1a; HTML注入漏洞一般是由于在用户能够控制的输入点上&#xff0c;由于缺乏安全过滤&#xff0c;导致攻击者能将任意HTML代码注入网页。此类漏洞可能会引起许多后续攻击&#…...

【接口汇总】常用免费的API

短信API 短信验证码&#xff1a;可用于登录、注册、找回密码、支付认证等等应用场景。支持三大运营商&#xff0c;3秒可达&#xff0c;99.99&#xff05;到达率&#xff0c;支持大容量高并发。 通知短信&#xff1a;当您需要快速通知用户时&#xff0c;通知短信是最快捷有效的…...

数字信号处理知识点

数字信号处理知识点1 频谱图中&#xff0c;横坐标取值范围的含义2 MATLAB常用函数2.1 波形产生2.2 滤波器分析2.3 滤波器实现2.4 线性系统变换2.5 滤波器设计2.5.1 FIR滤波器2.5.2 IIR滤波器2.6 Transforms(变换)2.7 统计信号处理和谱分析2.8 Windows(窗函数)2.9 Parametric Mo…...

计算机网络第八版——第三章课后题答案(超详细)

第三章 该答案为博主在网络上整理&#xff0c;排版不易&#xff0c;希望大家多多点赞支持。后续将会持续更新&#xff08;可以给博主点个关注~ 第一章 答案 第二章 答案 【3-01】数据链路&#xff08;即逻辑链路&#xff09;与链路&#xff08;即物理链路&#xff09;有何区…...

九龙证券|磷酸亚铁锂是什么?磷酸亚铁锂的特点和性能介绍

磷酸亚铁锂是一种新式锂离子电池电极资料&#xff0c;化学式&#xff1a;LiFePO4&#xff0c;磷酸亚铁锂为近来新开发的锂离子电池电极资料&#xff0c;首要用于动力锂离子电池&#xff0c;作为正极活性物质运用&#xff0c;人们习气也称其为磷酸铁锂。 磷酸亚铁锂的特色和功能…...

3D目标检测(二)—— 直接处理点云的3D目标检测网络VoteNet、H3DNet

前言上次介绍了基于Point-Based方法处理点云的模块&#xff0c;3D目标检测&#xff08;一&#xff09;—— 基于Point-Based方法的PointNet点云处理系列,其中相关的模块则是构成本次要介绍的&#xff0c;直接在点云的基础上进行3D目标检测网络的基础。VoteNet对于直接在点云上预…...

Java学习-IO流-常用工具包(hutool)

Java学习-IO流-常用工具包&#xff08;hutool&#xff09; hutool工具包 DateUtil&#xff1a;日期时间工具类 TImeInterval&#xff1a;计时器工具类 StrUtil&#xff1a;字符串工具类 HexUtil&#xff1a;16进制工具类 HashUtil&#xff1a;Hash算法类 ObjectUtil&#xff1…...

【LeetCode】1. 两数之和

题目链接&#xff1a;https://leetcode.cn/problems/two-sum/ &#x1f4d5;题目要求&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入…...

【数值模型环境搭建】Intel编译器安装

Intel编译器在数值模型编译中被广泛使用&#xff0c;它有一个很好的地方是自带Mpich&#xff0c;不需要额外安装。本文介绍Intel2018.1.163版本的安装。 1、安装包获取 Intel编译器可从官网下载下载&#xff1a; https://www.intel.cn/content/www/cn/zh/homepage.html 或者…...

操作VMware vCenter Converter 实现物理机迁移到虚拟机

实验目的&#xff1a;熟练VMware虚拟化项目中&#xff0c;物理机向ESXI5迁移操作过程。 1、打开VMwarevCenterConverterStandalone5.0软件&#xff0c;按“转换计算机”。 2、选择“已打开电源的计算机”。并输入远程要连接迁移物理机IP地址&#xff0c;登录帐户和密码。 然后…...