「SAP ABAP」OPEN SQL(八)【WHERE语句大全】
创始人
2025-05-30 12:08:50
0

在这里插入图片描述

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


💅文章概要: 在本节内容中,我们将继续学习ABAP OPEN SQL的知识,今天带来的内容是子查询在OPEN SQL中的应用。子查询可以帮助我们在不知道某些具体数据的情况下查询到我们想要的结果,是经常使用的重点语句之一。


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

目录

  • 前言
  • 数据库表准备
  • 简单WHERE子句
    •  案例演示
      •   使用"="运算符
      •   使用">"运算符
      •   使用"<"运算符
      •   使用"<>"运算符
  • WHERE 子句中的逻辑运算符
    •  案例演示
      •   使用"AND"逻辑运算符
      •   使用"OR"逻辑运算符
      •   使用"NOT"逻辑运算符
  • BETWEEN 运算符
    •  案例演示
  • IN 子句
    •  案例演示
  • LIKE 子句
    •  案例演示
      •   使用"%"通配符
      •   使用"_"通配符
  • 子查询语句
  • 写在最后的话


前言

在这里插入图片描述

  在本节内容中,我们将继续学习ABAP OPEN SQL的知识,今天带来的内容是子查询在OPEN SQL中的应用。子查询可以帮助我们在不知道某些具体数据的情况下查询到我们想要的结果,是经常使用的重点语句之一。


数据库表准备

  本文所有案例都是基于数据库表SFLIGHT,本案例中的SFLIGHT数据库表数据如下,供各位小伙伴们对照来观察代码运行结果:

在这里插入图片描述


简单WHERE子句

在这里插入图片描述

  一个简单的 WHERE 子句通常包含一个条件表达式,该表达式评估为 TRUE FALSE。这个表达式通常由以下元素组成:

  • 字段名:需要筛选的字段名。
  • 运算符:用于比较字段值的运算符,如等于号(=)、大于号(>)、小于号(<)等。
  • :与字段值进行比较的值。

    以下是简单WHERE子句的一般语法样式:
SELECT ...
FROM table_name
WHERE field_name [= | > | < | <>] 'value'.

参数介绍:

  • : 目标数据库表
  • : 数据库表中字段。

 案例演示

  下面给出四段以SFLIGHT数据库表为基准的示例代码,详细讲解了ABAP OPEN SQL中简单WHERE子句的应用,仅供参考:

PS:为了简便,下面的语法都基于OPEN SQL的新语法,关于新语法的讲解将在本系列最后章节进行详细地讲解!

TIPS:运算符与字段和值之间需要间隔至少一个空格单位!!!

  使用"="运算符

SELECT * FROM sflight INTO TABLE @DATA(gt_sflight)
WHERE carrid ='AC'.LOOP AT gt_sflight INTO DATA(gs_sflight).WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-price.ENDLOOP.

在这里插入图片描述

该段代码使用"="运算符检索出了SFLIGHT数据库表中所有carrid等于AC的数据。

  使用">"运算符

SELECT * FROM sflight INTO TABLE @DATA(gt_sflight)WHERE price > 2000.LOOP AT gt_sflight INTO DATA(gs_sflight).WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-price.
ENDLOOP.

在这里插入图片描述

该段代码使用">"运算符,检索出了SFLIGHT数据库表中所有price大于2000的数据。

  使用"<"运算符

SELECT * FROM sflight INTO TABLE @DATA(gt_sflight)WHERE price < 2000.LOOP AT gt_sflight INTO DATA(gs_sflight).WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-price.
ENDLOOP.

在这里插入图片描述

该段代码使用"<"运算符,检索出了SFLIGHT数据库表中所有price小于2000的数据。

  使用"<>"运算符

SELECT * FROM sflight INTO TABLE @DATA(gt_sflight)WHERE price <> 2500.LOOP AT gt_sflight INTO DATA(gs_sflight).WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-price.
ENDLOOP.

在这里插入图片描述

该段代码使用"<>"运算符,检索出了SFLIGHT数据库表中所有price不等于2500的数据。


WHERE 子句中的逻辑运算符

在这里插入图片描述
  WHERE子句中可以使用逻辑运算符来将多个条件组合在一起。下面是一些常见的逻辑运算符:

  • AND:当所有条件都为 TRUE 时,整个条件表达式才会评估为 TRUE
  • OR:当至少有一个条件为 TRUE 时,整个条件表达式就会被评估为 TRUE
  • NOT:将条件表达式的结果反转

 案例演示

  下面给出三段以SFLIGHT数据库表为基准的示例代码,详细讲解了ABAP OPEN SQL中WHERE子句逻辑运算符的应用,仅供参考:

PS:为了简便,下面的语法都基于OPEN SQL的新语法,关于新语法的讲解将在本系列最后章节进行详细地讲解!

TIPS:运算符与字段和值之间需要间隔至少一个空格单位!!!

  使用"AND"逻辑运算符

