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

Oracle表连接

作者头像
翎野君
发布于 2023-05-12 07:41:00
发布于 2023-05-12 07:41:00
1.2K00
代码可运行
举报
文章被收录于专栏:翎野君翎野君
运行总次数: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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
Android Service用法知识点的讲解
android service 的基础知识,生命周期,service分类,运行地点(本地服务,远程服务),运行类型(前台服务,后台服务),功能(可通信与不可通信)。service和Thread的区别。
达达前端
2019/07/03
7490
Android Service用法知识点的讲解
Service中bindService
最近有用到Activity需要不断的从Service中获取数据,第一个想法肯定就是通过bind回调机制了,有几点概念模糊特此记录下:
全栈程序员站长
2022/06/28
4260
Service中bindService
Android:Service生命周期最全面解析
---- 前言 Service作为Android四大组件之一,应用非常广泛 本文将介绍Service最基础的知识:Service的生命周期 如果你对Service还未了解,建议先阅读我写的文章:
Carson.Ho
2019/02/22
6.5K0
Android之Service学习笔记
本来想学习学习Binder通信机制,在学习的过程中又接触AIDL并开始学习,在AIDL学习过程中看到bindService,接着就想回顾一下Service的一些知识。希望温故可以知新,也算是年末最后一篇笔记,给自己明年有一个好的开头!!
静默加载
2020/05/31
8840
[划重点] Service 知识要点
来总结一下 Service 的几个知识要点,包括启动方式、每种启动方式的生命周期、IntentService 源码分析,以及 boundService 三种使用方法。
haifeiWu
2020/02/10
7790
【Android从零单排系列三十七】《Android四大组件——Service》
小伙伴们,在上文中我们介绍了Android组件Fragment,本文我们继续盘点介绍Android开发中另一个非常重要的组件Service。
再见孙悟空_
2023/07/17
4170
Android学习笔记(八)深入分析Service启动、绑定过程
codingblock
2017/12/29
1.1K0
Android学习笔记(八)深入分析Service启动、绑定过程
android service原理及免杀(1)
service服务是一个应用程序的四大组件之一,可以在后台执行长时间运行的操作,不提供用户界面。一个应用程序组件可以启动一个服务,它将继续在后台运行,即使用户切到另一个应用程序。此外,一个组件可以绑定到一个服务与它交互,甚至执行进程间的通信(IPC)
随心助手
2019/11/19
9730
Service介绍
使用 start 方式启动的生命周期:onCreate() – > onStartCommand() – > onDestory() 注意: 如果服务已经开启,不会重复回调 onCreate() 方法,如果再次调用 context.startService() 方法,service 而是会调用onStart() 或者 onStartCommand() 方法。停止服务需要调用 context.stopService() 方法,服务停止的时候回调 onDestory 被销毁。 特点: 一旦服务开启就跟调用者(开启者)没有任何关系了。开启者退出了,开启者挂了,服务还在后台长期的运行,开启者不能调用服务里面的方法。
是阿超
2022/11/16
8760
Android中BindService和StartService「建议收藏」
service就是android系统中的服务,它有这么几个特点:它无法与用户直接进行交互、它必须由用户或者其他程序显式的启动、它的优先级比较高,它比处于 前台的应用优先级低,但是比后台的其他应用优先级高,这就决定了当系统因为缺少内存而销毁某些没被利用的资源时,它被销毁的概率很小哦。 二、那么,什么时候,我们需要使用service呢? 我们知道,service是运行在后台的应用,对于用户来说失去了被关注的焦点。这就跟我们打开了音乐播放之后,便想去看看图片,这时候我们还不想音乐停止,这里就会用到service;又例如,我们打开了一个下载链接之后,我们肯定不想瞪着眼睛等他下载完再去做别的事情,对吧?这时候如果我们想手机一边在后台下载,一边可以让我去看看新闻啥的,就要用到service。 三、service分类: 一般我们认为service分为两类,本地service和远程service。 本地service顾名思义,那就是和当前应用在同一个进程中的service,彼此之间拥有共同的内存区域,所以对于某些数据的共享特别的方便和简单; 远程service:主要牵扯到不同进程间的service访问。因为android的系统安全的原因导致了我们在不同的进程间无法使用一般的方式共享数据。在这里android为我们提供了一个AIDL工具。(android interface description language)android接口描述语言。在后边我们将会对其进行详细的介绍。 四、service生命周期: 和Activity相比,service的生命周期已经简单的不能再简单了,只有onCreate()->onStart()->onDestroy()三个方法。 Activity中和service有关的方法: startService(Intent intent):启动一个service stopService(Intent intent) :停止一个service 如果我们想使用service中的一些数据或者访问其中的一些方法,那么我们就要通过下面的方法: public boolean bindService(Intent intent, ServiceConnection conn, int flags) ; public void unbindService(ServiceConnection conn); intent是跳转到service的intent,如 Intent intent = new Intent(); intent.setClass(this,MyService.class); conn则是一个代表与service连接状态的类,当我们连接service成功或失败时,会主动触发其内部的onServiceConnected或onServiceDisconnected方法。如果我们想要访问service中的数据,可以在onServiceConnected()方法中进行实现,
全栈程序员站长
2022/08/30
1.6K0
Android中BindService和StartService「建议收藏」
Android 四大组件学习之Service四
本节学习Service的生命周期。 既然Activity有生命周期,那同理Service也有自己的生命周期。
DragonKingZhu
2022/05/08
2860
Android 四大组件学习之Service四
Android四大组件之Service
Hi,大家好,上一期我们讲了如何使用BroadcastReceiver,这一期我们讲解Android四大组件之Service相关知识。每天一篇技术干货,每天我们一起进步。
下码看花
2019/09/02
9630
Android四大组件之Service
Service基础
Service是Android四大组件之一,主要两个目的: 后台运行和跨进程访问。
小小工匠
2021/08/16
2.1K0
android service详解(1)
(2)Service是可以在后台执行长时间运行操作而没有用户界面的应用组件。服务可由其他应用组件启动(如Activity),服务一旦被启动将在后台一直运行,即使启动服务的组件(Activity)已销毁也不受影响,除非系统必须回收内存资源,否则系统不会停止或销毁Service。
随心助手
2019/10/15
1.5K0
android service详解(1)
startService bindService 区别「建议收藏」
Android执行Service有两种方法,一种是startService,一种是bindService。下面让我们一起来聊一聊这两种执行Service方法的区别。
全栈程序员站长
2022/09/01
6070
startService bindService 区别「建议收藏」
Android:(本地、可通信的、前台、远程)Service使用全面介绍
用法很简单,只需要在原有的Service类对onCreate()方法进行稍微修改即可,如下图:
Carson.Ho
2019/02/22
1.3K0
Android基础总结(8)——服务
服务(Service)是Android中实现程序后台运行的解决方案,它非常适合用于去执行哪些不需要和用户交互而且还要长期运行的任务。服务的运行不依赖任何用户界面,即使当程序被切换到后台,或者用户打开了另外一个应用程序,服务仍然能够保持正常运行。不过需要注意的是:服务并不是运行在一个独立的进程当中,而是依赖于创建服务的应用程序进程,当某个应用程序进程被杀掉时,所有依赖于该进程的服务也会停止运行。   此外,我们也不要被服务的后台概念所迷惑,实际上服务并不会自动开启线程,所有的代码都是默认运行在主线程中。也就
mukekeheart
2018/02/27
1.7K0
Android基础总结(8)——服务
Android入门教程 | 四大组件之Service(前台服务,后台服务)
Service是一种可在后台执行长时间运行操作而不提供界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。
Android_anzi
2021/10/20
6.5K0
2016级移动应用开发在线测试12-service
1. Service是Android系统中的四大组件之一(Acitivty、Service、ContentProvider、BroadcastReceiver),以下关于Service描述错误的是()  
达达前端
2022/04/29
6600
【Android】Service介绍和生命周期
Service是Android程序中四大基础组件之一,它和Activity一样都是Context的子类,只不过它没有UI界面,是在后台运行的组件。Service是Android中实现程序后台运行的解决方案,它非常适用于去执行那些不需要和用户交互而且还要求长期运行的任务。
人不走空
2024/07/16
7160
【Android】Service介绍和生命周期
相关推荐
Android Service用法知识点的讲解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档