文档章节

Oracle---->Join

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

最近使用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特殊的写法,这两种写法在某些场景下会有差异,推荐使用标准写法,这里只是介绍表连接标准语法及了解oracle的特殊写法。 标准连接语法: select t...

天黑顺路 ⋅ 2017/10/24 ⋅ 0

Oracle左右全连接总结

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

yl497103815 ⋅ 2014/09/11 ⋅ 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 ⋅ 0

[转]Oracle 加号外连接

今天在一段oracle的sql语句中看到这样的写法。 SELECT FROM WHERE ** AND r1.attribute13 = h1.employee_num(+) 最后面出现了小括号中间放一个加号的写法,oracle用的时候不长,不知道这是啥...

王二铁 ⋅ 2011/10/26 ⋅ 0

oracle 外连接(+)

Outer Joins An outer join extends the result of a simple join. An outer join returns all rows that satisfy the join condition and also returns some or all of those rows from one......

Oscarfff ⋅ 2016/05/16 ⋅ 0

Oracle sql优化必知——表的访问

《访问数据的方法》 访问表中的数据有两种:1、直接访问表 2、先访问索引,再回表 1、直接访问表的两种方法: ①、全表扫描 全表扫描是指Oracle在访问目标表的数据时,会从该表所占用的第一个...

一个笨小孩 ⋅ 2017/08/03 ⋅ 0

笔记:Python进行数据库文件导出备份

示范环境: centos 6.4系统,oracle数据库服务器:192.168.1.112;用户/口令:ora/oracle ftp文件备份服务器:192.168.1.113;用户/口令:databak/databak #!/usr/bin/python #coding=utf-8...

youway ⋅ 2015/12/08 ⋅ 0

SQL优化常用方法40

ORACLE内部操作 当执行查询时,ORACLE采用了内部的操作. 下表显示了几种重要的内部操作. ORACLE Clause 内部操作 ORDER BY SORT ORDER BY UNION UNION-ALL MINUS MINUS INTERSECT INTERSECT D...

inzaghi1984 ⋅ 2017/12/16 ⋅ 0

Oracle数据库学习的福利来啦——最佳入门经验分享

适用人群:从事数据库技术实施或售后工程师,准备参加OCA,OCP认证考试 通过学习对Oracle数据库的相关基础知识进行梳理,最终共同提炼出必须最先掌握的那部分知识,无论你是数据库开发、管理、...

让往事随风 ⋅ 2016/04/13 ⋅ 0

sunkaixuan/SqlSugar_ORM_4.0

SqlSugar 4.X API In addition to EF, the most powerful ORM Contactinfomation Email:610262374@qq.com QQ Group:225982985 Nuget Install-Package sqlSugar (MySql、SqlServer、Sqlite、O......

sunkaixuan ⋅ 2017/10/25 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

到底会改名吗?微软GVFS 改名之争

微软去年透露了 Git Virtual File System(GVFS)项目,GVFS 是 Git 版本控制系统的一个开源插件,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。该项目公布之初就引发了争...

linux-tao ⋅ 34分钟前 ⋅ 0

笔试题之Java基础部分【简】【二】

1.静态变量和实例变量的区别 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变...

anlve ⋅ 51分钟前 ⋅ 0

Lombok简单介绍及使用

官网 通过简单注解来精简代码达到消除冗长代码的目的 优点 提高编程效率 使代码更简洁 消除冗长代码 避免修改字段名字时忘记修改方法名 4.idea中安装lombnok pom.xml引入 <dependency> <grou...

to_ln ⋅ 今天 ⋅ 0

【转】JS浮点数运算Bug的解决办法

37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎...

NickSoki ⋅ 今天 ⋅ 0

table eg

user_id user_name full_name 1 zhangsan 张三 2 lisi 李四 `` ™ [========] 2018-06-18 09:42:06 星期一½ gdsgagagagdsgasgagadsgdasgagsa...

qwfys ⋅ 今天 ⋅ 0

一个有趣的Java问题

先来看看源码: public class TestDemo { public static void main(String[] args) { Integer a = 10; Integer b = 20; swap(a, b); System.out......

linxyz ⋅ 今天 ⋅ 0

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 今天 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 9

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部