当前位置: 首页 > news >正文

Oracle:左连接、右连接、全外连接、(+)号详解

目录

Oracle 左连接、右连接、全外连接、(+)号详解

1、左外连接(LEFT OUTER JOIN/ LEFT JOIN)

2、右外连接(RIGHT OUTER JOIN/RIGHT JOIN)

3、全外连接(FULL OUTER JOIN/FULL JOIN)

4、补充

5、Oracle中 (+)与left join 的用法区别


Oracle 左连接、右连接、全外连接、(+)号详解

Oracle 外连接 (OUTER JOIN) 分为三种: 左外连接,右外连接,全外连接。left join、right join 和 join 的区别如下:

  • 左外连接(左边的表不加限制)
  • 右外连接(右边的表不加限制)
  • 全外连接(左右两表都不加限制)
  • 连接(左右两表交集)

对应SQL:LEFT/RIGHT/FULL OUTER JOIN。 通常省略OUTER关键字, 写成:LEFT/RIGHT/FULL JOIN。

6ff2cdee1864514f8b2346fe54b1b6e0.png


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

对于外连接, 也可以使用“(+) ”来表示。 关于使用(+)的一些注意事项:

  1. (+)操作符只能出现在 WHERE 子句中,并且不能与 OUTER JOIN 语法同时使用。
  2. 当使用(+)操作符执行外连接时,如果在WHERE子句中包含有多个条件,则必须在所有条件中都包含(+)操作符。
  3. (+)操作符只适用于列,而不能用在表达式上。
  4. (+)操作符不能与 OR 和 IN 操作符一起使用。
  5. (+)操作符只能用于实现左外连接和右外连接,而不能用于实现完全外连接。

开始前,先创建两张表,插入数据便于理解测试:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

CREATE TABLE A (

id   number,

name  VARCHAR2(10)

);

CREATE TABLE B (

id   number,

name  VARCHAR2(10)

);

INSERT INTO A VALUES(1,’A1’);

INSERT INTO A VALUES(1,’A2’);

INSERT INTO A VALUES(2,’B1’);

INSERT INTO A VALUES(3,’C1’);

INSERT INTO A VALUES(4,’D1’);

INSERT INTO B VALUES(1,’AA’);

INSERT INTO B VALUES(1,’BB’);

INSERT INTO B VALUES(2,’CC’);

INSERT INTO B VALUES(6,’DD’);

1、左外连接(LEFT OUTER JOIN/ LEFT JOIN)

LEFT JOIN 是以左表的记录为基础表,右表的记录为补充表,示例中A表可以看成左表,B表可以看成右表,它的结果集是A表中的全部数据,再加上A表和B表匹配后的数据。换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录。A表有B表没有的记录对应的B表列显示为NULL。

1

2

3

4

5

6

7

8

9

10

11

SQL> select * from A a left join B b on a.id = b.id;

        ID NAME               ID NAME

————— ————— ————— —————

         1 A2                  1 AA

         1 A1                  1 AA

         1 A2                  1 BB

         1 A1                  1 BB

         2 B1                  2 CC

         4 D1

         3 C1

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

1

select * from A a,B b where a.id=b.id(+);

2、右外连接(RIGHT OUTER JOIN/RIGHT JOIN)

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

1

2

3

4

5

6

7

8

9

10

SQL> select * from A a right join B b on a.id = b.id;

        ID NAME               ID NAME

————— ————— ————— —————

         1 A1                  1 BB

         1 A1                  1 AA

         1 A2                  1 BB

         1 A2                  1 AA

         2 B1                  2 CC

                               6 DD

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

1

select * from A a,B b where a.id(+)=b.id;

3、全外连接(FULL OUTER JOIN/FULL JOIN)

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

1

2

3

4

5

6

7

8

9

10

11

12

SQL> select * from A a full join B b on a.id = b.id;

        ID NAME               ID NAME

————— ————— ————— —————

         1 A1                  1 BB

         1 A1                  1 AA

         1 A2                  1 BB

         1 A2                  1 AA

         2 B1                  2 CC

         3 C1

         4 D1

                               6 DD

4、补充

