Skip to content
久久日记本
曾经年少爱追梦,一心只想往前飞
  • 首页
  • 博客
    • 博客历史
    • 主题
    • 个人文集
  • 关于
    • 正在读的书
    • 作品归档
    • 2018作品归档
    • 联系我
  • 友情链接
  • 留言板
❄
❅
❆
❄
❅
❆
❄
❅
❆
❄
DB

oracle外连接中左.右.全连接的区别

Posted on 2013年4月27日 by 九九 / 1286 Views

本文目录

目录

*1.定义

*2.为什么要用外连接

*3.什么时候会用到外连接

*4.外连接两边都能用么

*5.例子:左右连接的查询结果对比

*6.Oracle使用外连接和自连接

1.定义

Oracle语句:

from join_table join_type join_table
[ON (join_condition)]

oin_table:参与连接的表名
ioin_tyoe:连接方式

包括 3 种:

内连接:  
(1)等值连接:
(2)自然连接:等值连接去掉重复的行即为自然连接
(3)不等连接:用不等号查询,包括>,>=等

外连接:
(1)左外连接(left outer join或left join);返回结果中除了满足连接条件,还包括join左侧表的所有行;
(2)右外连接(right outer join或right join);
(3)全外连接(full outer join或full join);

外连接会列出 左表(左外连接),右表(右外连接),或者两个表(全外连接) 中所有符合搜索条件的数据行.

交叉连接: 
(cross join)没有where子句,返回表中所有数据行的笛卡尔积.  
2.为什么要用外连接

 内连接时,返回的查询结果集中仅包括符合查询条件(where 搜索条件 或 having条件)和连接条件的行.

内连接消除与另一个表中的任何行不匹配的行,而外连接扩展了内连接的结果,除返回所有匹配的行外,还会返回一部分或全部不匹配的行,这主要取决于外连接的种类.

3.什么时候会用到外连接

例如:

信息分类存储,例如员工信息表,其对应的每个月的工资领取情况在另一张表中,,这个时候需要外连接进行表关联.

如果要用内连接查询,那么可能 一部分没有领取 工资的员工相关信息就会被剔除,但是我们想要得到员工的工资领取情况,意思就是可以从查询结果中看到哪些没有领取,哪些员工已经结算.这样,就必须用外连接了.

4.外连接两边都能用么
5.例子:左右连接的查询结果对比

使用工具:SQL Navigator 3+Oracle 8.0

创建语文成绩表:

create table testyw--语文成绩表
(
    id number,
    name varchar(40),
    scoreyw number
)

创建数学成绩表:

create table testsx--数学成绩表
(
    id number,
    name varchar2(40),
    scoresx number
)

逐行插入语句

insert into testyw values(201,'小麦',87)
insert into testyw values(202,'小白',98)
insert into testyw values(203,'小黑',82)
insert into testsx values(202,'小白',81)
insert into testsx values(203,'小黑',67)

插入结束之后查询两表信息如下:

select * from testyw--语文成绩表

select * from testsx--数学成绩表

对表进行查询:

左(外)连接查询结果:

select * from testyw y left join testsx s on(y.id=s.id)
--或者
select * from testyw y,testsx s where y.id=s.id(+)
--"(+)"所在位置的另一侧为连接的方向.
--左连接说明等号左侧的所有 记录均会被显示,无论其在右侧是否得到匹配。

右(外)连接查询结果:

select * from testyw y right join testsx s on(y.id=s.id)
--或者
select * from testyw y,testsx s where y.id(+)=s.id
--"(+)"所在位置的另一侧为连接的方向.
--右连接说明等号右侧的所有 记录均会被显示,无论其在左侧是否得到匹配。

全连接查询结果:

select * from testyw y full join testsx s on(y.id=s.id)
--记住,全连接可不能像左右连接一样左右带"(+)",这里只有一种写法.

6.Oracle使用外连接和自连接

经常早查询语句中用到这样的连接有点小问题,所以特意查了一下资料归纳一下:

外连接比较容易理解,

