前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用实验方法加深理解Oracle的外连接(left/right/full)和内连接(inner)

用实验方法加深理解Oracle的外连接(left/right/full)和内连接(inner)

作者头像
bisal
发布于 2019-01-29 07:03:52
发布于 2019-01-29 07:03:52
9800
举报

总是对Oracle的左连接、右连接以及(+)对应的外连接类型糊涂,通过实验加深对连接类型语法的理解。外连接分为三种:

1. 左外连接,对应SQL关键字:LEFT (OUTER) JOIN

2. 右外连接,对应SQL关键字:RIGHT (OUTER) JOIN

3. 全外连接,对应SQL关键字:FULL (OUTER) JOIN

左右外连接都是以一张表为基表,在显示基表所有记录外,加上另外一张表中匹配的记录。如果基表的数据在另一张表中没有记录,那么相关联的结果集行中显示为空值。

精确点说,引用MOS:

对于左连接,将会返回join连接条件中第一次提到的表(或者”左边“的表)。

对于右连接,将会返回join连接条件中第二次提到的表(或者”右边“的表)。

实验:

1. 准备:

SQL> create table left_tbl(id number); Table created. SQL> create table right_tbl(id number); Table created.

insert into left_tbl values(1); 

insert into left_tbl values(2);

insert into left_tbl values(3);

insert into right_tbl values(2);

insert into right_tbl values(3);

insert into right_tbl values(6);

SQL> select * from left_tbl;         ID ----------          1          2          3 SQL> select * from right_tbl;         ID ----------          2          3          6

2. 左连接

SQL> select * from left_tbl l left join right_tbl r on l.id = r.id;         ID         ID ---------- ----------          2          2          3          3          1

从排序看,左右表匹配的记录排在前面,并且是升序。

也可以这样写:select * from left_tbl l left join right_tbl r on l.id = r.id(+);

SQL> select * from left_tbl l, right_tbl r where l.id = r.id(+);         ID         ID ---------- ----------          2          2          3          3          1

使用(+),放右表表示左表所有记录,再加上右表的记录。

SQL> select * from left_tbl l, right_tbl r where r.id(+) = l.id;         ID         ID ---------- ----------          2          2          3          3          1

将where条件中左右表互换,结果还是左连接,因为(+)在左边,表示加上right表的记录。

SQL> select * from left_tbl left join right_tbl using (id);         ID ----------          2          3          1

此处使用using,只显示了左表的记录。

3. 右连接

SQL> select * from left_tbl l right join right_tbl r on l.id = r.id;         ID         ID ---------- ----------          2          2          3          3                     6

和左右连接相同,左右表匹配的记录排在前面,并且是升序。

也可以这样写:select * from left_tbl l right join right_tbl r on l.id(+) = r.id;

SQL> select * from left_tbl l, right_tbl r where l.id(+) = r.id;         ID         ID ---------- ----------          2          2          3          3                     6

使用(+),放左表表示右表所有记录,再加上左表的记录。

SQL> select * from left_tbl l, right_tbl r where r.id = l.id(+);         ID         ID ---------- ----------          2          2          3          3                     6

将where条件中左右表互换,结果还是右连接,因为(+)在右边,表示加上left表的记录。

4. 全外连接

SQL> select * from left_tbl l full join right_tbl r on l.id = r.id;或select * from left_tbl l full outer join right_tbl r on l.id = r.id;         ID         ID ---------- ----------          2          2          3          3          1                     6 会显示左右表的记录,不匹配的用NULL。

5. 内连接

说了外连接,再看下内连接,innser join或join。

SQL> select * from left_tbl l inner join right_tbl r on l.id = r.id;         ID         ID ---------- ----------          2          2          3          3 用inner join只显示左右表都匹配的记录。

SQL> select * from left_tbl l join right_tbl r on l.id = r.id;         ID         ID ---------- ----------          2          2          3          3

直接用join和inner join相同。

SQL> select * from left_tbl l, right_tbl r where l.id = r.id;         ID         ID ---------- ----------          2          2          3          3

用=代替on是内连接另外一种用法。

