「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

  下方是一个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}{评论,你的意见是我进步的财富!}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

女子举重问题

一、问题的描述 问题及要求 1、搜集各个级别世界女子举重比赛的实际数据。分别建立女子举重比赛总成绩的线性模型、幂函数模型、幂函数改进模型&#xff0c;并最终建立总冠军评选模型。 应用以上模型对最近举行的一届奥运会女子举重比赛总成绩进行排名&#xff0c;并对模型及…

【2023-03-10】JS逆向之美团滑块

提示&#xff1a;文章仅供参考&#xff0c;禁止用于非法途径 前言 目标网站:aHR0cHM6Ly9wYXNzcG9ydC5tZWl0dWFuLmNvbS9hY2NvdW50L3VuaXRpdmVsb2dpbg 页面分析 接口流程 1.https://passport.meituan.com/account/unitivelogin主页接口&#xff1a;需获取下面的参数&#xff0…

力扣刷题---初始链表1

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f; c语言初阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:讲解初始数据结构链表的三个力扣题 1.移除链表元素. 2.反转…

Visual Studio Code 1.76 发布

欢迎使用 Visual Studio Code 2023 年 2 月版&#xff0c;其中一些亮点包括&#xff1a; 配置文件 - 活动配置文件徽章&#xff0c;通过命令面板快速切换配置文件。辅助功能改进 - 新的音频提示&#xff0c;改进的终端屏幕阅读器模式。可移动的 Explorer 视图- 将资源管理器放…

JavaWeb——Request(请求)和Response(响应)介绍

在写servlet时需要实现5个方法&#xff0c;在一个service方法里面有两个参数request和response。 浏览器向服务器发送请求会发送HTTP的请求数据——字符串&#xff0c;这些字符串会被Tomcat所解析&#xff0c;然后这些请求数据会被放到一个对象(request)里面保存。 相应的Tom…

有图解有案例,我终于把 Condition 的原理讲透彻了

哈喽大家好&#xff0c;我是阿Q&#xff01; 20张图图解ReentrantLock加锁解锁原理文章一发&#xff0c;便引发了大家激烈的讨论&#xff0c;更有小伙伴前来弹窗&#xff1a;平时加解锁都是直接使用Synchronized关键字来实现的&#xff0c;简单好用&#xff0c;为啥还要引用Re…

React面向组件编程(理解与使用+state+props+refs与事件处理)

1 基本理解与使用 函数式组件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"…

开发板与ubantu文件传送

接下来的所以实验都通过下面这种方式发送APP文件到开发板运行 目录 1、在ubantu配置 ①在虚拟机上添加一个桥接模式的虚拟网卡 ②设定网卡 ③在网卡上配置静态地址 2、开发板设置 ①查看网卡 ②配置网卡静态ip 3、 测试 ①ping ②文件传送 传送报错情况 配置环境&#…

Java Web 实战 14 - 计算机网络之初识计算机网络

初识计算机网络一 . 网络发展史二 . 局域网 VS 广域网2.1 交换机与路由器2.2 集线器三 . 网络通信基础3.1 协议3.1.1 OSI 七层模型3.1.2 TCP / IP 五层模型3.2 交换机和路由器的区别3.3 封装和分用大家好 , 这篇文章给大家分享的是计算机网络的一些基础知识 , 我们会给大家分享…

钉钉,下沉进农田

在这个古老的产业里&#xff0c;数字化没有被放到更高的位置&#xff0c;但难点依旧存在。钉钉恰是基于它足够柔性的产品特性和普惠的服务模式&#xff0c;真正帮助农食产业中的人和企业解决着过去一直没有解决的问题&#xff0c;让这个产业中的人和环节都向数字化潮水迈进了一…

linux目录——文件管理

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。座右铭&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石&#xff0c;故能成其高。个人主页&#xff1a;小李会科技的…

CGAL 点云上采样

目录一、算法原理1、主要函数2、参数解析二、代码实现三、结果展示一、算法原理 该方法对点集进行逐步上采样&#xff0c;同时根据法向量信息来检测边缘点&#xff0c;需要输入点云具有法线信息。在点云空洞填充和稀疏表面重建中具有较好的应用。 1、主要函数 头文件 #inclu…

最强分布式锁工具:Redisson

1 Redisson概述1.1 什么是Redisson&#xff1f;Redisson是一个在Redis的基础上实现的Java驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;。它不仅提供了一系列的分布式的Java常用对象&#xff0c;还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, Sorted…

GPT-4测评,大家先别急,图片输入还没来

昨天GPT-4朋友圈刷屏&#xff0c;我更新了一篇小文章&#xff0c;极简罗列GPT-4的一些情报&#xff1a; 1 ChatGPT Plus用户才可试用GPT-4 2 试用阶段每四小时最多100条信息 3 知识库还是2021年 4 上下文长度为8192个token 5 是多模态&#xff0c;但是图片输入仍处于研究预…

排序算法之插入排序

要考数据结构了&#xff0c;赶紧来复习一波排序算法 文章目录一、直接插入排序二、希尔排序一、直接插入排序 直接上主题 插排&#xff0c;揪出一个数&#xff0c;插入到原本已经有序的数组里面&#xff0c;如数组有n个数据&#xff0c;从0~n下标依次排列&#xff0c;先从左往…

iOS中SDK开发 -- cocoapods库创建

在iOS项目中&#xff0c;经常使用cocoadpods来进行依赖管理以及三方库引入等。引入的三方库一般会有几种形式&#xff1a;一、在Pods目录下可以直接看到源代码的开源库&#xff0c;如AFNetworking&#xff0c;Masonry等常见开源库。二、在Pods目录下拉取的项目文件只能看到对应…

讲解Linux中samba理论讲解及Linux共享访问

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的绽放&#xff0…

监管数据治理治什么?1104、EAST、客户风险系统数据简介

近年来&#xff0c;随着经济社会数字化发展&#xff0c;商业银行逐步向数字化、智能化转型&#xff0c;监管部门对商业银行数据报送质量也越来越重视。自2020年5月9日工行、农行、中行、建行、交行、邮储、中信、光大8家商业银行因监管标准化数据&#xff08;EAST&#xff09;系…

漫画:什么是归并排序算法?

归并排序是建立在归并操作的一种高效的排序方法&#xff0c;该方法采用了分治的思想&#xff0c;比较适用于处理较大规模的数据&#xff0c;但比较耗内存&#xff0c;今天我们聊聊归并排序 一、排序思想 一天&#xff0c;小一尘和慧能坐在石头上&#xff0c;眺望着远方 分而治…

Qt5.12实战之QByteArray与字符指针及字符串转换

示例源码:#include <QCoreApplication> #include <QDebug> #include <QTextStream> static QTextStream cout (stdout,QIODevice::WriteOnly); #include <iostream> #include <QtGlobal> #include <QByteArray>void test() {qDebug() <…