SAP CDS view 里 Inner Join,Left Outer Join 和 Right Outer Join 的区别

简介: SAP CDS view 里 Inner Join,Left Outer Join 和 Right Outer Join 的区别

下图给出了 SAP CDS view Inner Join 和 Outer Join 的语法区别。

bdbdef9227f3ea7733473ddc2a196c59.png

SAP CDS (Core Data Services) 是一个用于定义和消费 SAP 服务器应用程序的语义数据模型的持久性数据层。它允许你在应用程序服务器上定义基于 SQL 的视图,从而可以在 ABAP 代码中使用这些视图。

在 SQL 中,JOIN 语句用于将两个或多个表的行组合在一起,基于这些表之间的共同字段之间的关系。在 SAP CDS 中,有三种主要的 JOIN 类型Inner JoinLeft Outer Join,和 Right Outer Join。它们的区别主要在于如何处理两个表中没有匹配的记录。


1、Inner JoinInner Join 仅返回两个表中有匹配的记录。如果存在任何没有匹配的记录,那么结果集中不会包含这些记录。例如,如果你有两个表,一个是员工表,另一个是部门表。如果你想找出所有有部门的员工,你可以使用 Inner Join 这两个表。

例子:

@AbapCatalog.sqlViewName: 'EMP_DEPT'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Employee and Department'
define view Emp_And_Dept as select from s_emp as Employee 
inner join s_dept as Department on Employee.dept_id = Department.id {
    Employee.id,
    Employee.name,
    Department.dept_name
}


在这个例子中,这个视图只会返回那些在员工表和部门表中都有记录的员工。换句话说,如果某个员工没有部门,那么这个员工就不会出现在结果集中。


2、Left Outer JoinLeft Outer Join 返回左表的所有记录,以及右表中与左表有匹配的记录。如果右表中没有匹配的记录,则结果集中将包含左表的所有记录,但右表的所有字段将为 NULL。使用上述员工和部门的例子,如果你想找出所有员工,无论他们是否有部门,你可以使用 Left Outer Join

例子:

@AbapCatalog.sqlViewName: 'EMP_DEPT_ALL'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'All Employees and their Departments'
define view Emp_And_Dept_All as select from s_emp as Employee 
left outer join s_dept as Department on Employee.dept_id = Department.id {
    Employee.id,
    Employee.name,
    Department.dept_name
}


在这个例子中,这个视图会返回所有员工,无论他们是否有部门。如果某个员工没有部门,那么这个员工的部门名称将为 NULL。


3、Right Outer JoinRight Outer Join 返回右表的所有记录,以及左表中与右表有匹配的记录。如果左表中没有匹配的记录,则结果集中将包含右表的所有记录,但左表的所有字段将为 NULL。继续使用上述的员工和部门的例子,如果你想找出所有部门,无论它们是否有员工,则使用右连接来实现这个功能。


再单独看一个右连接的例子。

假设我们有两个表:‘Orders’ 和 ‘Customers’。

表 ‘Customers’ 的结构如下:

Customers
+----+-------+
| ID | Name  |
+----+-------+
|  1 | John  |
|  2 | Jane  |
|  3 | Alice |
|  4 | Bob   |
+----+-------+

表 ‘Orders’ 的结构如下:

Orders
+-----+---------+
| ID  | OrderNo |
+-----+---------+
|  1  | 123     |
|  2  | 456     |
|  5  | 789     |
+-----+---------+


我们可以使用右连接 (Right Outer Join) 来合并这两个表。这会返回 ‘Orders’ 表中所有的记录,以及 ‘Customers’ 表中与之匹配的记录。如果在 ‘Customers’ 表中没有匹配的记录,结果将为 NULL。


SQL查询如下:

SELECT Customers.ID, Customers.Name, Orders.OrderNo
FROM Customers
RIGHT JOIN Orders
ON Customers.ID = Orders.ID;


查询结果如下:

+-----+-------+---------+
| ID  | Name  | OrderNo |
+-----+-------+---------+
|  1  | John  | 123     |
|  2  | Jane  | 456     |
| NULL| NULL  | 789     |
+-----+-------+---------+


在这个例子中,‘OrderNo’ 为 ‘789’ 的订单没有与之匹配的客户,所以 ‘ID’ 和 ‘Name’ 列的值为 NULL。

相关文章
|
24天前
|
Web App开发 开发者 存储
介绍一个 webp 格式转 png 格式的软件:XNConvert
介绍一个 webp 格式转 png 格式的软件:XNConvert
27 6
介绍一个 webp 格式转 png 格式的软件:XNConvert
|
24天前
|
数据库 存储 BI
SAP ABAP CDS View 源代码存储的数据库表揭秘和其他相关数据库表介绍试读版
SAP ABAP CDS View 源代码存储的数据库表揭秘和其他相关数据库表介绍试读版
12 0
SAP ABAP CDS View 源代码存储的数据库表揭秘和其他相关数据库表介绍试读版
|
24天前
|
数据库
迈入 SAP CDS View 世界的前置知识 - SAP ABAP 数据库视图介绍试读版
迈入 SAP CDS View 世界的前置知识 - SAP ABAP 数据库视图介绍试读版
10 0
迈入 SAP CDS View 世界的前置知识 - SAP ABAP 数据库视图介绍试读版
|
24天前
|
数据库 SQL 应用服务中间件
SAP ABAP CDS View 和 HANA CDS View 相同点和不同点辨析
SAP ABAP CDS View 和 HANA CDS View 相同点和不同点辨析
22 0
SAP ABAP CDS View 和 HANA CDS View 相同点和不同点辨析
|
1月前
|
前端开发 搜索推荐 开发者
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
27 0
|
1月前
|
JavaScript 前端开发 开发者
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
SAP UI5 控件 sap.m.ListBase 的 inset 属性的作用介绍
15 0
|
1月前
|
Web App开发 数据采集 前端开发
纯技术讨论:如何让 SAP UI5 应用无法被别人在浏览器里调试 - 这种做法不推荐试读版
纯技术讨论:如何让 SAP UI5 应用无法被别人在浏览器里调试 - 这种做法不推荐试读版
15 0
|
1月前
|
XML 存储 数据格式
SAP UI5 控件 customData 属性的应用介绍
SAP UI5 控件 customData 属性的应用介绍
33 0
|
1月前
|
前端开发 JavaScript API
SAP UI5 sap.ui.require.toUrl 的作用介绍
SAP UI5 sap.ui.require.toUrl 的作用介绍
31 0
|
1月前
|
搜索推荐
如何让 SAP UI5 Smart Table 支持多项选择(Multiple-Selection)试读版
如何让 SAP UI5 Smart Table 支持多项选择(Multiple-Selection)试读版
18 0