首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Oracle表连接

Oracle表连接

作者头像
翎野君
发布于 2023-05-12 07:41:00
发布于 2023-05-12 07:41:00
1K00
代码可运行
举报
文章被收录于专栏:翎野君翎野君
运行总次数:0
代码可运行

表连接

SQL准备:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--创建A表
create table TestA(
id number not null primary key,
name varchar2(10)
);
--创建B表
create table TestB(
idno number not null primary key,
name varchar2(20),
sex varchar2(2)
);
--插入A表数据
insert into TestA values(1,'花花');
insert into TestA values(2,'草草');
insert into TestA values(3,'绿绿');
insert into TestA values(4,'红红');
insert into TestA values(5,'白白');
insert into TestA values(6,'黑黑');
--插入B表数据
insert into TestB values(1,'小花','女');
insert into TestB values(3,'小绿','男');
insert into TestB values(4,'小红','女');
insert into TestB values(7,'小黄','男');
insert into TestB values(9,'小紫','女');

1、内连接

1.1、等值连接

  外连接:即使找不到满足条件的记录,另一张表也会输出。

  内连接:查询满足条件的结果集,是相对于外连接来说的(条件的话由很多种可以等于、不等于、大于、小于等等)。

      等值连接:其实是在内连接的基础之上条件为等于的连接,故等值连接是内连接的子集,同理不等值连接也是如此。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--表连接,你要先通过 a.id=b.idno(桥梁)把表连接上然后在加是值条件
select * from TestA a,TestB b where a.id=b.idno and a.id=1;
--等值连接是内连接的子集
select * from TestA inner join TestB on TestA.id=TestB.idno where TestA.id=1;

1.2、不等值连接

   除了等于之外的比较运算符比如<>、>、<、>=、<=、LIKE、IN、BETWEEN…AND。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--两表连接上后,查询id不等于1的记录
select * from TestA a,TestB b where a.id=b.idno and a.id<>1;
--inner join 的方式
select * from TestA inner join TestB on TestA.id=TestB.idno where id<>1;

1.3、自然连接

   自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件按的结果。

另外:

1.如果做自然连接的两个表的有多个字段都满足有相同名称个类型,那么他们会被作为自然连接的条件。

2.如果自然连接的两个表仅是字段名称相同,但数据类型不同,那么将会返回一个错误。

3.由于oracle中可以进行这种非常简单的natural join,我们在设计表时,应该尽量在不同表中具有相同含义的字段使用相同的名字和数据类型。以方便以后使用natural join

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--新建用于测试自然连接的表C
create table TestC(
id number not null primary key,
cname varchar2(20),
csex varchar2(2)
);

--插入C表数据
insert into TestC values(1,'小花','女');
insert into TestC values(3,'小绿','男');
insert into TestC values(4,'小红','女');
insert into TestC values(7,'小黄','男');
insert into TestC values(9,'小紫','女');

--自然连接,自动连接名称类型相同的列
select * from TestA natural join TestC;
--等同于内连接的下面的写法
select * from TestA join TestC on TestA.id=TestC.id;
select * from TestA inner join TestC on TestA.id=TestC.id;

2、外连接

2.1左外连接(LEFT JOIN 或者 LEFT OUTER JOIN)

  LEFT JOIN是以左表的记录为基础的,示例中TestA可以看成左表,TestB可以看成右表,它的结果集是Test A表中的全部数据,再加上TestA表和TestB表匹配后的数据。换句话说,左表(TestA)的记录将会全部表示出来,而右表(TestB)只会显示符合搜索条件的记录。TestB表记录不足的地方均为NULL。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--TestA(左表)为基础表全部显示,右表(TestB)为匹配表无记录则显示为空
select * from TestA left join TestB on TestA.id=TestB.idno order by id ASC;
select * from TestA left outer join TestB on TestA.id=TestB.idno order by id ASC;

2.2右外连接(RIGHT JOIN 或者 RIGHT OUTER JOIN)

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--TestB(右表)为基础表全部显示,左表(TestA)为匹配表无记录则显示为空
select * from TestA right join TestB on TestA.id=TestB.idno order by id ASC;
select * from TestA right outer join TestB on TestA.id=TestB.idno order by id ASC;

2.3全外连接(FULL JOIN 或者 FULL OUTER JOIN)

  左表和右表都不做限制,所有的记录都显示,两表不足的地方均为NULL。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--全外连接,两个表的所有数据进行匹配,没有的显示为空
select * from TestA full join TestB on TestA.id=TestB.idno;
select * from TestA full outer join TestB on TestA.id=TestB.idno;