1

2

3

4

5

6

7

8

9

SQL> select * from A a,B b where a.id = b.id;

        ID NAME               ID NAME

————— ————— ————— —————

         1 A1                  1 BB

         1 A1                  1 AA

         1 A2                  1 BB

         1 A2                  1 AA

         2 B1                  2 CC

1

2

3

4

5

6

7

8

9

SQL> select * from A a join B b on a.id = b.id;

        ID NAME               ID NAME

————— ————— ————— —————

         1 A1                  1 BB

         1 A1                  1 AA

         1 A2                  1 BB

         1 A2                  1 AA

         2 B1                  2 CC

1

2

3

4

5

6

7

SQL> select * from A a where a.id in (select b.id from B b);

        ID NAME

————— —————

         1 A2

         1 A1

         2 B1

1

2

3

4

5

6

7

SQL> select * from A a where exists (select 1 from B b where a.id = b.id);

        ID NAME

————— —————

         1 A2

         1 A1

         2 B1

5、Oracle中 (+)与left join 的用法区别

1. (+) 写在 where 后面,不能与 or/in 连用, a表是主表,b表是附属表。

select * from a,b where a.id=b.id(+);

2. 左连接写在 from 与where之间,a left join b on a.id=b.id :主表a left join 附表b on 连接条件。

select * from a left join b on a.id=b.id;

3.效率上没区别,left join 可读性高、功能更全面、通用性强、而且是新标准,建议使用left join。

相关文章:

Oracle:左连接、右连接、全外连接、(+)号详解

