「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 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}{评论,你的意见是我进步的财富!}评论,你的意见是我进步的财富!
相关文章:

「SAP ABAP」OPEN SQL(四)【FROM语句】
💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后…...

一文吃透 SpringMVC 中的转发和重定向
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
Hbase操作命令
目录 创建表,表中有两个列族 baseinfo, schoolinfo 查看指定表全名空间中的表 查看表描述 禁用/启用 查看是否启用/禁用 删除表 注意,首先要将删除的表设置为禁用状态才可以删除,否则会报错 新增列族 删除列族 更改列族存储版本的限制 增…...
1>LINK : fatal error LNK1104: cannot open file ‘libconvtname.obj‘
我自己最后找到问题原因是: 引用的库名称没有.lib,只有libconvtname。 改成完整的libconvtname.lib即可。 以下是chatGPT的回答 The error message "fatal error LNK1104: cannot open file libconvtname.obj" usually occurs when Visual S…...

数据结构——链表OJ题目讲解(1)
作者:几冬雪来 时间:2023年3月7日 内容:数据结构链表OJ题目讲解 题目来源:力扣和牛客 目录 前言: 刷题: 1.移出链表元素: 2.链表的中间结点: 3. 链表中倒数第k个结点࿱…...
LeetCode_二分搜索_困难_154.寻找旋转排序数组中的最小值 II
目录1.题目2.思路3.代码实现(Java)1.题目 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums [0,1,4,4,5,6,7] 在变化后可能得到: 若旋转 4…...

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

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

数据模型(上):模型分类和模型组成
1.模型分类 数据模型是一种由符号、文本组成的集合,用以准确表达信息景观,达到有效交流、沟通的目的。数据建模者要求能与来自不同部门,具有不同技术背景,不同业务经验,不同技术水平的人员交流、沟通。数据建模者要了解每个人员的观点,并通过反馈证明理解无误,最终作…...
郑州轻工业大学2022-2023(2) 数据结构题目集 - ZZULI
6-1 线性表元素的区间删除 6-1 线性表元素的区间删除 分数 20 全屏浏览题目 切换布局 作者 DS课程组 单位 浙江大学 给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储,并且相对位置不能改变…...
【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” 语句来删除已有的表: 实例 删除 “customers” 表: import…...
2023美团面试真题
面试前需要准备: 1. Java 八股文:了解常考的题型和回答思路; 2. 算法:刷 100-200 道题,记住刷题最重要的是要理解其思想,不要死记硬背,碰上原题很难,但 大多数的解题思路是相通的…...

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

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

市场营销书籍推荐:《经理人参阅:市场营销》
要学好市场营销有什么好方法?答案是看书!比起碎片化地去阅读一些文章或看一些相关视频,读书来得更实在些。倘若能静下心来好好读上一本系统性的市场营销书籍,学好营销管理将不会再是一件难事。然而,问题的关键是&#…...
WPF 控件专题 MediaElement控件详解
1、MediaElement 介绍 MediaElement:表示包含音频和/或视频的控件。 MediaOpened在引发事件之前,ActualWidth控件将ActualHeight报告为零,因为媒体内容用于确定控件的最终大小和位置。 对于仅音频内容,这些属性始终为零。 对于固…...

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

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

MTK平台开发入门到精通(休眠唤醒篇)休眠唤醒LPM框架
文章目录 一、lpm驱动源码分析二、设备属性调试文件沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍 lpm 驱动源码分析。 mtk 平台下,其默认的 lpm 机制的源码位置:drivers/misc/mediatek/lpm/ 一、lpm驱动源码分析 目录:drivers/misc/mediatek/lpm/…...

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

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...