补充:外连结的另外一种写法

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--加号写在右边即右边为匹配表,左边为基础表即左连接
select * from TestA,TestB where TestA.id=TestB.idno(+);
--加号写在左边即左边为匹配表,右边为基础表即右连接
select * from TestA,TestB where TestA.id(+)=TestB.idno;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL中的内连接与外连接详解:基础与进阶应用
内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。
用户11286421
2025/03/28
4140
MySQL中的内连接与外连接详解:基础与进阶应用
MySQL 表连接(内连接与外连接)
内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。
猫咪-9527
2025/03/28
7510
MySQL 表连接(内连接与外连接)
多表连接查询
连接查询是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。 在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,然后通过连接进行查询。
星哥玩云
2022/09/15
1.7K0
多表连接查询
面试之前,MySQL表连接必须过关!——表连接的原理
我们知道,所谓表连接就是把各个表中的记录都取出来进行依次匹配,最后把匹配组合的记录一起发送给客户端。比如下面把t1表和t2表连接起来的过程如下图
砖业洋__
2023/05/06
2.4K0
面试之前,MySQL表连接必须过关!——表连接的原理
Oracle查看分析执行计划、建立索引以及SQL优化
Step2: select * from table(dbms_xplan.display)
chenchenchen
2022/03/09
4.5K0
Oracle查看分析执行计划、建立索引以及SQL优化
sql 表连接on后面加where和and的区别
on 是用于消除笛卡儿积的,表连接时不加on会报错,left join语句会从左表那里返回所有的行,即使在右表中没有匹配的行,on后面接and也会兼顾左连接,不管and 后面接什么内容,左表数据都会全部展示 下图语句由于a.name =10在testA没有匹配数据,所以与其关联的testB也匹配不到数据。
挨踢小子部落阁
2023/03/15
1.8K0
sql 表连接on后面加where和and的区别
多表查询与7种JOINS的实现
前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。比如:员工表和部门表,这两个表依靠“部门编号”进行关联。
timerring
2023/02/16
1.5K0
多表查询与7种JOINS的实现
连接查询和子查询哪个效率高
通过子查询不难看出,可以根据employee_id查到department_id,然后根据deparment_id查到location_id然后查city字段就行了
全栈程序员站长
2022/09/03
5.2K0
连接查询和子查询哪个效率高
MSSQL之五 连接查询与子查询
数据表之间的联系是通过表的字段值来体现的,这种字段称为连接字段。连接操作的目的就是通过加在连接字段的条件将多个表连接起来,以便从多个表中查询数据。前面的查询都是针对一个表进行的,当查询同时涉及两个以上的表时,称为连接查询。连接查询主要分为如下几种格式:
张哥编程
2024/12/13
4180
MSSQL之五  连接查询与子查询
第36次文章:数据库查询语句
由于在sql语法中,仅仅支持内连接,所以我们对sql92语法标准的介绍仅限于内连接的三种方式。
鹏-程-万-里
2019/09/27
1.9K0
第36次文章:数据库查询语句
SQL六大连接解析:内连接、外连接、全连接、交叉连接、自连接、自然连接
内连接:也称为等值连接,返回两张表都满足条件的部分。inner join 就等于 join
鳄鱼儿
2024/05/21
1.9K0
SQL六大连接解析:内连接、外连接、全连接、交叉连接、自连接、自然连接
Oracle学习笔记_04_多表查询
                                    (1)内连接           vs          外连接 (左、右、满)
shirayner
2018/08/10
4840
T-SQL教程_sql server 2008使用
T-SQL语言中最重要的部分是它的查询功能,查询语言用来对已经存在于数据库中的数据按 照特定的行、列、条件表达式或者一定次序进行检索。 T-SQL对数据库的查询使用SELECT语句,SELECT语句具有灵活的使用方式和强大的功能, SELECT语句的基本语法格式如下:
全栈程序员站长
2022/09/23
2K0
T-SQL教程_sql server 2008使用
SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接
SQL连接可以分为内连接、外连接、交叉连接。 数据库数据: book表 stu表 1.内连接 1.1.等值连接:在连接
小小科
2018/05/02
3.6K0
SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接
MySQL常用SQL语句:插入更新删除查询
整理一些MySQL常用SQL语句:插入、更新、删除、查询、根据指定的列对结果集进行排序等。
星哥玩云
2022/08/16
7.4K0
MySQL常用SQL语句:插入更新删除查询
神奇的 SQL 之团结的力量 → JOIN
    闺蜜家暴富,买了一栋大别野,喊我去吃饭,菜挺丰盛的,筷子有些不给力,银筷子,好重,我说换个竹子的,闺蜜说,这种银筷子我家总共才五双,只有贵宾才能用~我咬着牙享受着贵宾待遇,终于,在第三次夹虾排滑落盘子时,我爆发了:去它喵的贵宾,我要虾排……不是……我要竹筷子!
青石路
2019/10/29
5820
神奇的 SQL 之团结的力量 → JOIN
Oracle数据库 表连接与表设计
select deptno,e.ename,d.dname from emp e natural join dept d;
wolf
2020/09/21
2.5K0
带你学MySQL系列 | 多表连接查询的92语法和99语法,你都知道吗?
前面两天带着大家换了一个口味,带着大家学习了pyecharts的原理和部分图形制作。今天我们继续回归带你学MySQL系列,带着大家继续学习MySQL数据库。
数据分析与统计学之美
2021/11/25
1.2K0
SQL必知必会:SQL 中的连接
大家一定用过 LEFT JOIN、RIGHT JOIN 这样的操作符,这实际上就是连接,SQL 中的连接是多表操作的基础之一,对连接不了解很难去查询好多表。同时 SQL 有众多版本,每个版本对连接支持和使用会有不一致,常用的有:SQL92、SQL99等。
陈大剩博客
2023/07/09
5920
SQL必知必会:SQL 中的连接
SQL 多表联合查询的几种方式
来源:blog.csdn.net/zt15732625878/article/details/79074123    https://www.jb51.net/article/205675.htm
鱼找水需要时间
2023/02/16
9100
SQL 多表联合查询的几种方式
推荐阅读
相关推荐
MySQL中的内连接与外连接详解:基础与进阶应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档