Oracle中的连接可分为,内连接(INNER JOIN)、外连接(OUTER JOIN)、全连接(FULL JOIN),不光是 Oracle,其他很多的数据库也都有这3种连接查询方式。

Oracle 外连接(OUTER JOIN),又分为左外连接和右外连接,即左连接和右连接。

左外连接 LEFT OUTER JOIN == 左连接 LEFT JOIN(左边的表不加限制)

右外连接 RIGHT OUTER JOIN == 右连接 RIGHT JOIN(右边的表不加限制)

全外连接 FULL OUTER JOIN == 全连接 FULL JOIN(左右两表都不加限制)

注意:通常写 SQL 的时候会省略 OUTER 关键字。

在左连接和右连接时都会以一张 A 表为基础表,该表的内容会全部显示,然后加上 A 表和 B 表匹配的内容。 如果 A 表的数据在 B 表中没有记录。 那么在相关联的结果集行中列显示为空值(NULL)。

对于外连接,也可以使用 "(+)" 操作符来表示。使用时的一些注意事项:

1. 操作符只能出现在 WHERE 子句中,并且不能与 OUTER JOIN 语法同时使用;

2. 操作符执行外连接时,如果在 WHERE 子句中包含有多个条件,则必须在所有条件中都包含 (+) 操作符;

3. 操作符只适用于列,而不能用在表达式上;

4. 操作符不能与 OR 和 IN 操作符一起使用;

5. 操作符只能用于实现左外连接和右外连接,而不能用于实现全外连接;

SELECT * FROM t_A;

SELECT * FROM t_B;

左外连接,又名左连接(OUTER LEFT JOIN / LEFT JOIN)

LEFT JOIN 是以左表的记录为基础的,t_A 可以看成左表,t_B 可以看成右表,它的结果集是 t_A 表中的全部数据,再加上 t_A 表和 t_B 表匹配后的数据。换句话说,左表 t_A 的记录将会全部表示出来,

而右表 t_B 只会显示符合搜索条件的记录。t_B 表记录不足的地方均为 NULL。

SELECT * FROM t_A a LEFT JOIN t_B b ON a.id = b.id;

或 SELECT * FROM t_A a LEFT OUTER JOIN t_B b ON a.id = b.id;

用 (+) 来实现,这个 + 号可以这样来理解:+ 表示补充,即哪个表有加号,这个表就是匹配表。如果加号写在右表,左表就是全部显示,所以是左连接。

SELECT * FROM t_A a,t_B b WHERE a.id=b.id(+);

右外连接,又名右连接(RIGHT OUTER JOIN / RIGHT JOIN)

和 LEFT JOIN 的结果刚好相反,是以右表 t_B 为基础的。它的结果集是 t_B 表所有记录,再加上 t_A 和 t_B 匹配后的数据。 t_A 表记录不足的地方均为 NULL。

SELECT * FROM t_A a RIGHT JOIN t_B b ON a.id = b.id;

或 SELECT * FROM t_A a RIGHT OUTER JOIN t_B b ON a.id = b.id;

用 (+) 来实现,这个 + 号可以这样来理解: + 表示补充,即哪个表有加号,这个表就是匹配表。如果加号写在左表,右表就是全部显示,所以是右连接。

SELECT * FROM t_A a,t_B b WHERE a.id(+)=b.id;

全外连接,又名全连接(FULL OUTER JOIN / FULL JOIN)

左表和右表都不做限制,所有的记录都显示,两表不足的地方均为 NULL。 全外连接不支持 (+) 写法。

以 id 为限制的用法:

SELECT * FROM t_A a FULL JOIN t_B b ON a.id = b.id;

或 SELECT * FROM t_A a FULL OUTER JOIN t_B b ON a.id = b.id;

不加限制的用法:

SELECT * FROM t_A FULL JOIN t_B ON 1=1;

内连接,又名自连接(INNER JOIN / JOIN)

查出的记录既存在于 t_A,又存在于 t_B,即查出匹配两张表的数据。

SELECT * FROM t_A a,t_B b WHERE a.id = b.id;

或 SELECT * FROM t_B b,t_A a WHERE b.id = a.id;

或 SELECT * FROM t_A a JOIN t_B b ON a.id = b.id;

或 SELECT * FROM t_A a INNER JOIN t_B b ON a.id = b.id;

或 SELECT * FROM t_B b JOIN t_A b ON b.id = a.id;

或 SELECT * FROM t_B b INNER JOIN t_A a ON b.id = a.id;

笛卡尔乘积,又名笛卡尔积(CROSS JOIN)

不加任何条件,达到 M*N 的结果集

SELECT * FROM t_A a CROSS JOIN t_B b;

或 SELECT * FROM t_A a,t_B b;

注意:如果 CROSS JOIN 加上 WHERE ON a.id = b.id 条件,会产生跟内连接(自连接)一样的结果(CROSS JOIN 后 加上 ON 会报错);

即 SELECT * FROM t_A a CROSS JOIN t_B b WHERE a.id = b.id;(不需要 ON) 相当于 SELECT * FROM t_A a JOIN t_B b ON a.id = b.id;

oracle in的用法_oracle 左连接、右连接、全外连接、内连接、以及 (+) 号用法相关推荐

  1. SQL连接的理解和使用(内连接:自然连接等值连接,外连接:左连接右连接全外连接)

    目录 一.连接的介绍 连接是什么? 连接分几种? 条件连接 等值连接 自然连接 二.连接的使用 内连接 INNER JOIN 内连接与等值连接区别 内连接与自然连接区别 外连接 OUTER JOIN ...

  2. mysql内连接和交叉连接_MySQL中的内连接、外连接、交叉连接

    内连接(INNER JOIN): 分为三种 等值连接.自然连接.不等连接 外连接(OUTER JOIN): 左外连接(LEFT OUTER JOIN或LEFT JOIN) 右外连接(RIGHT OUT ...

  3. 左连接 和右链接的区别,内连接和外连接的区别

    假设有A,B两个表. 表A记录如下:   aID     aNum   1     a20050111   2     a20050112   3     a20050113   4     a200 ...

  4. 【MySQL】MySQL 的连接(内、左、右、全)

    一.表 的连 结 1.目的:减少数据的冗余 2.核心:分类 ***连接时至少要两张表,连接主要有内连接(inner join).左外连接(left outer join).右外连接(right out ...

  5. SQL——左连接(Left join)、右连接(Right join)、内连接(Inner join)

    文章目录 前言 一.概念 二.例子 总结 前言 最近在做SQL相关的练习,发现以前那么自信的SQL放久了不碰也变得棘手起来,特别是这一块表之间的内外连接.所以这篇是关于这个内外连接的整理. 一.概念 ...

  6. mysql的内连接左连接右连接有什么区别_MySQL 的内连接、左连接、右连接有什么区别?...

    1.外连接–左连接结果 table1居左,故谓之左连接.这种情况下,以table1为主,即table1中的所有记录均会被列出.有一下三种情况: 一个.对于table1中的每一条记录对应的城市如果在ta ...

  7. ORACLE: LPAD 和 RPAD(左填充 右填充)

    1.左填充 右填充 注:之前一直理解Rpad 的 R是向右截取的意思,后来发现根本不是截取这个概念. 理解为 : Rpad(字符串,查询的长度,填充数据) select LPAD('1123',2,' ...

  8. mysql全外连接和笛卡尔积_数据库(join) 内连接、外连接、笛卡尔积

    今天,重刷了刷leetcode数据库的题目,对数据库连接查询做一个记录. 数据库(join) 内连接.外连接.笛卡尔积 内连接(自身连接) 内连接有隐式内连接和显示内连接两种: 隐式(无join),f ...

  9. mysql自然连接和等值连接_mysql sql99语法 内连接等值连接

    #案例:查询员工名.部门名 SELECT last_name,department_name FROM employees e INNER JOIN departments d ON e.`depar ...

最新文章

  1. Spark Worker启动源码
  2. Python是否具有三元条件运算符?
  3. 面试之BI-SQL--table转换
  4. OpenCV3.0或OpenCV3.1的SVM操作
  5. 信息学奥赛一本通 1225:金银岛 | OpenJudge NOI 4.6 1797:金银岛
  6. 通过QEMU-GuestAgent实现从外部注入写文件到KVM虚拟机内部
  7. JS中对于prototype的理解
  8. STM32F103单片机RTC实时时钟的使用
  9. 使用ASP.NET AJAX Control Toolkit中的NoBot控件拒绝垃圾发布程序 【转载】
  10. RK3399平台开发系列讲解(高速设备驱动篇)6.46、蓝牙驱动
  11. 当前位置 计算机英语,计算机常用英语词汇,计算机常用英语词汇
  12. Markdown 写文档做笔记的利器
  13. webpack解惑:require的五种用法
  14. Servlet处理GET和POST请求
  15. webstorm注册码
  16. CentOS 7下安装Redis
  17. Android 沉浸式模式
  18. html5 语言购物车,基于html5 localStorage的购物车JS脚本详解
  19. PaddleSpeech 流式语音识别系统 PP-ASR
  20. Redis应用问题解决(缓存穿透、击穿、雪崩、分布式锁)

热门文章

  1. EasyTransaction 1.3.0 发布,一站式分布式事务解决方案
  2. 服务器越来越慢的原因及解决办法
  3. Docker快速验证tomcat单机多实例方案
  4. Libevent实现TCP服务循环监听
  5. PhalGo-Request
  6. VMware Workstation 7.1.4 Vmmon Module Trouble In RHEL6.1
  7. 适合初学者的Python小游戏开发,不仅有趣还能巩固自己所学知识
  8. 德富莱智能抹墙机器人_深圳智能制造应急生产联盟成立,大咖共探机器人行业新机遇...
  9. ajax提交不能进入后台_Ajax跨域问题
  10. 分析2021年私有云市场的发展趋势