SELECT * FROM sflight INTO TABLE @DATA(gt_sflight)WHERE carrid = 'AC' AND price = 2500.LOOP AT gt_sflight INTO DATA(gs_sflight).WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-price.
ENDLOOP.

在这里插入图片描述

该段代码使用"AND"逻辑运算符,检索出了SFLIGHT数据库表中所有carrid等于'AC'price等于2500的数据。

  使用"OR"逻辑运算符

SELECT * FROM sflight INTO TABLE @DATA(gt_sflight)WHERE PRICE = 1500 OR PRICE = 2500.LOOP AT gt_sflight INTO DATA(gs_sflight).WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-price.
ENDLOOP.

在这里插入图片描述

该段代码使用"OR"逻辑运算符,检索出了SFLIGHT数据库表中所有price等于'1500'或者price等于2500的数据。

  使用"NOT"逻辑运算符

*PS:注意NOT与括号之间需要有空格,条件表达式与括号之间也需要有空格!!
SELECT * FROM sflight INTO TABLE @DATA(gt_sflight)WHERE NOT ( PRICE = 1500 OR PRICE = 2500 ). LOOP AT gt_sflight INTO DATA(gs_sflight).WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-price.
ENDLOOP.

在这里插入图片描述

该段代码使用"NOT"逻辑运算符,将上方使用OR逻辑运算符的那段代码的结果进行了反转,剔除掉了SFLIGHT数据库表中所有price等于'1500'或者price等于2500的数据。


BETWEEN 运算符

在这里插入图片描述

  BETWEEN 运算符用于检索介于两个值之间的数据。BETWEEN 运算符需要指定一个起始值和一个结束值,它将匹配这两个值之间(包括这两个值)的所有行。


  以下是BETWEEN运算符的一般语法样式:

SELECT ...
FROM table_name
WHERE field_name BETWEEN 'value1' AND 'value2'.

参数介绍:

  • : 目标数据库表
  • : 数据库表中字段。
  • value1,value2: 值

 案例演示

  下面给出一段以SFLIGHT数据库表为基准的示例代码,详细讲解了ABAP OPEN SQL中BETWEEN运算符的应用,仅供参考:

PS:为了简便,下面的语法都基于OPEN SQL的新语法,关于新语法的讲解将在本系列最后章节进行详细地讲解。

SELECT * FROM sflight INTO TABLE @DATA(gt_sflight)WHERE price BETWEEN 1000 AND 1500.LOOP AT gt_sflight INTO DATA(gs_sflight).WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-price.
ENDLOOP.

在这里插入图片描述

该段代码中使用BETWEEN运算符将数据进行了限制,只从数据库表中取出price在 1000到1500之间的数据。


IN 子句

在这里插入图片描述

  IN 子句可以用来匹配一系列值中的任何一个。IN 子句可以使用一个列表,列表中包含需要匹配的值。这个列表可以是常量、字段或子查询的结果。


  以下是IN子句的一般语法样式:

SELECT ...
FROM table_name
WHERE field_name IN (['value1', 'value2', 'value3' | 子查询语句]).

参数介绍:

  • : 目标数据库表
  • : 数据库表中字段。
  • value1,value2,value3: 值
  • IN后面的列表中还可以填入子查询语句,将在本文最后进行讲解

 案例演示

  下面给出一段以SFLIGHT数据库表为基准的示例代码,详细讲解了ABAP OPEN SQL中IN子句的应用,仅供参考:

PS:为了简便,下面的语法都基于OPEN SQL的新语法,关于新语法的讲解将在本系列最后章节进行详细地讲解。

SELECT * FROM sflight INTO TABLE @DATA(gt_sflight)WHERE price IN ( 1500,2500 ).LOOP AT gt_sflight INTO DATA(gs_sflight).WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-price.
ENDLOOP.

在这里插入图片描述

在这段代码中,使用IN子句利用列表限制了price的值只能为1500或者2500,但是要注意列表中的值需要用逗号分隔并且距离两端括号至少一个空格单位


LIKE 子句

在这里插入图片描述

  LIKE 子句用于基于模式的比较,它可以用来匹配一个特定的模式。LIKE 子句可以使用通配符来代替某些字符。通配符有两种:

  • 百分号(%):代表任何字符序列,包括零个字符。
  • 下划线(_):代表任何单个字符。

    以下是LIKE子句的一般语法样式:
SELECT ...
FROM table_name
WHERE field_name LIKE 'value%'.

参数介绍:

  • : 目标数据库表
  • : 数据库表中字段。
  • value%: 通配值

 案例演示

  下面给出两段以SFLIGHT数据库表为基准的示例代码,详细讲解了ABAP OPEN SQL中LIKE子句的应用,仅供参考:

  使用"%"通配符

SELECT * FROM sflight INTO TABLE @DATA(gt_sflight)WHERE CARRID LIKE 'A%'.LOOP AT gt_sflight INTO DATA(gs_sflight).WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-price.
ENDLOOP.

在这里插入图片描述

