• OPENSQL快速学习


    https://www.cnblogs.com/jiangzhengjun/p/4264698.html#_Toc410466920

    SELECT , INSERT ,UPDATE , DELETE , MODIFY

    SELECT SINGLE … INTO…WHERE/

    INNER JOIN ,LEFT OUTER JION 使用限制

    ON 后面的条件与WHERE条件类似,但是有以下不同
    
    • 1

    1.必需有ON条件语句,且多个条件之间只能使用AND连接
    2.在每个条件表达式中,两个操作数之中必需有一个字段是来自于JOIN右表
    3.如果是LEFT OUTER JOIN,则至少有一个条件表达式的两个操作数一个是来自于左表,一个时来自于右边
    4.不能使用NOT,LIKE,IN(但如果是INNER JOIN,则> , < , BETWEEN … AND , <> 都可以使用)
    5.如果是LEFT OUTER JOIN ,则只能使用等号操作符:( = , EQ)
    6.如果是LEFT OUTER JOIN ,同一右表不能多次出现在不同的LEFT OUTER JOIN的 ON条件表达式中
    7. LEFT OUTER JOIN 的右表所有字段不能出现在WHERE中
    8. 如果是LEFT OUTER JOIN, 则在同一个ON 条件语句中,只能与同一个左表进行关联。

    几个案例

    *销售订单数据
    SELECT vbeln,bstnk,kunnr,kvgr2			(vbeln为销售订单号,bstnk为客户参考号,kunnr为客户代号,kvgr2为品牌)
    		FROM vbak
    		FOR ALL ENTRIES IN @gt_so_inf
    		WHERE vbeln = @gt_so_inf_vbeln
    		INTO TABLE @DATA(lt_vbak).
    SORT lt_vbak BY vbeln.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    其中sort为排序的意思,以为lt_vak以vbeln为标准进行默认升序排序

    
    
    • 1

    For all entries in什么时候使用?
    答:
    1.对于不能join的表,使用for all entries in语句将数据库表域内表串联
    for all entries in 类似于外连接的时候,为避免多次重复数据库查询,用内表的某一字段为条件,从数据库表中取得数据,
    有一样的则选出,相当于过滤数据的作用
    2.检查内表是否为空,如果为空,将取得全部数据
    3.不能使用LIKE,BETWEEN 和IN(因为这些操作符都是不确定比较操作符(将选择条件设定在一个范围内))
    FOR ALL ENTRIES IN 语句的作用相当于将选择条件块全部并列开来。

    ABAP中FOR ALL ENTRIES IN 的使用指南
    在ABAP开发中,对于不能使用join的聚集表或者需要使用SELECT的内表,我们一般使用for all entries in 语句将该表与内表串联,查询出需要的数据,例如;以BSEG聚集表为例,如下:

    SELECT bseg~kunnr      bseg~lifnr    bseg~belnr   INTO  TABLE  itab_bseg  FROM  bseg  FOR ALL  ENTRIES IN itab_main
    WHERE bukrs  in_bukrs and (belnr = itab_main-belnr AND hkont = itab_main-hkont).
    
    • 1
    • 2

    由于BSEG不能和BSIS做inner join所以先将BSIS内容放到itab_main中,然后用FOR ALL ENTRIES IN 来串联

    OPENSQL学习

    1.SELECT语句
    INTO语句的结果不是保存到内表,是字段或者结构体的时候,最后要加ENDSELECT语句,这种语句相当于LOOP循环中执行SELECT语句,每取出一条数据,就把它追加到结构体中,一直读取全部符合条件的数据为止。

    *-------------使用结构体

    *使用的结构体,因此使用SELECT    ENDSELECT 语句
    DATA:	gs_zht6 TYPE STANDRAD TABLE OF ZHR_TRAIN_ZHT_1,
    			gs_zht7 TYPE ZHR_TRAIN_ZHT_1.
    
    			SELECT * INTO gs_zht7 FROM ZHR_TRAIN_ZHT_1
    				WHERE name EQ '周0'
    				WRITE : /gs_zht7-sex,
    							  /gs_zht7-te1.
    			ENDSELECT.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    *-------------使用内表

    *使用了内表一次性保存所有的值,因此不存在ENDSELECT.
    DATA: gs_zht9	TYPE STANDARD TABLE OF  ZHR_TRAIN_ZHT_1,
    			gs_zht8 	TYPE ZHR_TRAIN_ZHT_1.
    
    			SELECT *  INTO  TABLE gs_zht9 FROM ZHR_TRAIN_ZHT_1
    				WHERE name EQ '周0'.
    			
    			LOOP AT gs_zht9 INTO gs_zht8.
    			WRITE:	/gs_zht8-tel,
    							/gs_zht8-sex.
    			ENDLOOP.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    刘馨蔓:“她是行走的发光体”|OneFlow U
    使用net core 6 c# 的 NPOI 包,读取excel..xlsx单元格内的图片,并存储到指定服务器
    直接在 PI PO ESR 中编写 Java Mapping JAVA映射
    LeetCode952三部曲之三:再次优化(122ms -> 96ms,超51% -> 超91%)
    javascript 深浅拷贝
    菜鸡的秋招升级打怪之旅
    vue中web端播放rtsp视频流(摄像头监控视频)(海康威视录像机)
    数据规范化与数据离散化
    1330_硬件测试中的BCI测试
    Text-based diagram tool
  • 原文地址:https://blog.csdn.net/weixin_43847969/article/details/126035926