AS400 SQL 中的 JOIN不同关联类型小结

发布于 2022-09-05 00:50:59 字数 6042 浏览 16 评论 1

下面是 AS400  SQL 中的 JOIN不同关联类型小结和差异 提供大家参考,SQL虽然在AS400上性能不是最好的,的确有时候很有效方便使用,更详细请要参考AS400 SQL 红皮书

综述:SQL JOIN类型分INNER,LEFT,RIGHT,EXCEPTION,CROSS不同类似
举例的例子左表XQ05是定义指定LOC的权限,右表XI30是LOC的名称定义表:
WRKDBF工具中XQ05字段定义
Seq. Base PF    Field Name Field Description         Key Tp  Pos  Len Dec
1.0 XQ05       USR        User ID              1 A     1    10   
2.0            APP        Application            2 A    11     2   
3.0            FUN        Function              3 A    13    10   
4.0            CPY        Company code         4 A    23     4   
5.0            LOC        Location              5 A    27     4   
6.0            USRRGT     User right              A    31     6   
7.0            FILLER001                          A    37    12   
XI30字段定义:
Seq. Base PF    Field Name Field Description         Key Tp  Pos  Len Dec
1.0 XI30       LOC        Location                1 A     1     4   
2.0            INAIND     Inactive Indicator          A     5     1   
3.0            LOCNAM    Location name           A     6    30   

        INNER JOIN:LEFT左表关联RIGHT右表所有和右表match的记录。以LOC编号关联把左表LOC权限表中在当前在右表LOC定义表,把有的LOC都显示出来。若只在LEFT表中有记录的数据不会显示出来。
例子:
SELECT DISTINCT (XQ05.LOC),XI30.LOCNAM                        
FROM HZTDB/XQ05 INNER JOIN HZTDB01/XI30                       
ON XQ05.LOC =XI30.LOC WHERE CPY='01'                        
AND SUBSTRING(TRIM(USR),3,2)='AA'  AND XQ05.LOC NOT IN('*ALL')
运行结果显示;
Loc.  Location         
      Name              
AA     Hangzhou
AG     Hangzhou FengGS

        LEFT OUTER
把LEFT表无论是否记录在RIGHT表中存在都显示,若select中选择显示RIGHT表的字段,在LEFT表有值而RIGHT表中无对应值显示为空(结果若直接插入临时表会报错)
SQL例子:SELECT DISTINCT (XQ05.LOC),XI30.LOCNAM                        
FROM HZTDB/XQ05 left JOIN HZTDB01/XI30                        
ON XQ05.LOC =XI30.LOC WHERE CPY='01'                          
AND SUBSTRING(TRIM(USR),3,2)='AA'  AND XQ05.LOC NOT IN('*ALL')
运行结果(注意AY字段只在LEFT表中存在,显示右表Location Name值为空):
Loc.  Location         
      Name              
AA     Hangzhou
AG     Hangzhou FengGS
AY    -            
        RIGHT OUTER
RIGHT表无论是否记录在表LEFT中存在SELECT都显示。

        EXCEPTION
只显示LEFT表对于RIGHT表不MATCH匹配的ROW
例如:SELECT DISTINCT (XQ05.LOC),XI30.LOCNAM                        
FROM HZTDB/XQ05 EXCEPTION JOIN HZTDB01/XI30                  
ON XQ05.LOC =XI30.LOC WHERE CPY='01'                        
AND SUBSTRING(TRIM(USR),3,2)='AA'  AND XQ05.LOC NOT IN('*ALL')
运行结果(只显示那些在右表LOC定义表中已经被删除但在LEFT表LOC权限表中仍旧残留有记录的记录):
Loc.  Location              
      Name                  
AY    -                     

        CROSS
LEFT表和RIGHT表每条记录都做链接 ,等于是笛卡尔积。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

最终幸福 2022-09-05 04:00:31

顶个咯!用STRSQL就可以输入这些命令的....

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文