上述代码将从SFLIGHT表中检索所有CARRID列以'A'开头的行,并将他们打印输出到屏幕中。

  使用"_"通配符

SELECT * FROM sflight INTO TABLE @DATA(gt_sflight)WHERE CARRID LIKE 'L_'.LOOP AT gt_sflight INTO DATA(gs_sflight).WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-price.
ENDLOOP.

在这里插入图片描述

上述代码将从SFLIGHT表中检索所有CARRID列以'L'开头的行,并将他们打印输出到屏幕中。


子查询语句

在这里插入图片描述

  子查询是一个 SELECT 语句,它嵌套在另一个 SELECT 语句中作为一个条件。子查询的结果可以是一个单一的值一个列表一个表

  以下是子查询语句的一般语法样式:

SELECT ...
FROM table_name1
WHERE field_name IN (SELECT field_name FROM table_name2).

参数介绍:

  • : 目标数据库表
  • : 子查询目标数据库表
  • : 数据库表中字段。

  下面给出一段以SFLIGHT数据库表SPFLI数据库表为基准的示例代码,详细讲解了ABAP OPEN SQL中LIKE子句的应用,仅供参考:

SELECT * FROM sflight INTO TABLE @DATA(gt_sflight)WHERE CARRID IN ( SELECT CARRID FROM spfli WHERE connid = '0026'  ).LOOP AT gt_sflight INTO DATA(gs_sflight).WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-price.
ENDLOOP.

在这里插入图片描述


写在最后的话

  本文花费大量时间介绍了OPEN SQL中WHERE语句大全,希望能帮助到各位小伙伴,码文不易,还望各位大佬们多多支持哦,你们的支持是我最大的动力!

在这里插入图片描述

✨原创不易,还希望各位大佬支持一下\textcolor{blue}{原创不易,还希望各位大佬支持一下}原创不易,还希望各位大佬支持一下

👍 点赞,你的认可是我创作的动力!\textcolor{9c81c1}{点赞,你的认可是我创作的动力!}点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!\textcolor{ed7976}{收藏,你的青睐是我努力的方向!}收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!\textcolor{98c091}{评论,你的意见是我进步的财富!}评论,你的意见是我进步的财富!

相关内容

热门资讯

虚拟机使用AlmaLinux搭... 使用Parallels Desktop虚拟机运行 环境:AlmaLinux9.1 &#...
GMP理解 目录goroutine动态栈goroutine调度GOMAXPROCS为什么不直接将本地队列放在 M...
重磅解读:组建国家数据局,数据... “国务院关于提请审议国务院机构改革方案的议案,组建国家数据局,数据要素正...
ElasticSearch -... 文章目录1. 数据构造2. ElasticSearch 查询集群中所有索引中的所有文档3. Elas...
VSCode配置之OnnxRu... 背景 最近在尝试将Pytorch模型部署为Cmodel并讨论推理框架的速度优势,作为V...
金三银四互联网大厂最全1000... Java 面试 大家都知道,现在的 Java 面试是越来越难了!主要原因...
DW3000芯片SPI通信接口... SPI功能描述DW3000的主机接口是一个4线spi兼容的外围设备。SPI控制器(主机)断言SPIC...
儿童甲流高发,宝妈记住预防3部... 春天来了,儿童甲流的高发期也来了。根据国家流感监测中心的数据,流感病毒的...
基于Gin封装的Web框架如何... 在登陆系统中我们我们时常要去校验密码是否正确,而数据库中的密码是密文形式在Gin中我们...
PowerShell Inst... Python 前言 Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。Pytho...
突发!知名品牌所有门店关闭,年... 拖欠供应商货款、银行账户被冻结、通过贷款“续命”……曾经辉煌一时的“烘焙第一股”克莉丝汀࿰...
JAVASE/封装、继承、多态 博客制作不易,欢迎各位点赞👍+收藏⭐+关注前言在学习面...
Elasticsearch中索... 概要 由于历史原因,A产品数据入Es库中字段默认都是keyword并没有区分字段类型属...
4.网络层:数据平面 1.网络层概述网络中的每台主机和路由器之间都有一个网络层路由器具有截断的协议栈,没有网...
2023系统分析师-企业信息化... 一、信息化战略体系 1、信息资源规划ISP 信息资源规划是信息化建设的基础工程,是针对...
inverted_residu... 1. 线性BottleNect 线性瓶颈是在 MobileNetV2: Inverted Resid...
Apache DophinSc... 前言 本文通过定时调度Python的例子演示了Apache DophinScheduler 的基本操...
企业帮助文档搭建步骤 产品帮助文档是指一份或多份文件,用于帮助用户了解、学习和使用产品。产品帮助文档通常包括...
梦幻西游单机架设教程-端游篇 准备工具:GGE服务端客户端服务器源码废话不多说教程开始我们打开GEE双击打开ggem...
线性动态规划问题 文章目录1. 三角形中最小路径之和2. 最长递增子序列3. 最长公共子序列 1. 三角形中最小路径之...