数据说明:

select * from dave;
ID  NAME
8 安庆
1 dave
2 bl
1 bl
2 dave
3 dba
4 sf-express
5 dmm
select * from b1;
ID  NAME
1 dave
2 bl
3 big bird
4 exc
9 怀宁

1. inner join(join)

   join默认为inner join.

以下3种写法的效果是一致的:

select * from dave a inner join b1 b on a.id = b.id;
select * from dave a join b1 b on a.id = b.id;
select * from dave a, b1 b where a.id = b.id;
ID  NAME      ID  NAME
1 dave 1 dave
2 bl 2 b1
1 bl 1 dave
2 dave 2 b1
3 dba 3 big bird
4 sf-express 4 exc

自然连接natural join

寻找数据类型和列名相同的字段,自动将他们连接起来,并返回所有符合条件的结果。

下面两种写法的效果是一致的:

select * from dave a natural join b1 b;
select a.id, b.name from dave a join b1 b on a.id = b.id and a.name = b.name;

ID  NAME
1 dave
2 bl

注意:1. 如果自然连接的两个表有多个字段满足相同名称和类型,则会作为自然链接的条件

   2. 如果数据类型不同,则会报错。

2. Outer join

LEFT JOIN /RIGHT JOIN/FULL JOIN. 通常省略OUTER。

(+)也可以用来表示外连接。

(一)+操作符只能在where子句中,不能与outer join同时使用。

(二)+操作符只能执行外连接,如果在where中包含多个条件,则所有条件都包含+操作符。

(三)+操作符只适用于列,而不能用在表达式上。

(四)+操作符不能与or in操作符一起使用。

(五)操作符只能用于实现左外连接和右外连接,不能用于全外连接。

2.1 左外连接left join +

+ 表示补充,哪个个表有加号,这个表就是匹配表。所以加号写在右表,左表就是全部显示,故是左连接。

以下三种写法的效果是一致的:

select * from dave a left join b1 b on a.id = b.id;
select * from dave a left outer join b1 b on a.id = b.id;
select * from dave a ,b1 b where a.id = b.id(+); ID  NAME     ID  NAME
1 bl       1 dave
1 dave    1 dave
3 dba     3 big bird
4 sf-express   4 exc
2 dave     2 bl
2 bl      2 bl
5 dmm   --没有匹配到,为null
8 安庆  --没有匹配到,为null

2.2 右外连接right join +

以下三种写法的效果是一致的:

select * from dave a right join b1 b on a.id = b.id;
select * from dave a right outer join b1 b on a.id = b.id;
select * from dave a ,b1 b where a.id(+) = b.id; ID NAME      ID NAME
1 dave     1 dave
2 bl       2 bl
1 bl       1 dave
2 dave      2   bl
3 dba      3 big bird
4 sf-express 4 exc
9 怀宁        --没有匹配到,为null

2.3 全外连接(full outer join/full join)

左表和右表都不做限制,所有的记录都显示,两表不足的地方用null填充。全外连接不支持(+)这种写法。

select * from dave a full join b1 b on a.id = b.id;

ID   NAME    ID  NAME
8 安庆   --NULL
1 dave       1 dave
2 bl         2 bl
1 bl         1 dave
2 dave       2 bl
3 dba      3 big bird
4 sf-express 4 exc
5 dmm --NULL
--NULL      9 怀宁

---------20161125补充内容:

insert into b1 values('','test');

insert into b1 values('','test02');

select * from dave left join b1 on dave.id = b1.id;
   ID    NAME          ID   NAME
1 bl        1 dave
1 dave       1   dave
2 dave       2 b1
2 bl        2 b1
3 dba        3 big bird
4 sf-express    4 exc
1 bl        1 test
1 dave        1 test
1 bl        1 test02
1 dave        1 test02
5 dmm null
8 安庆    null

