目录结构:

contents structure [+]

1,Oracle中的内外连接

1.1,内连接

内连接就是符合条件的数据被选中,不符合条件的数据被过滤掉。

1.1.1 等值连接

先看看需要使用的表结构(在其它的例子中也可能被用上,其余代码也是):

 table name:s_emp
Name Description
------------------ -------------
ID 员工编号
LAST_NAME 名称
FIRST_NAME 姓氏
USERID 身份证号
START_DATE 开始时间
COMMENTS 评论内容
MANAGER_ID 上级编号
TITLE 标题
DEPT_ID 部门编号
SALARY 薪水
COMMISSION_PCT 提成

s_emp表(员工表)结构

 table name:s_dept
Name Description
------------------ -------------
ID 部门编号
NAME 部门名称
REGION_ID 地区编号

s_dept表(部门表)结构

显示每个员工的编号 姓氏 部门名称

select e.id,e.first_name,d.name
from s_emp e,s_dept d
--使用'='号表示等值连接
where e.dept_id=d.id;

1,1,2 非等值连接

 table name:salgrade
Name Description
------------------ -------------
GRADE 薪水级别
LOSAL 下区间
HISAL 上区间

salgrade表(薪水级别表)结构

显示每个员工的编号 姓氏 薪水 薪水级别

select e.id,e.first_name,e.salary,s.grade
from s_emp e,salgrade s
--也可以使用 where e.salary >= s.losal and e.salary <= s.hisal
where e.salary between losal and hisal;

1,1,3 自连接

显示所有领导的编号 姓氏

在s_emp表中,所有领导者的编号都出现在manager_id一栏,根据这一特点我们来进行如下分析:

所以代码如下:

select distinct m.id,m.first_name
from s_emp e,s_emp m
where e.manager_id=m.id;

1.2 外连接

1.2.1 外连接的特点

读者需要注意外连接和内连接不是完全对立的,它们的关系如下:

外连接的结果集=内连接的结果集+匹配不上的数据。

1,2,2 如何实现外连接

通过在字段后加上(+)来实现

(+)字段所在的表的对面表的数据全部被选中 。除此之外,内连接中被过滤的数据是通过NULL记录进行的匹配。

比如还是1,3,1的那个案例,我们已经求出了领导的编号,那么员工的信息又该怎么求呢?

经过分析我们只需要用外连接得到表中所有员工的信息,然后再减去领导的信息,得到的就是普通员工的信息了。

通过上面的动图我们可以看出,(+)字段对应表的全部数据都用null匹配出来了,因此内连接也可以通过外连接来表达,比如上面的1,3,1的案例也可以用如下的方式实现:

select distinct m.id,m.first_name
from s_emp e,s_emp m
--通过is not null筛选得到实际数据
where e.manager_id(+)=m.id and e.manager_id is not null;

这样也可以得出领导的信息。下面的代码,可以显示普通员工的信息(下面的代码和上面的代码恰好对立是相反的):

select distinct m.id,m.first_name
from s_emp e,s_emp m
where e.manager_id(+)=m.id and e.manager_id is null;

2,SQL99的内外连接

为了在各个数据库厂商之间取得更大的统一性,美国国家标准学会(American NationalStandards Institute,ANSI)于1986年发布了第一个SQL标准,并于1989年发布了第二个版本,该版本已经被广泛地采用。ANSI在1992年更新了SQL标准的版本,即SQL92和SQL2,并于1999年再次更新为SQL99和SQL3标准。在每一次更新中,ANSI都在SQL中添加了新特性,并在语言中集成了新的命令和功能。

Oracle的内外连接和SQL99的内外连接可以相互转化。

2.1 SQL99的内连接

内连接只有满足表连接条件的数据才会被选出。

语法格式:

        from    a表    join    b表   on 表的连接条件  where 过滤条件;
from a表 [inner] join b表 on 表的连接条件 where 过滤条件;

s_dept表结构:

s_dept表(部门表)结构

s_dept表数据:

s_region表结构:

table name:s_region
Name Description
------------------ -------------
ID 地区编号
NAME 地区名称

s_region(地区信息)表结构

s_region表数据:

下面是内部连接的代码:

select distinct d.id,d.name,r.name
from s_region r join s_dept d
on r.id=d.region_id;

结果如下,可以看出结果只有前12行数据被匹配出来:

下面这段代码和上面的一样:

select distinct d.id,d.name,r.name
from s_region r,s_dept d
where r.id=d.region_id;

2.2 SQL99的外连接

2.2.1 语法

from a表  left  [outer]  join   b表   on  表的连接条件    where  过滤条件;
from a表 right [outer] join b表 on 表的连接条件 where 过滤条件;
from a表 full [outer] join b表 on 表的连接条件 where 过滤条件;

left join 形式的连接称为左连接。

查询结果包含join左侧表中的所有记录以及右侧表满足条件的记录。也就是a表中的全部数据都会被匹配出来,b表中符合条件的数据才会被匹配出来。

right join 形式的连接称为右连接。

查询结果包含join右侧表中的所有记录以及左侧表中满足条件的记录。也就是b表中的全部数据都会被匹配出来,a表中符合条件的数据才会被匹配出来。

