前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle的常见问题汇总(1)——​Oracle中的JOIN的整理和结构分析

Oracle的常见问题汇总(1)——​Oracle中的JOIN的整理和结构分析

作者头像
用户1257215
发布2018-01-30 10:14:45
7940
发布2018-01-30 10:14:45
举报
文章被收录于专栏:架构师之旅架构师之旅

oracle中的join的整理和结构分析

在Oracle中的join主要分为:

外连接(outter join),内连接(inner join),自身连接(self-join)

外连接(outter join)又分为左外连接(left outer join)、右外连接(right outer join)、全外连接(full outer join)。在sql语句(structured Query Language)是:table_1 left/right/full outer join table_2,通常我们省略outer。

下面利用一个例子说明数据库的外连接问题:

一:创建两张表out_join1 and out_join2并插入相应的数据:

Sql代码

  1. create table out_join1(
  2. id_1 varchar2(20),
  3. name_1 varchar2(25)
  4. )
  5. create table out_join2(
  6. id_2 varchar2(20),
  7. name_2 varchar2(25)
  8. )

Sql代码

  1. insert into out_join1 values('1','daniel');
  2. insert into out_join1 values('3','justin');
  3. insert into out_join1 values('5','william');
  4. insert into out_join1 values('6','demon');
  5. insert into out_join1 values('7','david');
  6. insert into out_join2 values('1','c_daniel');
  7. insert into out_join2 values('2','irs');
  8. insert into out_join2 values('3','c_justin');
  9. insert into out_join2 values('4','linda');
  10. insert into out_join2 values('5','c_william');

out_join1 & out_join2的数据如下:

左外连接(left outer join)

Sql代码

  1. select * from out_join1 left outer join out_join2 on out_join1.id_1=out_join2.id_2 -- 注意此处的on关键字
  2. select * from out_join1,out_join2 where out_join1.id_1=out_join2.id_2(+) --注意此处的where关键字和(+)符号

结果如下:

详细解释:

第一条查询语句和第二条查询语句的的意义是一样的,只是表达方式不同。table_1 left outer join table_2 on table_1.id = table_2.id,是以table_1的id号的index基础进行连接,table_2中有与table_1中id相同的进行配对。table_2中没有配对到的则null表示;

注意:由于此处的id具有unique所以不会出现一对多的关系,如果出现一对多的关系则显示结果会怎么样了。。

右外连接(right outer join)

Sql代码

  1. select * from out_join1 right outer join out_join2 on out_join1.id_1=out_join2.id_2
  2. select * from out_join1,out_join2 where out_join1.id_1(+)=out_join2.id_2

结果如下:

第一个条件查询的结果:

第二个条件查询的结果:

详细解释:

第一条查询语句和第二条查询语句的的意义是一样的,只是表达方式不同。table_1 right outer join table_2 on table_1.id = table_2.id,是以table_2的id号的index基础进行连接,table_1中有与table_2中id相同的进行配对。table_1中没有配对到的则null表示; 当然最后你会发现显示的结果的结构不相同,那是因为他们的查询的机理不同。

全外连接(full outer join)

Sql代码

  1. select * from out_join1 full join out_join2 on out_join1.id_1=out_join2.id_2

结果如下:

详细解释:

在full连接中按照以表table_1的id和table_2的id号为基础进行匹配....有的这连接在一起,没有的则null表示。table_1在前...

(+)的用法:

1.(+)操作符只能出现在where子句中,并且不能与outer join语法同时使用。 2. 当使用(+)操作符执行外连接时,如果在where子句中包含多个条件,必须在所有条件中包含(+)操作符 3.(+)操作符只适用于列,而不能用在表达式上。 4.(+)操作符不能与or和in操作符一起使用。 5.(+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。

内连接(inner join)

Sql代码

  1. select * from out_join1 inner join out_join2 on out_join1.id_1=out_join2.id_2

结果:

详细解释:

相同的属性值才显示,这里指的是tabel_1.id = table_2.id相同的显示

自身连接(self join)

Sql代码

  1. select * from out_join1 c1,out_join1 c2 where c1.id_1 = c2.id_1

结果如下:

自然连接(nature join)

Sql代码

  1. select * from out_join2,out_join1 where out_join2.id_2=out_join1.id_1

结果如下:

分析:同inner连接

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师之旅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档