表的连接

目录

内连接实现效果

使用左外连接,将所有的员工信息都显示出来,即便他没有对应的部门

使用右外连接,将所有的部门信息都显示出来

查询每个员工的编号、姓名、职位,以及所在各部门的领导姓名、领导职位

确定所需要的数据表

 确定已知的关联字段


Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645

实际上对两张数据表进行多表查询时,消除笛卡尔积主要依靠连接模式处理,而对于表的连接模式,在数据库定义上有两种

●  内连接:之前都利用 where子句消除了笛卡尔积,这就属于内连接,只有满足条件的数据才会显示。
●   外连接:分为 3 种,左外连接、右外连接、全外连接

为了更好地观察连接的区别,在 dept 表中提供了一个没有员工的部门(40 部门) ,同时在 emp 表 中增加一个没有部门的员工 

insert into emp(empno,ename,deptno) values(8989,'HELLO',null);

insert语句是向数据表中插入记录,在后面将重点介绍

大家执行之后会发现多了一行数据

新增的记录 deptno 字段没有部门编号

内连接实现效果

SQL> select e.empno,e.ename,d.deptno,d.dname2  from emp e,dept d3  where e.deptno=d.deptno;EMPNO ENAME                    DEPTNO DNAME
---------- -------------------- ---------- ----------------------------7839 KING                         10 ACCOUNTING7782 CLARK                        10 ACCOUNTING7934 MILLER                       10 ACCOUNTING7902 FORD                         20 RESEARCH7369 SMITH                        20 RESEARCH7566 JONES                        20 RESEARCH7900 JAMES                        30 SALES7844 TURNER                       30 SALES7654 MARTIN                       30 SALES7521 WARD                         30 SALES7499 ALLEN                        30 SALES

此时,没有部门的员工以及没有员工的部门信息都没有出现,因为nul 的判断不满足

使用左外连接,将所有的员工信息都显示出来,即便他没有对应的部门

SQL> select e.empno,e.ename,d.deptno,d.dname2  from emp e,dept d3  where e.deptno=d.deptno(+);EMPNO ENAME                    DEPTNO DNAME
---------- -------------------- ---------- ----------------------------7782 CLARK                        10 ACCOUNTING7839 KING                         10 ACCOUNTING7934 MILLER                       10 ACCOUNTING7369 SMITH                        20 RESEARCH7566 JONES                        20 RESEARCH7902 FORD                         20 RESEARCH7499 ALLEN                        30 SALES7521 WARD                         30 SALES7654 MARTIN                       30 SALES7698 BLAKE                        30 SALES7844 TURNER                       30 SALES7900 JAMES                        30 SALES8989 HELLO

此时没有部门的员工出现了,也就是说左表的数据全部显示了

使用右外连接,将所有的部门信息都显示出来

SQL> select e.empno,e.ename,d.deptno,d.dname2  from emp e,dept d3  where e.deptno(+)=d.deptno;EMPNO ENAME                    DEPTNO DNAME
---------- -------------------- ---------- ----------------------------7839 KING                         10 ACCOUNTING7782 CLARK                        10 ACCOUNTING7934 MILLER                       10 ACCOUNTING7902 FORD                         20 RESEARCH7369 SMITH                        20 RESEARCH7566 JONES                        20 RESEARCH7900 JAMES                        30 SALES7844 TURNER                       30 SALES7654 MARTIN                       30 SALES7521 WARD                         30 SALES7499 ALLEN                        30 SALES7698 BLAKE                        30 SALES40 OPERATIONS

此时没有员工的部门出现了,也就是说右表的数据全部显示了

通过这几个范例可以看出,内连接指的是所有满足关联条件的数据出现,不满足的不出现。外连接是指定一张数据表中的全部内容都显示,但是没有对应的其他表数据,内容为 null

在 Oracle 里面使用“(+)”来控制连接方式

●   左外连接:关联字段 1= 关联字段 2(+)

●   右外连接:关联字段 1(+)= 关联字段 2

一般都只考虑内连接,但是当你发现所需要的数据不全的时候就可以考虑外连接。现在再来看一个范例,从而加深对外连接的认识 

查询每个员工的编号、姓名、职位,以及所在各部门的领导姓名、领导职位

确定所需要的数据表

emp 表(员工信息) :编号、姓名、职位

memp 表(领导信息) :领导姓名、领导职位

 确定已知的关联字段

员工和领导: emp.mgr=memp.empno。

第一步:查询出每个员工的编号、姓名、职位

SQL> select e.empno,e.ename,e.job2  from emp e;EMPNO ENAME                JOB
---------- -------------------- ------------------7369 SMITH                CLERK7499 ALLEN                SALESMAN7521 WARD                 SALESMAN7566 JONES                MANAGER7654 MARTIN               SALESMAN7698 BLAKE                MANAGER7782 CLARK                MANAGER7839 KING                 PRESIDENT7844 TURNER               SALESMAN7900 JAMES                CLERK7902 FORD                 ANALYST7934 MILLER               CLERK8989 HELLO

 此时只显示数据表 emp 中每个员工的编号、姓名和职位

第二步:加入领导信息,需要引入自身关联,而后消除笛卡尔积

SQL> select e.empno,e.ename,e.job,m.ename,m.job2  from emp e,emp m3  where e.mgr=m.empno;EMPNO ENAME                JOB                ENAME                JOB
---------- -------------------- ------------------ -------------------- ------------------7902 FORD                 ANALYST            JONES                MANAGER7499 ALLEN                SALESMAN           BLAKE                MANAGER7521 WARD                 SALESMAN           BLAKE                MANAGER7654 MARTIN               SALESMAN           BLAKE                MANAGER7844 TURNER               SALESMAN           BLAKE                MANAGER7900 JAMES                CLERK              BLAKE                MANAGER7934 MILLER               CLERK              CLARK                MANAGER7566 JONES                MANAGER            KING                 PRESIDENT7698 BLAKE                MANAGER            KING                 PRESIDENT7782 CLARK                MANAGER            KING                 PRESIDENT7369 SMITH                CLERK              FORD                 ANALYST

第三步:发现 emp 表(员工信息)数据不完整,因为不满足于等值关联判断,所以要想让员工信息显示完整,则必须使用外连接控制

SQL> select e.empno,e.ename,e.job,m.ename,m.job2  from emp e,emp m3  where e.mgr=m.empno(+);EMPNO ENAME                JOB                ENAME                JOB
---------- -------------------- ------------------ -------------------- ------------------7902 FORD                 ANALYST            JONES                MANAGER7499 ALLEN                SALESMAN           BLAKE                MANAGER7521 WARD                 SALESMAN           BLAKE                MANAGER7654 MARTIN               SALESMAN           BLAKE                MANAGER7844 TURNER               SALESMAN           BLAKE                MANAGER7900 JAMES                CLERK              BLAKE                MANAGER7934 MILLER               CLERK              CLARK                MANAGER7566 JONES                MANAGER            KING                 PRESIDENT7698 BLAKE                MANAGER            KING                 PRESIDENT7782 CLARK                MANAGER            KING                 PRESIDENT7369 SMITH                CLERK              FORD                 ANALYST7839 KING                 PRESIDENT8989 HELLO

此时使用了左外连接“e.mgr=m.empno(+)” ,得到了想要的结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/471163.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【web | CTF】BUUCTF [BJDCTF2020]Easy MD5

天命:好像也挺实用的题目,也是比较经典吧 天命:把php的MD5漏洞都玩了一遍 第一关:MD5绕过 先声明一下:这题的MD5是php,不是mysql的MD5,把我搞迷糊了 一进来题目啥也没有,那么就要看…

【数据结构】10 广义表与多重链表

广义表 广义表不仅跟线性表一样可以表示简单是线性顺序关系,而且可以表达更复杂的非线性多元关系。 G L i s t ( a 1 , a 2 , . . . , a i − 1 , a i , a i 1 , . . . , a n ) GList (a_1, a_2,...,a_{i-1},a_i,a_{i1},...,a_n) GList(a1​,a2​,...,ai−1​,…

【Android】使用Apktool反编译Apk文件

文章目录 1. 下载Apktool1.1 Apktool官网下载1.2 百度网盘下载 2. 安装Apktool3. 使用Apktool3.1 配置Java环境3.2 准备Apk文件3.3 反编译Apk文件3.3.1 解包Apk文件3.3.2 修改Apk文件3.3.3 打包Apk文件3.3.4 签名Apk文件 1. 下载Apktool 要使用Apktool,需要准备好 …

Elasticsearch:特定领域的生成式 AI - 预训练、微调和 RAG

作者:来自 Elastic Steve Dodson 有多种策略可以将特定领域的知识添加到大型语言模型 (LLM) 中,并且作为积极研究领域的一部分,正在研究更多方法。 对特定领域数据集进行预训练和微调等方法使 LLMs 能够推理并生成特定领域语言。 然而&#…

【JAVA-Day89】Java字符串和XML数据结构的转换

Java字符串和XML数据结构的转换 Java字符串和XML数据结构的转换,高效灵活转变数据摘要引言一、什么是XML二、XML格式的应用场景三、XML字符串转对象3.1 使用 DOM 解析器实现 XML 字符串转对象3.2 使用 JAXB 实现 XML 字符串转对象 四、XML对象转字符串4.1 使用 DOM …

【AI绘画】硬核解读Stable Diffusion(完整版) 小白必收藏!!!

手把手教你入门绘图超强的AI绘画,用户只需要输入一段图片的文字描述,即可生成精美的绘画。给大家带来了全新保姆级教程资料包 (文末可获取) 2022年可谓是AIGC(AI Generated Content)元年,上半年…

VitePress-15- 配置- description 的作用详解

作用描述 1、descriptioin 是站点的描述&#xff0c; 会被解析为 html 页面的 <meta name"description" content "xxx"> 标签 。2、description 本身就是 <meta> 标签的一种&#xff0c;不会在页面上展示出来&#xff0c; 仅仅是作为页面的一…

【MySQL/Redis】如何实现缓存一致

目录 不实用的方案 1. 先写 MySQL , 再写 Redis 2. 先写 Redis &#xff0c; 再写MySQL 3. 先删 Redis&#xff0c;再写 MySQL 实用的方案 1. 先删 Redis&#xff0c;再写 MySQL, 再删 Redis 2. 先写 MySQL , 再删 Redis 3. 先写MySQL&#xff0c;通过BinLog&#xff0…

中国金融体系与金融监管详解,国内金融机构业务与产品大全

一、教程描述 本套教程讲解了国内金融监管的相关规则和基础设施&#xff0c;以及国内金融机构的全线业务和金融产品&#xff0c;可以帮助你搭建国内金融体系的知识框架模型。本套金融体系教程&#xff0c;大小1.66G&#xff0c;共有25个文件。 二、教程目录 01、金融机构与金…

【算法设计与分析】搜索旋转排序数组

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 题目 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff…

【PyQt】12-滑块、计数控件

文章目录 前言一、滑块控件 QSlider运行结果 二、计数器控件 QSpinBox运行结果 总结 前言 1、滑块控件 2、计数控件 一、滑块控件 QSlider #Author &#xff1a;susocool #Creattime:2024/2/15 #FileName:28-滑块控件 #Description: 通过滑块选择字体大小 import sys from PyQ…

安全基础~通用漏洞4

文章目录 知识补充XSS跨站脚本**原理****攻击类型**XSS-后台植入Cookie&表单劫持XSS-Flash钓鱼配合MSF捆绑上线ctfshow XSS靶场练习 知识补充 SQL注入小迪讲解 文件上传小迪讲解 文件上传中间件解析 XSS跨站脚本 xss平台&#xff1a; https://xss.pt/ 原理 恶意攻击者…