4.CDS VIEW 链接查询

目录

一、内链接

二、外连接

三、嵌套JOIN

四、UNION和UNION ALL


 

为了进行测试我在SAP GUI中新建了两张测试表内容如下:

一、内链接

JOIN或INNER JOIN

JOIN和INNER JOIN是完全等价的,区别在于INNER JOIN是显式写法,JOIN是隐式写法

结果取链接两表的交集

例子:

define view ZDEMO_CDS_01  // ABAP 程序里使用的名字
as select from ztcds_sql1 as a
join ztcds_sql2 as b
on a.id = b.id
{

    a.id as a_Id,
    a.name as Name,
    b.cid as Cid,
    b.cname as Cname,
    b.id as b_Id
    
}

运行结果:

二、外连接

1.LEFT JOIN 或者 LEFT OUTER JOIN

区别同上,值得注意的是CDS 只能使用LEFT OUTER JOIN

返回结果为左表全数据,与右表数据进行匹配,未匹配到则为空

例子:

define view ZDEMO_CDS_01  // ABAP 程序里使用的名字
as select from ztcds_sql1 as a
left outer join ztcds_sql2 as b
on a.id = b.id
{

    a.id as a_Id,
    a.name as Name,
    b.cid as Cid,
    b.cname as Cname,
    b.id as b_Id
    
}

运行结果:

 2.RIGHT JOIN 或 RIGHT OUTER JOIN

区别同上,值得注意的是CDS 只能使用RIGHT OUTER JOIN

返回结果为右表全数据,与左表数据进行匹配,未匹配到则为空

例子:

define view ZDEMO_CDS_01  // ABAP 程序里使用的名字
as select from ztcds_sql1 as a
right outer join ztcds_sql2 as b
on a.id = b.id
{

    a.id as a_Id,
    a.name as Name,
    b.cid as Cid,
    b.cname as Cname,
    b.id as b_Id
    
}

 运行结果:

3.FULL OUTER JOIN

CDS VIEW不能使用,不写了

4.CROSS JOIN

每一条数据都会与另外表的所有数据进行连接

注意:使用CROSS JOIN时无法使用ON指定连接条件

例子:

define view ZDEMO_CDS_01  // ABAP 程序里使用的名字
as select from ztcds_sql1 as a
cross join ztcds_sql2 as b
{

    a.id as a_Id,
    a.name as Name,
    b.cid as Cid,
    b.cname as Cname,
    b.id as b_Id
    
}

运行结果:

三、嵌套JOIN

1.明确的嵌套(SAP推荐的写法,可读性好)

例子:

define view ZDEMO_CDS_01  // ABAP 程序里使用的名字
as select from scarr as a
left outer join( sairport as p
                 left outer join scounter as c
                 on p.id = c.airport )
on a.carrid = c.carrid
{
    a.carrid,
    p.id,
    c.countnum
}

运行结果:

嵌套执行的顺序:先执行括号最里面的,也就是说P和C先链接,再与A链接

2.模糊嵌套(不推荐,可读性差)

例子:

define view ZDEMO_CDS_01  // ABAP 程序里使用的名字
as select from scarr as a
left outer join sairport as p
left outer join scounter as c
    on p.id = c.airport
    on a.carrid = c.carrid
{
    a.carrid,
    p.id,
    c.countnum
}

 运行结果:

嵌套的执行顺序:ON出现的顺序,上面先出现ON P.ID = C.AIRPORT

所以P和C先链接,再与A链接

四、UNION和UNION ALL

1.UNION

把两个结果集的行上下堆在一起,并去除重复的行

注意:

1)上下两个结果集的列的类型要可兼容

2)取的列数量要一样,名字要相同(可以取别名)

3)可以用别名,检索不同的字段

UNION后的结果集属性:

1)列的名字、类型与第一个集一致

2)KEY与第一个结果集,忽略第二个结果集

注意:如果第二个结果集的类型是char(20),而第一个结果集的类型是char(10),则最后结果集的类型是char(10),多余的会被截断

2.UNION ALL

与UNION相同,区别在于不去除重复行

例子:

define view ZDEMO_CDS_01  // ABAP 程序里使用的名字
as select from scustom 
{
    id,
    'Customer' as type,
    name,
    city,
    country
} where country = 'DE' 
  and id between '00000090' and '00000100'
union
select from stravelag 
{
    agencynum as id,
    'Agencyaaaaaa' as type,
    name,
    city,
    country
} where country = 'DE'
  and agencynum < '00000100'

运行结果:

 


3.CDS VIEW中的表达式

5.带输入参数的CDS VIEW

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ABAP小码奴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值