目录结构:

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. Struts2之server端验证

    声明:在我的教程中有些东西,没有提及到.不是我不知道,而是在我个人来看对你们不是太重要的知识点.你们在看课本时有了解到即可.我不会面面俱到的都给你们提及.我写博文的目的是把我这一年的开发经验通过学习s ...

  2. Mongoose Connection best practice

    There is often quite a lot of confusion about how best to set up a database connection with Mongoose ...

  3. (纪录片)《星际穿越》中的科学 The Science of Interstellar

    简介: 导演: Gail Willumsen编剧: Gail Willumsen主演: 克里斯托弗·诺兰 / 乔纳森·诺兰 / 基普·索恩 / 马修·麦康纳类型: 纪录片 / 短片制片国家/地区: 美 ...

  4. 线程:主线程、子线程 同步线程、异步线程 单线程、多线程 System.Threading与System.Windows.Threading

    入门-------------------------------------------------------------------------------- 概述与概念    一个C#程序开始 ...

  5. uni-app - 支付(app支付、小程序支付、h5(微信端)支付)

    App支付.小程序支付.h5(微信端)支付 APP支付(内置) appPay.js /** * 5+App支付,仅支持支付宝以及微信支付 * * 支付宝Sdk集成,微信sdk未集成 * * @para ...

  6. vs2015使用Apache Cordova用JavaScript来访问本地设备的功能,比如摄像头、加速计

    看到下面这张图就代表着我VS2015 跨平台Moblie开发工具安装成功了. 上周安装成功后本想一睹跨平台开发的乐趣,可是一直找不到合适的入口.这周又来捯饬一下结果发现了一个入口.于是来写一个Hell ...

  7. 苹果电脑Macbook怎么编辑hosts文件的方法

        苹果电脑Macbook怎么编辑hosts文件的方法 https://jingyan.baidu.com/article/fec4bce2690417f2618d8b07.html     文章 ...

  8. 【leetcode】solution in java——Easy4

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6415011.html 16:Invert Binary Tree 此题:以根为对称轴,反转二叉树. 思路:看到 ...

  9. Oracle Data Integrator 12c----一致性 CDC(Consistent CDC)

    一致性 CDC 中引入了变化集的概念.一个变化集中可以包括多个相互存在关联关系(如主外键引用关系)的表.CDC 在捕获和发布一个变化集中的变化时能够保证数据的一致性.这个练习介绍如何使用能够保证一致性 ...

  10. java 日期工具类DateUtils

      日期工具类DateUtils CreateTime--2017年5月27日08:48:00Author:Marydon DateUtils.java-对日期类的进一步封装 import java. ...