「SAP ABAP」OPEN SQL(八)【WHERE语句大全】
创始人
2025-05-30 12:47:37
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}{评论,你的意见是我进步的财富!}评论,你的意见是我进步的财富!

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...