ORACLE 各种连接的更多相关文章

  1. Oracle 左连接、右连接、全外连接、(+)号作用

    分类: Oracle Oracle  外连接 (1)左外连接 (左边的表不加限制)       (2)右外连接(右边的表不加限制)       (3)全外连接(左右两表都不加限制) 外连接(Outer ...

  2. ArcGis设置到 Oracle 的连接

    设置到 Oracle 的连接 地理数据 » 管理地理数据库 » Oracle 中的地理数据库 要建立从客户端计算机到 Oracle 数据库的连接,必须在客户端计算机上安装 Oracle 客户端应用程序 ...

  3. Oracle 左连接、右连接、全外连接、(+)号作用、inner join(等值连接) (转载)

    Oracle  外连接 (1)左外连接 (左边的表不加限制)       (2)右外连接(右边的表不加限制)       (3)全外连接(左右两表都不加限制) 外连接(Outer Join) oute ...

  4. [转]使用Navicat for Oracle工具连接oracle的

    使用Navicat for Oracle工具连接oracle的 这是一款oracle的客户端的图形化管理和开发工具,对于许多的数据库都有支持.之前用过 Navicat for sqlserver,感觉 ...

  5. Oracle 表连接方式分析 .

    一 引言 数据仓库技术是目前已知的比较成熟和被广泛采用的解决方案,用于整和电信运营企业内部所有分散的原始业务数据,并通过便捷有效的数据访问手段,可以支持企业内部不同部门,不同需求,不同层次的用户随时获 ...

  6. Oracle左连接、右连接、全外连接

    Oracle  外连接 (1)左外连接 (左边的表不加限制)(2)右外连接(右边的表不加限制)(3)全外连接(左右两表都不加限制) 外连接(Outer Join) outer join则会返回每个满足 ...

  7. oracle表连接------>排序合并连接(Merge Sort Join)

    排序合并连接 (Sort Merge Join)是一种两个表在做连接时用排序操作(Sort)和合并操作(Merge)来得到连接结果集的连接方法. 对于排序合并连接的优缺点及适用场景例如以下: a,通常 ...

  8. Oracle左连接、右连接、全外连接以及(+)号用法(转)

    +:与附带的字段相连,和“+”相连的字段值,不管是否存在,都会展示 也就是带上相连接的字段 有数据了就显示,没数据就显示为null Oracle  外连接(OUTER JOIN) 左外连接(左边的表不 ...

  9. Oracle左连接,右连接

    Oracle左连接,右连接 数据表的连接有: 1.内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现 2.外连接: 包括 (1)左外连接(左边的表不加限制) (2)右外连接(右边的表不加限制 ...

  10. 理解oracle中连接和会话

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp44 理解oracle中连接和会话 1.  概念不同:概念不同: 连接是指物 ...

随机推荐

  1. Spring Framework的核心:IOC容器的实现

    2.1   Spring IoC容器概述 2.1.1 IoC容器和依赖反转模式 依赖反转的要义,如果合作对象的引用或依赖关系的管理由具体对象来完成,会导致代码的高度耦合和可测性的降低.依赖控制反转的实 ...

  2. IntelliJ IDEA 14.x 与 Tomcat 集成,创建并运行Java Web项目

    转自:http://www.php-note.com/article/detail/854 IntelliJ IDEA 14.x 与 Tomcat 集成,创建并运行Java Web项目 作者:php- ...

  3. 关于ZendFramework环境的配置

    在运用PHP进行网站建设的时候,使用框架能够很好的提高编程效率,PHP语言的框架很多,现在普遍使用的是由Zend公司开发的ZendFramework框架,本篇文章是关于ZendFramework的运行 ...

  4. SQL数据库,使用事务执行增删改操作,给自己一个后悔的机会

    内容并不复杂,使用起来也比较简单. 主要使用以下3条SQL语句: 开始事物:BEGIN TRAN(全拼 TRANSACTION 亦可)提交事物:COMMIT TRAN回滚事务:ROLLBACK TRA ...

  5. aspnet Global文件概况

    <%@ Application Language="C#" %> <script runat="server">        void ...

  6. linux学习之九 学习过程总结

    ~写在前面 首先非常感谢孟老师的悉心讲解,使用这种新颖的教学方式(MOOC课堂+博客),也感到非常有幸随着老师的思路对linux的内核进行了初步的系统学习.结合代码和gdb调试工具跟踪分析对linux ...

  7. LR一个简单的流程

    1.录制脚本 2.回放脚本 :回放前的运行时设置:run_time_seting   F4 关联设置(动态值) 日志分析 3.脚本的增强: 添加事物(计时) 参数化(模拟真实的用户行为) 内容检查.回 ...

  8. hbase数据迁移-HDFS拷贝

    1.把数据表test从hbase下拷出 hdfs dfs -get /hbase/data/default/test /home/hadoop/hbase/test 2.文件放到新集群的系统上 scp ...

  9. C++ 之 class 的思考

    工作多年,突然发现c++这么多年都是零散记录了些自己对C++的反思,没有做过任何的文字记录表示遗憾. 看到很多小伙也都在写技术博客,那我自己也就写一写自己的一些 思考吧! C++的基本类这个东西,想必 ...

  10. spring注解 @Transactional

    一.@Transactional所需要的jar包 1.aopalliance.jar  这个包是AOP联盟的API包,里面包含了针对面向切面的接口.(通常Spring等其它具备动态织入功能的框架依赖此 ...