oracle in的用法_oracle 左连接、右连接、全外连接、内连接、以及 (+) 号用法
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 左连接、右连接、全外连接、内连接、以及 (+) 号用法相关推荐
- SQL连接的理解和使用(内连接:自然连接等值连接,外连接:左连接右连接全外连接)
目录 一.连接的介绍 连接是什么? 连接分几种? 条件连接 等值连接 自然连接 二.连接的使用 内连接 INNER JOIN 内连接与等值连接区别 内连接与自然连接区别 外连接 OUTER JOIN ...
- mysql内连接和交叉连接_MySQL中的内连接、外连接、交叉连接
内连接(INNER JOIN): 分为三种 等值连接.自然连接.不等连接 外连接(OUTER JOIN): 左外连接(LEFT OUTER JOIN或LEFT JOIN) 右外连接(RIGHT OUT ...
- 左连接 和右链接的区别,内连接和外连接的区别
假设有A,B两个表. 表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a20050113 4 a200 ...
- 【MySQL】MySQL 的连接(内、左、右、全)
一.表 的连 结 1.目的:减少数据的冗余 2.核心:分类 ***连接时至少要两张表,连接主要有内连接(inner join).左外连接(left outer join).右外连接(right out ...
- SQL——左连接(Left join)、右连接(Right join)、内连接(Inner join)
文章目录 前言 一.概念 二.例子 总结 前言 最近在做SQL相关的练习,发现以前那么自信的SQL放久了不碰也变得棘手起来,特别是这一块表之间的内外连接.所以这篇是关于这个内外连接的整理. 一.概念 ...
- mysql的内连接左连接右连接有什么区别_MySQL 的内连接、左连接、右连接有什么区别?...
1.外连接–左连接结果 table1居左,故谓之左连接.这种情况下,以table1为主,即table1中的所有记录均会被列出.有一下三种情况: 一个.对于table1中的每一条记录对应的城市如果在ta ...
- ORACLE: LPAD 和 RPAD(左填充 右填充)
1.左填充 右填充 注:之前一直理解Rpad 的 R是向右截取的意思,后来发现根本不是截取这个概念. 理解为 : Rpad(字符串,查询的长度,填充数据) select LPAD('1123',2,' ...
- mysql全外连接和笛卡尔积_数据库(join) 内连接、外连接、笛卡尔积
今天,重刷了刷leetcode数据库的题目,对数据库连接查询做一个记录. 数据库(join) 内连接.外连接.笛卡尔积 内连接(自身连接) 内连接有隐式内连接和显示内连接两种: 隐式(无join),f ...
- mysql自然连接和等值连接_mysql sql99语法 内连接等值连接
#案例:查询员工名.部门名 SELECT last_name,department_name FROM employees e INNER JOIN departments d ON e.`depar ...
最新文章
- Spark Worker启动源码
- Python是否具有三元条件运算符?
- 面试之BI-SQL--table转换
- OpenCV3.0或OpenCV3.1的SVM操作
- 信息学奥赛一本通 1225:金银岛 | OpenJudge NOI 4.6 1797:金银岛
- 通过QEMU-GuestAgent实现从外部注入写文件到KVM虚拟机内部
- JS中对于prototype的理解
- STM32F103单片机RTC实时时钟的使用
- 使用ASP.NET AJAX Control Toolkit中的NoBot控件拒绝垃圾发布程序 【转载】
- RK3399平台开发系列讲解(高速设备驱动篇)6.46、蓝牙驱动
- 当前位置 计算机英语,计算机常用英语词汇,计算机常用英语词汇
- Markdown 写文档做笔记的利器
- webpack解惑:require的五种用法
- Servlet处理GET和POST请求
- webstorm注册码
- CentOS 7下安装Redis
- Android 沉浸式模式
- html5 语言购物车,基于html5 localStorage的购物车JS脚本详解
- PaddleSpeech 流式语音识别系统 PP-ASR
- Redis应用问题解决(缓存穿透、击穿、雪崩、分布式锁)
热门文章
- EasyTransaction 1.3.0 发布,一站式分布式事务解决方案
- 服务器越来越慢的原因及解决办法
- Docker快速验证tomcat单机多实例方案
- Libevent实现TCP服务循环监听
- PhalGo-Request
- VMware Workstation 7.1.4 Vmmon Module Trouble In RHEL6.1
- 适合初学者的Python小游戏开发,不仅有趣还能巩固自己所学知识
- 德富莱智能抹墙机器人_深圳智能制造应急生产联盟成立,大咖共探机器人行业新机遇...
- ajax提交不能进入后台_Ajax跨域问题
- 分析2021年私有云市场的发展趋势