总结: 1. (+)在哪个表的旁边,就表示基表是另外一张表,结果集还需要加上(+)表中不匹配的数据。 2. 内连接inner关键字可省,外连接outer关键字可省。 3. 用on和where =都可以使用(+)方式。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014年07月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SQL 内连接,外连接(左外连接、右外连接)
语句:select * from a_table a inner join b_table bon a.a_id = b.b_id;
birdskyws
2018/09/12
13.2K0
SQL 内连接,外连接(左外连接、右外连接)
内连接、左外连接与右外连接的区别及作用介绍
SQL语句当中比较难的部分就有今天要给朋友们分享的这个,inner join, left join 和 right join他们三个的作用以及区别是什么。
全栈程序员站长
2022/11/03
2.2K0
什么是内连接、外连接?MySQL支持哪些外连接?_oracle内连接和外连接的区别
图片与最后一部分来自:https://blog.csdn.net/plg17/article/details/78758593
全栈程序员站长
2022/09/27
1.1K0
什么是内连接、外连接?MySQL支持哪些外连接?_oracle内连接和外连接的区别
sql server 连接查询_连表查询语句
连接查询包括合并、内连接、外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要。
全栈程序员站长
2022/10/05
3.7K0
MySQL中的内连接与外连接详解:基础与进阶应用
内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。
用户11286421
2025/03/28
2620
MySQL中的内连接与外连接详解:基础与进阶应用
Oracle表连接
  内连接:查询满足条件的结果集,是相对于外连接来说的(条件的话由很多种可以等于、不等于、大于、小于等等)。
翎野君
2023/05/12
8890
Mysql中的关联查询(内连接,外连接,自连接)
在使用数据库查询语句时,单表的查询有时候不能满足项目的业务需求,在项目开发过程中,有很多需求都是要涉及到多表的连接查询,总结一下mysql中的多表关联查询
全栈程序员站长
2022/09/01
4.2K0
Mysql中的关联查询(内连接,外连接,自连接)
【重学 MySQL】二十六、内连接和外连接
在MySQL中,内连接和外连接是两种常见的表连接方式,它们在处理多个表之间的关系时发挥着重要作用。
用户11332765
2024/10/28
2050
【重学 MySQL】二十六、内连接和外连接
MySQL 表连接(内连接与外连接)
内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。
猫咪-9527
2025/03/28
3670
MySQL 表连接(内连接与外连接)
【数据库设计和SQL基础语法】--连接与联接--内连接和外连接的概念
SQL连接是一种在关系型数据库中使用的操作,用于将两个或多个表中的行关联起来。连接允许在查询中同时检索来自多个表的数据,通过共享一个或多个共同的列(通常是主键或外键)来建立关系。连接操作是SQL查询的重要组成部分,它有助于从不同表中获取相关联的信息。 基本概念包括:
喵叔
2023/12/19
1.1K0
详解SQL Server连接(内连接、外连接、交叉连接)
在查询多个表时,我们经常会用“连接查询”。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。
程序猿小亮
2021/01/28
4.2K0
MySQL的多表联合查询
MySQL多表联合查询包括内连接、外连接、笛卡尔积连接查询三种。今天我们通过实验来演示7种SQL JOINS的基本用法。
Power
2025/02/28
2780
SQLServer SQL连接查询深度探险(摘录
测试的SQL脚本如下:此脚本适合MySQL、DB2,如果要在Oracle上执行,需要做个替换BIGINT->INTEGER,VARCHAR、->VARCHAR2。
授客
2019/09/11
1.2K0
MariaDB 连接查询
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一,该笔记用于生产环境快速查阅.
王 瑞
2022/12/28
4.5K0
MariaDB 连接查询
mysql,SQL标准,多表查询中内连接,外连接,自然连接等详解之查询结果集的笛卡尔积的演化
a,系统首先执行from子句,这里from子句列出有两个表teacher表和course表,DBMS讲计算这两个表的笛卡尔积,列出这两个表中行的所以可能组合,形成一个中间表。中间表中的每条记录包含了两个表中的所有行。
intsmaze-刘洋
2018/08/29
2.7K0
mysql,SQL标准,多表查询中内连接,外连接,自然连接等详解之查询结果集的笛卡尔积的演化
mysql的左连接和右连接(内连接和自然连接的区别)
语句:select * from a_table a inner join b_table b on a.a_id = b.b_id;
全栈程序员站长
2022/07/28
3.9K0
mysql的左连接和右连接(内连接和自然连接的区别)
SQL的各种连接(cross join、inner join、full join)的用法理解
如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积;
全栈程序员站长
2022/07/07
2.1K0
【MySql】表的内连接和外连接
内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。
平凡的人1
2023/10/15
6790
【MySql】表的内连接和外连接
玩转MySQL表之间的各种连接查询
因为不同表之间的数据具有不同的用途和字段,连接查询可以将我们需要用到的两个表的不同字段进行关联,从而找到我们有用的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,然后通过连接进行查询。
闫同学
2022/10/31
2.6K0
玩转MySQL表之间的各种连接查询
MySQL 连接查询
在关系型数据库管理系统(RDBMS)中,连接查询是一项重要的数据库操作,它允许我们从多个表中检索和组合数据,以便进行更复杂的查询和分析。
恋喵大鲤鱼
2023/10/12
6790
MySQL 连接查询
推荐阅读
相关推荐
SQL 内连接,外连接(左外连接、右外连接)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档