A、一般在某些分类编码中使用,例如你有一张员工信息表,其中的职位信息是个代码,而这个代码对应的含义在 职位 表中描述

B、信息分类存储,例如上述的员工信息表,其对应的每个月的工资情况在领一张表中,这个时候需要外连接进行表关联

外连接的关联字段一般在数据类型和名称上相同或者相似,你可以这么写 from a left join b on a.id = b.id

自连接比较特殊,一般反映记录的上下级关系,例如员工信息表中会有一个字段:上级领导,这个字段对应的上级其实也是一个员工,这个员工信息就是通过自连接进行查找的
自连接一般要求在表中有一个特殊的字段,连接时要注意 例如 from a tab1 left join a tab2 on tab1.up_id = tab2.id

Oracle
九九
过去的我们,现在的自己,往事,终会随风而逝。 View all posts by 九九 →

Post navigation

Older post
String length constraints must be in range (1 .. 32767)
Newer post
document.getElementById为空或不是对象的解决方法

标签云

Android ASP.NET Baby C# C/C++ CSS Div DX11 flask front-end GAE Git Java JJProject JS Life MSSQL MVC OpenSource Oracle Python React React-Native Software Tools Vue Webpack Website Window WP7 乱记 十年旧梦 天气 宝宝成长日记 小说 工作 情感 故障 散文 日记 游戏开发 网新实训笔记 花落梧桐 诗间集 转载

时光机

  • 2023年2月
  • 2022年12月
  • 2022年4月
  • 2022年3月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年5月
  • 2019年12月
  • 2019年10月
  • 2019年9月
  • 2019年6月
  • 2019年5月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年3月
  • 2018年2月
  • 2018年1月
  • 2017年11月
  • 2017年10月
  • 2017年9月
  • 2017年7月
  • 2017年3月
  • 2017年1月
  • 2016年12月
  • 2016年11月
  • 2016年10月
  • 2016年7月
  • 2016年3月
  • 2016年2月
  • 2016年1月
  • 2015年12月
  • 2015年11月
  • 2015年10月
  • 2015年9月
  • 2015年8月
  • 2015年7月
  • 2015年4月
  • 2015年3月
  • 2015年2月
  • 2015年1月
  • 2014年12月
  • 2014年11月
  • 2014年10月
  • 2014年9月
  • 2014年8月
  • 2014年7月
  • 2014年6月
  • 2014年5月
  • 2014年4月
  • 2014年3月
  • 2014年2月
  • 2014年1月
  • 2013年12月
  • 2013年11月
  • 2013年10月
  • 2013年9月
  • 2013年8月
  • 2013年7月
  • 2013年6月
  • 2013年5月
  • 2013年4月
  • 2013年3月
  • 2013年1月
  • 2012年11月
  • 2012年10月
  • 2012年9月
  • 2012年8月
  • 2012年7月
  • 2012年6月
  • 2012年5月
  • 2012年4月
  • 2012年3月
  • 2012年2月
  • 2012年1月
  • 2011年12月
  • 2011年11月
  • 2011年10月
  • 2011年9月
  • 2011年8月
  • 2011年6月
  • 2011年5月
  • 2011年4月
  • 2011年3月
  • 2011年2月
  • 2010年12月
  • 2010年11月
  • 2010年10月
  • 2010年9月
  • 2010年8月
  • 2010年6月
  • 2010年5月
  • 2010年2月
  • 2010年1月
  • 2009年12月
  • 2009年11月
  • 2009年10月
  • 2009年9月
  • 2009年8月
  • 2009年7月
  • 2009年6月
  • 2009年5月
  • 2009年4月
  • 2009年3月
  • 2009年2月
  • 2009年1月
  • 2008年8月
  • 2008年6月
  • 2008年5月
  • 2008年4月
  • 2008年2月
  • 2007年11月
  • 2007年8月
  • 2007年6月
  • 2007年5月
  • 2007年4月
  • 2007年3月
  • 2007年2月
  • 2007年1月
  • 2006年10月
  • 2006年8月
© 2006 - 2023 久久日记本
Powered by WordPress | Theme: Graphy for 99diary