目录 Oracle 左连接、右连接、全外连接、()号详解 1、左外连接(LEFT OUTER JOIN/ LEFT JOIN) 2、右外连接(RIGHT OUTER JOIN/RIGHT JOIN) 3、全外连接(FULL OUTER JOIN/FULL JOIN&#xff0…...

virtualbox上win7企业微信CPU高问题

问题 linux Opensuse上的Virtualbox安装有win7, win7中跑企业微信CPU占用很高。一杀掉它,CPU占用就立马降下来了。 定位 当cpu占用高时,打开任务管理器,可以定位到svhost.exe占用很高, 优化 右键点击计算机–管理–服务和应用…...

【华为OD题库-055】金字塔/微商-java

题目 微商模式比较典型,下级每赚100元就要上交15元,给出每个级别的收入,求出金字塔尖上的人收入。 输入描述 第一行输入N,表示有N个代理商上下级关系 接下来输入N行,每行三个数:代理商代号 上级代理商代号 代理商赚的钱…...

OpenVINO异步Stable Diffusion推理优化方案

文章目录 Stable Diffusion 推理优化背景技术讲解:异步优化方案思路:异步推理优化原理OpenVINO异步推理Python API同步和异步实现方式对比 oneflow分布式调度优化优势:实现思路 总结: Stable Diffusion 推理优化 背景 2022年&…...

51单片机的智能加湿器控制系统【含proteus仿真+程序+报告+原理图】

1、主要功能 该系统由AT89C51单片机LCD1602显示模块DHT11湿度传感器模块继电器等模块构成。主要适用于智能自动加湿器、湿度保持、湿度控制等相似项目。 可实现基本功能: 1、LCD1602液晶屏实时显示湿度信息 2、DHT11采集湿度 3、按键可以调节适宜人体湿度的阈值范围&#xff0…...

NoSql非关系型数据库

前言:Nosql not only sql,意即“不仅仅是sql”,泛指非关系型数据库。这些类型的数据存储不需要固定的模式(当然也有固定的模式),无需多余的操作就可以横向扩展。NoSql数据库中的数据是使用聚合模型来进行处…...

抖音集团面试挂在2面,复盘后,决定二战.....

先说下我基本情况,本科不是计算机专业,现在是学通信,然后做图像处理,可能面试官看我不是科班出身没有问太多计算机相关的问题,因为第一次找工作,字节的游戏专场又是最早开始的,就投递了&#xf…...

每个.NET开发都应掌握的C#处理文件系统I/O知识点

上篇文章讲述了C#多线程知识点,本文将介绍C#处理文件的知识点。在.NET开发领域,文件系统I/O是一个至关重要的主题,尤其是在处理文件、目录和数据存储方面。C#作为.NET平台的主要编程语言,提供了丰富而强大的文件系统I/O功能&#…...

vue3 中使用 sse 最佳实践,封装工具

工具 // 接受参数 export interface SSEChatParams {url: string,// sse 连接onmessage: (event: MessageEvent) > void,// 处理消息的函数onopen: () > void,// 建立连接触发的事件finallyHandler: () > void,// 相当于 try_finally 中的 finally 部分,不…...

OpenCV快速入门【完结】:总目录——初窥计算机视觉

文章目录 前言目录1. OpenCV快速入门:初探2. OpenCV快速入门:像素操作和图像变换3. OpenCV快速入门:绘制图形、图像金字塔和感兴趣区域4. OpenCV快速入门:图像滤波与边缘检测5. OpenCV快速入门:图像形态学操作6. OpenC…...

车企数据治理实践案例,实现数据生产、消费的闭环链路 | 数字化标杆

随着业务飞速发展,某汽车制造企业业务系统数量、复杂度和数据量都在呈几何级数的上涨,这就对于企业IT能力和IT架构模式的要求越来越高。加之企业大力发展数字化营销、新能源车等业务,希望通过持续优化客户体验,创造可持续发展的数…...

深入学习锁--Lock各种使用方法

一、什么是Lock Lock是一个接口,通常所说的可重入锁是指Lock的一个实现子类ReentrantLock 二、Lock实现步骤: ①创建锁对象Lock lock new ReentrantLock(); ②加锁lock.lock(); ③释放锁lock.unlock(); import java.util.concurrent.locks.Lock; import java.util…...

计算机毕设:基于机器学习的生物医学语音检测识别 附完整代码数据可直接运行

项目视频讲解: 基于机器学习的生物医学语音检测识别 完整代码数据可直接运行_哔哩哔哩_bilibili 运行效果图: 数据展示: 完整代码: #导入python的 numpy matplotlib pandas库 import pandas as pd import numpy as np import matplotlib.pyplot as plt #绘图 import se…...

VMware安装Ubuntu系统(Server端,Desktop端步骤一样)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...

Navicat 与 华为云 GaussDB 合作再升级,赋能 GaussDB 分布式数据库

2023 年第三季度,Navicat 首次支持了华为云 GaussDB 主备版数据库。经过双方团队进一步的深化合作,Navicat 完成了 GaussDB 分布式的研发适配工作,赋能 GaussDB 全域数据库产品。 GaussDB 数据库分为主备版和分布式版两种模式。主备版适用于…...

【Docker】从零开始:13.Docker安装tomcat

Docker】从零开始:13.Docker安装Tomcat 下载Tomcat镜像启动Tomcat镜像新版本Tomcat修改访问Tomact首页 下载Tomcat镜像 [rootdocker ~]# docker pull tomcat Using default tag: latest latest: Pulling from library/tomcat 0e29546d541c: Pull complete 9b829c7…...

风控规则引擎(一):Java 动态脚本

风控规则引擎(一):Java 动态脚本 日常场景 共享单车会根据微信分或者芝麻分来判断是否交押金汽车租赁公司也会根据微信分或者芝麻分来判断是否交押金在一些外卖 APP 都会提供根据你的信用等级来发放贷款产品金融 APP 中会根据很复杂规则来判…...

第五十六天|583. 两个字符串的删除操作 72. 编辑距离

583. 两个字符串的删除操作 可以求出最大子序列然后用字符串长度去减&#xff0c;也可以用删除的思路&#xff0c;如下&#xff1a; class Solution { public:int minDistance(string word1, string word2) {vector<vector<int>> dp(word1.size()1,vector<int…...

java中Lists.newArrayList和new ArrayList的详细区别?

下面是对Lists.newArrayList()和new ArrayList<>()的详细区别进行举例说明&#xff1a; 创建具有初始数据的列表&#xff1a; java Copy code import com.google.common.collect.Lists; List<String> list1 Lists.newArrayList("apple", "banana…...

从图片或PDF文件识别表格提取内容的简单库img2table

img2table是一个基于OpenCV 图像处理的用于 PDF 和图像的表识别和提取 Python库。由于其设计基于神经网络的解决方案&#xff0c;提供了一种实用且更轻便的替代方案&#xff0c;尤其是在 CPU 上使用时。 该库的特点&#xff1a; 识别图像和PDF文件中的表格&#xff0c;包括在表…...

23种设计模式 - 组合模式(Composite)

组合模式&#xff08;Composite&#xff09;—— 文件夹套文件夹&#xff0c;统一操作 大白话解释 你的电脑里&#xff1a; &#x1f4c4; 文件&#xff08;不能再包含东西&#xff09;&#x1f4c1; 文件夹&#xff08;可以装文件&#xff0c;也可以装文件夹&#xff09; &…...

如何在Windows上零配置运行Android应用?APK Installer的革命性方案

如何在Windows上零配置运行Android应用&#xff1f;APK Installer的革命性方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经遇到过这样的场景&#xff1a…...

想入行5G网络优化工程师?这6个求职陷阱你必须知道

5G网络优化工程师由于其入职门槛低&#xff0c;需求高&#xff0c;成为了不少想转行的人关注的岗位。 但对于刚入行的小白来说&#xff0c;求职路上往往布满陷阱。 作为一名行业接触过一些内幕的过来人&#xff0c;总结了6条找工作的核心建议&#xff0c;希望能帮大家少走弯路…...

深度学习助力图像增强:多算法与PyTorch复现

深度学习图像低光照增强算法低照度增强3DLUT,DeepUPT,DeepLPF,RetinexNet,Zero-DCE,EnlightenGAN,RetinexFormer等 图像调色增强算法HDRNet,StarEnhancer,CSRNet等 水下增强算法UWGAN,UIEGAN等 pytorch架构复现&#xff0c;有代码和benchmark数据集在图像处理领域&#xff0c;针…...

Rainmeter皮肤主题用户行为分析:使用数据统计

Rainmeter皮肤主题用户行为分析&#xff1a;使用数据统计 【免费下载链接】rainmeter Desktop customization tool for Windows 项目地址: https://gitcode.com/gh_mirrors/ra/rainmeter Rainmeter作为一款强大的Windows桌面自定义工具&#xff0c;允许用户通过皮肤主题…...

突破限制:BlenderCompat让Windows 7焕发新活力运行Blender 3.x

突破限制&#xff1a;BlenderCompat让Windows 7焕发新活力运行Blender 3.x 【免费下载链接】BlenderCompat Windows 7 support for Blender 3.x and newer 项目地址: https://gitcode.com/gh_mirrors/bl/BlenderCompat 在3D创作领域&#xff0c;Blender的每一次版本迭代…...

思源宋体终极指南:免费商用中文字体解决方案从入门到精通

思源宋体终极指南&#xff1a;免费商用中文字体解决方案从入门到精通 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为商业项目寻找高质量中文字体而烦恼&#xff1f;思源宋体这款…...

2026年主流接口测试平台慢因分析与选型参考

2026年主流接口测试平台慢因分析与选型参考 核心观点摘要 2026年接口测试响应慢核心诱因可归为三类&#xff1a;工具本身并发调度能力不足、协议适配不全导致额外转码开销、缺少AI智能链路优化能力&#xff0c;多数企业接口测试效率低与工具选型不当直接相关。本次盘点覆盖当前…...

[技术突破]M9A:构建《重返未来:1999》智能自动化解决方案

[技术突破]M9A&#xff1a;构建《重返未来&#xff1a;1999》智能自动化解决方案 【免费下载链接】M9A 1999 小助手 项目地址: https://gitcode.com/gh_mirrors/m9/M9A 实现游戏体验革新的技术价值 M9A作为专为《重返未来&#xff1a;1999》设计的智能自动化工具&#…...

League-Toolkit英雄联盟辅助工具完全指南:从配置到精通的高效使用手册

League-Toolkit英雄联盟辅助工具完全指南&#xff1a;从配置到精通的高效使用手册 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit …...