Oracle SQL中join方式总结

article/2025/9/16 0:07:21

       在ORACLE数据库中,表与表之间的SQL JOIN方式有多种(不仅表与表,还可以表与视图、物化视图等联结)。SQL JOIN其实是一个逻辑概念,像NEST LOOP JOIN、 HASH JOIN等是表连接的物理实现方式。

     为了更直观的了解以上join方式,我们通过俩个测试表来进行测试,首先是建表语句:

create table U (
name varchar2(20),
gender varchar2(10)
);
create table D(
name varchar2(20),
sal number(6,0)
);insert into U values('tom','male');insert into U values('jerry','male');insert into U values('tina','female');insert into U values('ying','female');
COMMIT;insert into D
select 'ying',10000 from dual union all
select 'tom',5000 from  dual union all
select 'sam',3000 from dual union all
select 'jeck',4500 from dual;
COMMIT;

  内连接:INNER JOIN

inner join 表示返回俩个表或记录连接字段的匹配记录。它有三种实现方式,如下图所示:


SQL> select U.NAME,U.GENDER,D.SAL2  from U inner join D on U.NAME = D.NAME;我的报表                     1
NAME                                     GENDER                      SAL
---------------------------------------- -------------------- ----------
ying                                     female                    10000
tom                                      male                       5000
SQL> select u.name,u.gender,d.sal2  from u,d3  where u.name=d.name;我的报表                     1
NAME                                     GENDER                      SAL
---------------------------------------- -------------------- ----------
ying                                     female                    10000
tom                                      male                       5000SQL> select name, u.gender,d.sal2  from u inner join d using(name);我的报表                     1
NAME                                     GENDER                      SAL
---------------------------------------- -------------------- ----------
ying                                     female                    10000
tom                                      male                       5000

注意:inner join 可以使用简写join方式,如下所示,但是建议使用inner join。

SQL> select u.name,u.gender,d.sal2  from u join d3  on u.name=d.name;我的报表                     1
NAME                                     GENDER                      SAL
---------------------------------------- -------------------- ----------
ying                                     female                    10000
tom                                      male                       5000SQL> select name ,u.gender,d.sal2  from u join d using(name);我的报表                     1
NAME                                     GENDER                      SAL
---------------------------------------- -------------------- ----------
ying                                     female                    10000
tom                                      male                       5000

用韦恩图来表示则更便于理解:

外链接:OUTER JOIN

1.全连接:full join

全连接:包含左、右俩个表的所有行,不管另一表中是否存在与其匹配的行。不符合条件的,则以空值代替。如下所示:

1  select u.name,u.gender,d.name,d.sal2  from u full join d3  on4* u.name=d.name
SQL> /我的报表                     1
NAME       GENDER               NAME              SAL
---------- -------------------- ---------- ----------
ying       female               ying            10000
tom        male                 tom              5000sam              3000jeck             4500
tina       female
jerry      male已选择6行。

 FULL OUTER JOIN的韦恩图如下:

2.左外连接:LEFT JOIN

左外连接:又叫左连接,意思是包含左边表所有记录,右边所有匹配的记录,如果没有则用空补齐。换句话说就是,列出左边表全部的,及右边表符合条件的,不符合条件的以空值代替。


SQL> select u.name,u.gender,d.name,d.sal2  from u left join d3  on u.name=d.name;我的报表                     1
NAME       GENDER               NAME              SAL
---------- -------------------- ---------- ----------
ying       female               ying            10000
tom        male                 tom              5000
tina       female
jerry      maleSQL> select u.name,u.gender,d.name,d.sal2  from u,d3  where u.name = d.name(+);我的报表                     1
NAME       GENDER               NAME              SAL
---------- -------------------- ---------- ----------
ying       female               ying            10000
tom        male                 tom              5000
tina       female
jerry      male

 LEFT OUTER JOIN (with common data)韦恩图如下:

上面是左外连接(带公共数据)的查询方法,那么还有一种就是不包含的,表示如下:

 

 

3.右外连接:RIGHT JOIN

右外连接:又叫右链接,意思是包括右边表所有记录,匹配左边表的记录,如果没有则以空补齐。换句话说,列出右边全部的,及左边符合条件的,不符合条件的则以空值代替。

SQL> select u.name,u.gender,d.name,d.sal2  from u right join d3  on u.name = d.name;我的报表                     1
NAME       GENDER               NAME              SAL
---------- -------------------- ---------- ----------
tom        male                 tom              5000
ying       female               ying            10000jeck             4500sam              3000SQL> select u.name,u.gender,d.name,d.sal2  from u,d3  where u.name(+)=d.name;我的报表                     1
NAME       GENDER               NAME              SAL
---------- -------------------- ---------- ----------
tom        male                 tom              5000
ying       female               ying            10000jeck             4500sam              3000

笛卡尔积:CROSS JOIN

cross就是笛卡尔乘积连接,不需要任何关联条件,实现M*N的结果集。实际操作中,很少会用到,但要注意在开发中做表之间关联时应避免产生笛卡尔集,否则数据量过大,导致内存溢出。


SQL> select * from u cross join d;我的报表                     1
NAME       GENDER               NAME              SAL
---------- -------------------- ---------- ----------
tom        male                 ying            10000
tom        male                 tom              5000
tom        male                 sam              3000
tom        male                 jeck             4500
jerry      male                 ying            10000
jerry      male                 tom              5000
jerry      male                 sam              3000
jerry      male                 jeck             4500
tina       female               ying            10000
tina       female               tom              5000
tina       female               sam              3000我的报表                     2
NAME       GENDER               NAME              SAL
---------- -------------------- ---------- ----------
tina       female               jeck             4500
ying       female               ying            10000
ying       female               tom              5000
ying       female               sam              3000
ying       female               jeck             4500

 

 

 

 

 


http://chatgpt.dhexx.cn/article/dsCnFIC1.shtml

相关文章

SQL语句中的join用法

SQL中join的各种用法 1.自然连接(natural join) 自然连接将表中具有相同名称的列自动进行匹配,自然连接不必指定任何同等连接条件也不能认为指定哪些列需要被匹配,自然连接得到的结果表中,两表中名称相同的列只出现一次…

sql中join的各种用法

sql中join的用法 sql中join的含义可以理解为单词“join”,用来连接两张表,join所有连接方式可以分为: 内连接,外连接,右连接,左连接,自然连接 上面这张图已经很清晰的表明了各种连接方式的语法…

SQL Server中JOIN的使用方法总结

JOIN 分为:内连接(INNER JOIN)、外连接(OUTER JOIN)。 其中,外连接分为:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)、全外连接&…

sql 语法中 join 的所有用法总结(简单例子)

join 常见的用法有: 目录 left join (left outer join) right join (right outer join) join (inner join) full join(full outer join 、outer join) cross join 说明:left join 就是 left outer join、 right join 就是 r…

SQL语句各种join用法(图文)

1、INNER JOIN(内连接) select * from table A A inner join table B B on A.key B.key //内连接 2、LEFT JOIN(左连接) select * from table A A left join table B B on A.key B.key //左连接 3、RIGHT JOIN(右连接) select * from table A A right join table B B on A…

sql join中on条件后接and和where

目录 场景1:left join on a.xx b.xx and a.xx2 aa 场景2:left join on a.xx b.xx and b.xx2 aa 场景3:left join on a.xx b.xx where b.xx2 aa 场景4:inner join on a.xx b.xx where a.xx2 aa 场景5:…

详解SQL中的各种连接(JOIN)方法

详解SQL中的各种连接(JOIN)方法 简介 有时候为了得到完整的结果,我们需要从两个或更多的表中获取结果,而 SQL 就提供了 JOIN 子句,用来把来自两个或者多个表的行结合起来(基于这些表之间的共同字段) 数据库中的表可以…

SQL语句中JOIN的用法

记录:257 写SQL最高境界:SELECT * FROM 表名。当然这是一句自嘲。探究一下SQL语句中JOIN的用法,直到经历这个场景,变得想验证一下究竟。 一、场景 把关系型数据库A中表TEST_TB01和TEST_TB02迁移到大数据平台M(MaxCom…

SQL中连接(JOIN)子句介绍

本文主要介绍 SQL(Structured Query Language)中连接(JOIN)子句的相关知识,同时通过用法示例介绍连接的常见用法。 说明:本文的用法示例是面向 MySQL 数据库的。 1 概述 SQL 中 JOIN 子句用于把来自两个…

SQL 中 JOIN 的用法

一、概要 JOIN对于接触过数据库的人,这个词都不陌生,而且很多人很清楚各种JOIN,还有很多人对这个理解也不是很透彻,这次就说说JOIN操作。 图片是很容易被接受和理解,所以尝试使用图片来说明一下。 二、JOIN分类 客…

思科三层交换机IPv6静态和默认路由配置

基础配置: SWA: Switch>ena Switch#conf t Switch(config)#host SWA SWA(config)#vlan 10 SWA(config-vlan)#vlan 100 SWA(config-vlan)#int vlan 10 SWA(config-if)#ipv6 add 2001:10::1/64 SWA(config-if)#int vlan 100 SWA(config-if)#i…

Cisco 三层交换机与路由器ospf协议配置多区域area

分布操作: 1.划分vlan 2.ospf、area 3.测试ping 三层交换机2 路由器2 PC机4 路由器使用WIC-2T模块 使用DCE串口线连接 其余设备间均用直通线连接 各种预配置信息: 设备从左往右,从上往下依次为 S1,R2,R3&#…

三层交换机配置的步骤

网管不会配置三层交换机怎么办? 学啊! 交换机是企业组网的重要设备,掌握交换机配置是作为网管的必备技能。这里以三层交换机的配置为例子,说一说配置的步骤。 配置管理地址 每个交换机需要配置一个管理地址,方便后期的…

思科利用三层交换机实现 VLAN 间路由

一、实验目的 掌握三层交换机基本配置方法 掌握三层交换机VLAN路由的配置方法 通过三层交换机实现VLAN间相互通信 二、实验原理 三层交换机具备网络层的功能,实现VLAN相互访问的原理是:利用三层交换机的路由功能,通过识别数据包的IP地址…

Cisco Packet Tracer中配置三层交换机

三层交换机介绍: 三层交换机就是具有部分路由器功能的交换机,三层交换机的最重要目的是加快大型局域网内部的数据交换,所具有的路由功能也是为这目的服务的,能够做到一次路由,多次转发。对于数据包转发等规律性的过程…

思科三层交换机配置SVI 实现VLAN 间路由

本次SVI实验参数如图: 依次三层交换我们命名为SW1,二层交换命名为SW2 下面我们开始先对二层交换机SW2进行配置 Switch>en Switch#conf t Switch(config)#host SW2 SW2(config)#vlan 20 SW2(config-vlan)#vlan 30 SW2(config-vlan)#vlan 40 SW2(config…

关于Cisco Packet Tracer三层交换机路由配置

步骤1:交换机trunk配置 交换机sw1配置 Switch>en Switch#conf t Switch(config)#ho sw1 sw1(config)#int f0/2 sw1(config-if)#sw mo tr sw1(config-if)#exit 交换机sw2配置 Switch>en Switch#conf t Switch(config)#ho sw2 sw2(config)#int f0/2 sw2(config-…

三层交换机dhcp服务器性能,CISCO三层交换机怎么配置DHCP服务?

利用CISCO三层交换机自带的DHCP功能,可以实现多VLAN的IP地址自动分配,在三层交换机上如何配置DHCP服务呢,下面由小编介绍下具体操作吧, 1、首先将三层交换机开机,电脑telnet 远程连接,并进入全局模式下&…

思科三层交换机配置ACL(访问控制列表)的步骤讲解

ACL访问控制列表是构建安全规范的网络不可缺少的,但在三层交换机上配置ACL却不为一些刚进企业的初级网络管理维护人员所知。下面介绍一下在三层交换机上配置ACL的试验过程。 三层交换机上配置本地Vlan 实现下层接入层交换机不同Vlan互通。 PC1 192.168.20.10 VLAN …

思科单臂路由与三层交换机配置

注:配置开始前,需要在R1,R2添加网卡用延时线连接,否则上下分开配置后,需要连接时再断电插网卡,再次启动后R1上的配置会失效,所以需要提前插网卡连延时线,或者完成所有配置后再插网卡&#xff0c…