文档章节

Oracle---->Join

小强斋太
 小强斋太
发布于 2016/11/09 20:06
字数 882
阅读 0
收藏 0

精选30+云产品,助力企业轻松上云!>>>

最近使用ODI,其中有一个JOIN组件涉及到常见的几种JOIN类型,因此整理了下交叉连接和自然连接的区别.

image

一、概述

两个表的连接,是通过将一个表中的一列或者多列同另一个表中的列链接而建立起来的。用来连接两张表的表达式组成了连接条件。当连接成功后,第二张表中的数据就同第一张表连接起来了,并形成了复合结果集

二、连接类型及例子

有4种基本类型的连接,inner,outer,natural,cross连接

2.1内连接 inner join =join

内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。

----- 内连接
SELECT * FROM A INNER JOIN B ON A.PERSON_ID= B.PERSON_ID;

clip_image001

2.2外连接 (outer join)

外连接,返回到查询结果集合中不仅包含符合连接条件的行,而且还包括左表(左外连接或左连接))、右表(右外连接或右连接)或两个边接表(全外连接)中的所有数据行。

1. left join(左联接)等价于(left outer join) 返回包括左表中的所有记录和右表中联结字段相等的记录;

-左连接
SELECT * FROM A LEFT JOIN B ON A.PERSON_ID= B.PERSON_ID;

--Oracle9i以前版本中左连接的写法如下:
SELECT * FROM A , B where A.PERSON_ID= B.PERSON_ID(+);

clip_image002

2. right join(右联接)等价于(right outer join)返回包括右表中的所有记录和左表中联结字段相等的记录;

---外连接种的右连接
SELECT * FROM A RIGHT JOIN B ON A.PERSON_ID= B.PERSON_ID;

---Oracle9i以前版本中左连接的写法如下:
SELECT * FROM A , B where A.PERSON_ID(+)= B.PERSON_ID;

clip_image003

3. full join (全连接)等价于(full outer join)查询结果等于左外连接和右外连接的和

----Full Join
SELECT * FROM A FULL JOIN B ON A.PERSON_ID= B.PERSON_ID;

clip_image004

2.3自然连接(natural join

自然连接是在广义笛卡尔积R×S中选出同名属性上符合相等条件元组,再进行投影,去掉重复的同名属性,组成新的关系。即自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件按的结果。自然连接不包含重复的属性. 自然连接是通过对参与表关系中所有同名的属性对取等(即相等比较)来完成的,故无须自己添加连接条件

SELECT A.PERSON_ID FROM A NATURAL JOIN B ;

SQL 错误: ORA-25155: NATURAL 联接中使用的列不能有限定词

----自然连接
SELECT * FROM A NATURAL JOIN B ;

clip_image005

2.4交叉连接(cross join)

交叉连接不带ON子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

---交叉连接
SELECT * FROM A CROSS JOIN B ;

clip_image006

附:

CREATE TABLE "SCOTT"."A" (
"PERSON_ID" NUMBER(5) NULL ,
"PERSON_NAME" VARCHAR2(255 BYTE) NULL 
)
;

-- ----------------------------
-- Records of A
-- ----------------------------
INSERT INTO "SCOTT"."A" VALUES ('1', '张三');
INSERT INTO "SCOTT"."A" VALUES ('2', '李四');
INSERT INTO "SCOTT"."A" VALUES ('3', '王五');
INSERT INTO "SCOTT"."A" VALUES ('4', '赵六');
INSERT INTO "SCOTT"."A" VALUES ('5', '周七');


CREATE TABLE "SCOTT"."B" (
"PERSON_ID" NUMBER(5) NULL ,
"LOVE_FRUIT" VARCHAR2(255 BYTE) NULL 
);

-- ----------------------------
-- Records of B
-- ----------------------------
INSERT INTO "SCOTT"."B" VALUES ('1', '香蕉');
INSERT INTO "SCOTT"."B" VALUES ('2', '苹果');
INSERT INTO "SCOTT"."B" VALUES ('3', '橘子');
INSERT INTO "SCOTT"."B" VALUES ('4', '');
INSERT INTO "SCOTT"."B" VALUES ('8', '');
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
私信 提问
加载中
请先登录后再评论。
Oracle左右全连接总结

Oracle左右全连接总结 如何用Oracle RATIOTO_REPORT计算总数百分比 Oracle 外连接和 (+)号的用法 2010-04-18 00:35:07| 分类: Oracle学习笔记|举报|字号 订阅 转自:http://www.cnblogs....

yl497103815
2018/07/02
0
0
oracle 表连接特有写法与标准写法

oracle里表连接支持标准写法,但也有oracle特殊的写法,这两种写法在某些场景下会有差异,推荐使用标准写法,这里只是介绍表连接标准语法及了解oracle的特殊写法。 标准连接语法: select t...

天黑顺路
2017/10/24
0
0
Oracle左右全连接总结

Oracle左右全连接总结 如何用Oracle RATIOTO_REPORT计算总数百分比 Oracle 外连接和 (+)号的用法 2010-04-18 00:35:07| 分类: Oracle学习笔记|举报|字号 订阅 转自:http://www.cnblogs....

yl497103815
2014/09/11
0
0
oracle的left join,right join和full join的一点介绍

以下是摘自oracle ocp9i文档: outer join syntax: 1)you use an outer join to also see rows that do not meet the join condition 2)the outer join operator is the plus sign(+) outer ......

长平狐
2012/09/19
144
0
oracle db2命令对比(整理中)

1).如何取一表前n笔记录的Oracle和DB2的写法 Oracle: select from table_a where rownum<=100; DB2: select from table_a fetch first 100 rows only; 2).如何取得当前日期的Oracle和DB2的......

cyper
2014/04/22
30
0

没有更多内容

加载失败,请刷新页面

加载更多

在Python中从字符串转换为布尔值? - Converting from a string to boolean in Python?

问题: Does anyone know how to do convert from a string to a boolean in Python? 有谁知道如何在Python中从字符串转换为布尔值? I found this link . 我找到了此链接 。 But it doesn't......

javail
今天
19
0
中国饭店协会数据表明

记者了解到,中国饭店协会数据表明,2018年全国餐饮收入42716亿元,同比增长9.5%.根据国家统计局数据显示,截至2017年底,限额以上餐饮行业的从业人数达到2232万人,巨大的餐饮市场背后,餐饮行业的...

asd369
今天
35
0
OSChina 周六乱弹 —— 日本的丧尸光天化日之下都开始……

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《風の手枕》- 増田俊郎 手机党少年们想听歌,请使劲儿戳(这里) @码界农民工 :...

小小编辑
今天
49
0
Hacker News 简讯 2020-07-11

更新时间: 2020-07-11 03:01 The TikTok app is no longer permitted on mobile devices that access Amazon email - (twitter.com) TikTok应用程序不再允许在访问亚马逊电子邮件的移动设备上......

FalconChen
今天
161
0
是否有可能从另一个git存储库中挑选一个提交? - Is it possible to cherry-pick a commit from another git repository?

问题: I'm working with a git repository that needs a commit from another git repository that knows nothing of the first. 我正在使用一个git存储库,需要从另一个不知道第一个存储库......

技术盛宴
昨天
35
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部