full join 形式的连接称为全连接。

查询结果包含join左侧和右侧的全部数据。也就是a表和b表的所有数据都会被匹配出来。

本文为博主原创文章,转载请注明出处。

【Oracle】Oracle的内外连接的更多相关文章

  1. oracle 内外连接,左连接,右连接 区别

    首先讲解一下 on 与where后面接的条件的区别 on和where条件的区别如下:1. on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录.2.where条件是在 ...

  2. 浅谈Oracle表之间各种连接

    Oracle表之间的连接分为三种: 1.内连接(自然连接) 2.外连接 2.1.左外连接(左边的表不加限制,查询出全部满足条件的结果) 2.2.右外连接(右边的表不加限制,查询出全部满足条件的结果) ...

  3. Tools下的mdscongiguer 文件中 43行 oracle 配置 发现需要连接库 -lclntsh libclntsh.so 库是个什么东西呢?

    Tools下的mdscongiguer     文件中 43行  oracle 配置      发现需要连接库 -lclntsh      libclntsh.so 库是个什么东西呢? 分想一个知乎网 ...

  4. Oracle 表三种连接方式(sql优化)

    在查看sql执行计划时,我们会发现表的连接方式有多种,本文对表的连接方式进行介绍以便更好看懂执行计划和理解sql执行原理. 一.连接方式: 嵌套循环(Nested Loops (NL)) (散列)哈希 ...

  5. 本地不安装oracle,PLsql远程连接

    Oracle的Instant client工具包可以很好地解决本地不安装oracle,PLsql远程连接. 1.首先到Oracle网站下载Instant Client : http://www.ora ...

  6. 【Oracle+PHP】php连接oracle设定字符集,避免乱码

    数据库用oracle,当php连接oracle的时候,最好指定字符集. 查PHP手册,oci_connect的第四个参数为charset,这是关键. 首先获取oracle的字符集,运行“select ...

  7. java oracle thin 和 oci 连接方式实现多数据库的故障切换

    java oracle thin 和 oci 连接方式实现多数据库的故障切换 一.thin方式 该种方式简便易用非经常见. 当中URL为 jdbc:oracle:thin:@(DESCRIPTION= ...

  8. ORACLE无法删除当前连接用户

    今天在做Oracle数据库是遇到ORACLE无法删除当前连接用户 ,经查找可用如下方法解决 . 在Oracle中删除用户时提示:ORACLE无法删除当前连接用户  可以用以下语句    Sql代码   ...

  9. oracle的本地远程连接和配置

    Oracle数据库的远程连接可以通过多种方式来实现,本文我们主要介绍四种远程连接的方法和注意事项,并通过示例来说明,接下来我们就开始介绍. 第一种情况: 若oracle服务器装在本机上,那就不多说了, ...

随机推荐

  1. "garbage at end of line" on Windows 10

      在windows 10上运行docker-machine scp myvm1 docker-compose.yml myvm1:~的时候报错: "garbage at end of li ...

  2. ASP入门(二十二)-连接数据库

    ADO 简介 在 ASP 中访问数据库使用的 ADO 组件. ADO 是一项微软的技术. ADO 指 ActiveX 数据对象(ActiveX Data Objects). ADO 是微软的 Acti ...

  3. OpenGL ES 3.0 图元组合和光栅化(三)

    图元是能够被OpenGL ES 绘制的几何物体,如三角形.线条或者精灵.在图元组合过程 中,对每个图元必须判断是否位于投影 截体内,如果图元不完全在平截体内部,将被视图平截体剪贴,如果完全在平截体外, ...

  4. 【Python】torrentParser1.02

    #------------------------------------------------------------------------------------ # torrentParse ...

  5. Dubbo-Fail to decode request due to: RpcInvocation

    使用Dubbo进行服务化,遇到如下错误: Caused by: com.alibaba.dubbo.remoting.RemotingException: Fail to decode request ...

  6. 五毛党可能要失业了,因为AI水军来了

    当AI已经开始写稿.唱歌.翻译文章.把语音转录为文字的时候,我们其实应该清醒的认识到,五毛党要消亡了. 相信大部分人和小编一样,现在只要出门吃饭,就会打开大众点评搜好吃的,看评分,看网友的评论.一般来 ...

  7. python数据结构与算法 29-1 哈希查找

    ).称为哈希查找. 要做到这种性能,我们要知道元素的可能位置.假设每一个元素就在他应该在的位置上,那么要查找的时候仅仅须要一次比較得到有没有的答案,但以下将会看到.不是这么回事. 到10. water ...

  8. ZH奶酪:PHP (爬虫)下载图片

    原文地址:http://www.phpfensi.com/php/20140107/1128.html 通过图片地地址把图片保存到本址,这里我们直接通过readfile读取然后通过fopen保存即可, ...

  9. NameNode的ZKFC机制

    转自: http://hackershell.cn/?p=821 NameNode的HA可以个人认为简单分为共享editLog机制和ZKFC对NameNode状态的控制 在此之前,我先提几个问题: 一 ...

  10. Android 在闹钟开机时,如何解决开机动画没有播完就进入Launcher M

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...