表的连接

目录

内连接实现效果

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

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

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

确定所需要的数据表

 确定已知的关联字段


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.mzph.cn/news/683827.shtml

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

相关文章

螺旋矩阵 III(c++题解)

题目描述 在 rows x cols 的网格上,你从单元格 (rStart, cStart) 面朝东面开始。网格的西北角位于第一行第一列,网格的东南角位于最后一行最后一列。 你需要以顺时针按螺旋状行走,访问此网格中的每个位置。每当移动到网格的边界之外时&…

多模态基础--- word Embedding

1 word Embedding 原始的单词编码方式: one-hot,维度太大,不同单词之间相互独立,没有远近关系区分。 wordclass,将同一类单词编码在一起,此时丢失了类别和类别间的相关信息,比如class1和class3…

应急响应实战笔记02日志分析篇(3)

第3篇:Web日志分析 ox01 Web日志 Web访问日志记录了Web服务器接收处理请求及运行时错误等各种原始信息。通过对WEB日志进行的安全分析,不仅可以帮助我们定位攻击者,还可以帮助我们还原攻击路径,找到网站存在的安全漏洞并进行修复。 我们来…

【牛客面试必刷TOP101】Day21.BM11 链表相加(二)和BM12 单链表的排序

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:牛客面试必刷TOP101 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!&…

算法详解:滑动窗口-- 最大连续1的个数 III

题目来源:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 本期讲解滑动窗口经典例题,我会从三个点开始讲解题目1.题目解析2.算法原理 3.编写代码 1.题目解析 这道题目理解起来还是比较简单的,我们简单分析一下,也就是给定一个数组,数组是由1和0组成…

红日靶场2学习

靶场下载来自: http://vulnstack.qiyuanxuetang.net/vuln/detail/3/ 靶场统一登录密码:1qazWSX 按大佬的说法是 环境需要模拟内网和外网两个网段,PC端虚拟机相当于网关服务器,所以需要两张网卡,一个用来向外网提供web…

LEETCODE 315. 计算右侧小于当前元素的个数(归并)

class Solution { public: // 将count声明为publicvector<int> count; vector<int> indexs,tmp;public:vector<int> countSmaller(vector<int>& nums) {//归并int left0;int rightnums.size()-1;//计数// vector<int> count(nums.size()); …

银河麒麟V10开机后黑屏解决方法

情况描述&#xff1a; 单位的国产化电脑采用银河麒麟V10系统&#xff0c;在使用了近两个月时间后&#xff0c;开机到加载桌面那一步无法加载图形化桌面。 原理讲解 Linux本是纯命令行形式的系统&#xff0c;银河麒麟基于Linux中的Ubuntu LTS内核开发&#xff0c;其图形化的品牌…

【web | CTF】BUUCTF [护网杯 2018] easy_tornado

天命&#xff1a;这题是框架性的漏洞&#xff0c;Python的web服务器框架&#xff0c;应该已经比较古老了 开局先看一下三个文件 简单阅读后会发现&#xff0c;这里存在文件包含漏洞&#xff0c;可以直接读取文件&#xff0c;但是有一个哈希值校验 一开始我以为是扫描文件后得到…

学习笔记17:AtCoder Beginner Contest 340

C C - Divide and Divide (atcoder.jp) 1e17暴力肯定不行 模拟暴力的过程我们发现很多运算是重复的 记忆化一下 #include<iostream> #include<cstring> #include<cmath> #include<algorithm> #include<queue> #include<vector> #incl…

关于npmlink的问题

深入浅出关于Npm linl的问题 关键词&#xff1a; vue3报错 Uncaught TypeError: Cannot read properties of null (reading ‘isCE‘) at renderSlot npm link 无法实现热更新 我的开发环境是 “vue”: “^3.2.13” 今天在使用 rollup搭建组件库的时候我发现我的组件库不能…

第22讲基于springboot+vue权限系统二次开发环境准备

基于springbootvue权限系统二次开发环境准备 基于这个系统二次开发&#xff0c;不重复造轮子&#xff1b; 基于这个系统二次开发&#xff0c;不重复造轮子&#xff1b; 一&#xff0c;权限系统环境准备 二&#xff0c;数据库表整合投票系统数据库 二&#xff0c;修改标题&a…

Vue中@change、@input和@blur、@focus的区别及@keyup介绍

Vue中change、input和blur、focus的区别及keyup介绍 1. change、input、blur、focus事件2. keyup事件3. 补充&#xff1a;el-input的change事件自定义传参 1. change、input、blur、focus事件 change在输入框发生变化且失去焦点后触发&#xff1b; input在输入框内容发生变化后…

QRegExp的学习

【QT学习】QRegExp类正则表达式&#xff08;一文读懂&#xff09;-CSDN博客 [ ]:匹配括号内输入的任意字符 例&#xff1a;[123]:可以是1或2或3 {m&#xff0c;n}表达式至少重复m次&#xff0c;至多重复n次。 例&#xff1a;"ba{1,3}"可以匹配 "ba"或&…

贪心算法练习day1

练习1--翻硬币 1&#xff09;题目及要求 2&#xff09;解题思路 输入的是字符串&#xff0c;要想将两组字符串进行一一对比&#xff0c;需要将字符串转换成字符数组&#xff0c;再使用for循环依次遍历字符数组&#xff0c;进行比对。 输入两行字符串&#xff0c;转换成两个字…

干货 | 实战演练基于加密接口测试测试用例设计

如果接口测试仅仅只是掌握一些requests或者其他一些功能强大的库的用法&#xff0c;是远远不够的&#xff0c;还需要具有根据公司的业务以及需求去定制化一个接口自动化测试框架能力。所以在这个部分&#xff0c;会主要介绍接口测试用例分析以及通用的流程封装是如何完成的。 首…

Java实现课程案例资源库系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员需求分析2.2 用户需求分析 三、系统设计3.1 业务流程设计3.1.1 管理员业务流程设计3.1.2 用户业务流程设计3.1.3 首页功能模块及业务流程分析3.1.4 案例资源中心功能模块及业务流程分析3.1.5 用户信息中心功能模块…

html从零开始7:文档流、浮动、清除浮动,定位【搬代码】

文档流 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, init…

甲亢和糖尿病有什么关系吗?

甲亢和糖尿病之间的关系是一个备受关注的话题&#xff0c;两者之间确实存在一定的关联。这种关联可以从多个角度进行探讨。 首先&#xff0c;甲亢和糖尿病都是内分泌系统的疾病。甲亢是由于甲状腺激素分泌过多引起的&#xff0c;而糖尿病则是由于胰岛素分泌不足或作用障碍导致…

树莓派4B(Raspberry Pi 4B)使用docker搭建阿里巴巴sentinel服务

树莓派4B&#xff08;Raspberry Pi 4B&#xff09;使用docker搭建阿里巴巴sentinel服务 由于国内访问不了docker hub&#xff0c;而国内镜像仓库又没有适配树莓派ARM架构的sentinel镜像&#xff0c;所以我们只能退而求其次——自己动手构建镜像。本文基于Ubuntu&#xff0c;Jav…