表的连接

目录

内连接实现效果

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

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

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

确定所需要的数据表

 确定已知的关联字段


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.dname
  2  from emp e,dept d
  3  where e.deptno=d.deptno;

     EMPNO ENAME                    DEPTNO DNAME
---------- -------------------- ---------- ----------------------------
      7839 KING                         10 ACCOUNTING
      7782 CLARK                        10 ACCOUNTING
      7934 MILLER                       10 ACCOUNTING
      7902 FORD                         20 RESEARCH
      7369 SMITH                        20 RESEARCH
      7566 JONES                        20 RESEARCH
      7900 JAMES                        30 SALES
      7844 TURNER                       30 SALES
      7654 MARTIN                       30 SALES
      7521 WARD                         30 SALES
      7499 ALLEN                        30 SALES

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

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

SQL> select e.empno,e.ename,d.deptno,d.dname
  2  from emp e,dept d
  3  where e.deptno=d.deptno(+);

     EMPNO ENAME                    DEPTNO DNAME
---------- -------------------- ---------- ----------------------------
      7782 CLARK                        10 ACCOUNTING
      7839 KING                         10 ACCOUNTING
      7934 MILLER                       10 ACCOUNTING
      7369 SMITH                        20 RESEARCH
      7566 JONES                        20 RESEARCH
      7902 FORD                         20 RESEARCH
      7499 ALLEN                        30 SALES
      7521 WARD                         30 SALES
      7654 MARTIN                       30 SALES
      7698 BLAKE                        30 SALES
      7844 TURNER                       30 SALES
      7900 JAMES                        30 SALES
      8989 HELLO

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

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

SQL> select e.empno,e.ename,d.deptno,d.dname
  2  from emp e,dept d
  3  where e.deptno(+)=d.deptno;

     EMPNO ENAME                    DEPTNO DNAME
---------- -------------------- ---------- ----------------------------
      7839 KING                         10 ACCOUNTING
      7782 CLARK                        10 ACCOUNTING
      7934 MILLER                       10 ACCOUNTING
      7902 FORD                         20 RESEARCH
      7369 SMITH                        20 RESEARCH
      7566 JONES                        20 RESEARCH
      7900 JAMES                        30 SALES
      7844 TURNER                       30 SALES
      7654 MARTIN                       30 SALES
      7521 WARD                         30 SALES
      7499 ALLEN                        30 SALES
      7698 BLAKE                        30 SALES
                                        40 OPERATIONS

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

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

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

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

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

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

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

确定所需要的数据表

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

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

 确定已知的关联字段

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

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

SQL> select e.empno,e.ename,e.job
  2  from emp e;

     EMPNO ENAME                JOB
---------- -------------------- ------------------
      7369 SMITH                CLERK
      7499 ALLEN                SALESMAN
      7521 WARD                 SALESMAN
      7566 JONES                MANAGER
      7654 MARTIN               SALESMAN
      7698 BLAKE                MANAGER
      7782 CLARK                MANAGER
      7839 KING                 PRESIDENT
      7844 TURNER               SALESMAN
      7900 JAMES                CLERK
      7902 FORD                 ANALYST
      7934 MILLER               CLERK
      8989 HELLO

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

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

SQL> select e.empno,e.ename,e.job,m.ename,m.job
  2  from emp e,emp m
  3  where e.mgr=m.empno;

     EMPNO ENAME                JOB                ENAME                JOB
---------- -------------------- ------------------ -------------------- ------------------
      7902 FORD                 ANALYST            JONES                MANAGER
      7499 ALLEN                SALESMAN           BLAKE                MANAGER
      7521 WARD                 SALESMAN           BLAKE                MANAGER
      7654 MARTIN               SALESMAN           BLAKE                MANAGER
      7844 TURNER               SALESMAN           BLAKE                MANAGER
      7900 JAMES                CLERK              BLAKE                MANAGER
      7934 MILLER               CLERK              CLARK                MANAGER
      7566 JONES                MANAGER            KING                 PRESIDENT
      7698 BLAKE                MANAGER            KING                 PRESIDENT
      7782 CLARK                MANAGER            KING                 PRESIDENT
      7369 SMITH                CLERK              FORD                 ANALYST

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

SQL> select e.empno,e.ename,e.job,m.ename,m.job
  2  from emp e,emp m
  3  where e.mgr=m.empno(+);

     EMPNO ENAME                JOB                ENAME                JOB
---------- -------------------- ------------------ -------------------- ------------------
      7902 FORD                 ANALYST            JONES                MANAGER
      7499 ALLEN                SALESMAN           BLAKE                MANAGER
      7521 WARD                 SALESMAN           BLAKE                MANAGER
      7654 MARTIN               SALESMAN           BLAKE                MANAGER
      7844 TURNER               SALESMAN           BLAKE                MANAGER
      7900 JAMES                CLERK              BLAKE                MANAGER
      7934 MILLER               CLERK              CLARK                MANAGER
      7566 JONES                MANAGER            KING                 PRESIDENT
      7698 BLAKE                MANAGER            KING                 PRESIDENT
      7782 CLARK                MANAGER            KING                 PRESIDENT
      7369 SMITH                CLERK              FORD                 ANALYST
      7839 KING                 PRESIDENT
      8989 HELLO

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IMX6ULL移植U-Boot 2022.04

目录 目录 1.编译环境以及uboot版本 2.默认编译测试 3.uboot中新增自己的开发板 3.编译测试 4.烧录测试 5.patch文件 1.编译环境以及uboot版本 宿主机Debian12u-boot版本lf_v2022.04 ; git 连接GitHub - nxp-imx/uboot-imx: i.MX U-Boot交叉编译工具gcc-arm-10.3-2021.0…

机器学习:卷积介绍及代码实现卷积操作

传统卷积运算是将卷积核以滑动窗口的方式在输入图上滑动,当前窗口内对应元素相乘然后求和得到结果,一个窗口一个结果。相乘然后求和恰好也是向量内积的计算方式,所以可以将每个窗口内的元素拉成向量,通过向量内积进行运算&#xf…

关于nuclei-ai-extension

nuclei-ai-extension 🍁 Nuclei 官方开发的 利用 AI 生成 nuclei 模板的工具。Nuclei AI - 用于快速生成 Nuclei 模板的浏览器扩展,Nuclei AI Browser Extension建立在 cloud.projectdiscovery.io 之上,使用户能够从任何网页中提取漏洞信息&…

设计模式之创建型模式

创建型模式提供创建对象的机制,能够提升已有代码的灵活性和复用性 常用的有:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式。 不常用的有:原型模式。 4.1 单例模式 创建型模式提供创建对象的机制,能够提升已有代码的灵…

【MATLAB】在图框中加箭头文本注释

1、在图框中加 文本方法 —— text()函数 2、使用箭头标注——annotation()函数 X、Y是箭头的位置相对于整个方框的比例, [0.32,0.5]是指:x坐标从整个图形32%的地方到50%的地方(从左到右&…

基于laravel开发的开源交易所源码|BTC交易所/ETH交易所/交易所/交易平台/撮合交易引擎

开源交易所,基于Laravel开发的交易所 | BTC交易所 | ETH交易所 | 交易所 | 交易平台 | 撮合交易引擎。本项目有完整的撮合交易引擎源码、后台管理(后端前端)、前台(交易页面、活动页面、个人中心等)、安卓APP源码、苹果…

【蓝桥杯单片机入门记录】认识单片机

目录 单片机硬件平台 单片机的发展过程 单片机开发板 单片机基础知识 电平 数字电路中只有两种电平:高和低 二进制(8421码) 十六进制 二进制数的逻辑运算 “与” “或” “异或” 标准C与C51 如何学好单片机 端正学习的态度、培…

BUGKU-WEB 矛盾

题目描述 进入场景看看: 代码如下: $num$_GET[num]; if(!is_numeric($num)) { echo $num; if($num1) echo flag{**********}; }解题思路 需要读懂一下这段PHP代码的意思明显是一道get相关的题目,需要提供一个num的参数,然后需要传入一个不…

CSGO搬砖项目怎么样?分享一下个人的看法!

对于steam搬砖平台,无人不知,无人不晓啊,全球最大的一个游戏平台,像我们知道的PUBG,CS:GO,都是里面的,比较火的一个平台。 对于想了解Steam搬砖的,今天分享一下个人的看法。 首先&a…

【C语言】数据结构#实现堆

目录 (一)堆 (1)堆区与数据结构的堆 (二)头文件 (三)功能实现 (1)堆的初始化 (2)堆的销毁 (3)插入数据 …

java中stream流中的concat合并操作

可以用stream.of来合并两个流 public class Test7concat {public static void main(String[] args) {/*Stream流:static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b);合并2个流中的元素*/Stream<String> stream1 St…

石子合并+环形石子合并+能量项链+凸多边形的划分——区间DP

一、石子合并 (经典例题) 设有 N 堆石子排成一排&#xff0c;其编号为 1,2,3,…,N。 每堆石子有一定的质量&#xff0c;可以用一个整数来描述&#xff0c;现在要将这 N 堆石子合并成为一堆。 每次只能合并相邻的两堆&#xff0c;合并的代价为这两堆石子的质量之和&#xff0c;…

python系统学习Day2

section3 python Foudamentals part one&#xff1a;data types and variables 数据类型&#xff1a;整数、浮点数、字符串、布尔值、空值 #整型&#xff0c;没有大小限制 >>>9 / 3 #3.0 >>>10 // 3 #3 地板除 >>>10 % 3 #1 取余#浮点型&#xff…

[职场] 优质简历怎么做 #学习方法#笔记

优质简历怎么做 简历是求职的“敲门砖”&#xff0c;直接影响着求职成败。然而&#xff0c;不少求职者对简历不太重视&#xff0c;认为简历就是写自己的经历。因此&#xff0c;在招聘现场&#xff0c;常会看到这样的简历&#xff1a;有的是从某招聘网站直接下载而来&#xff0c…

LeetCode “AddressSanitizer:heat-use-after-free on address“问题解决方法

heat-use-after-free &#xff1a; 访问堆上已经被释放的内存地址 现象&#xff1a;同样代码在LeetCode上报错&#xff0c;但是自己在IDE手动打印并不会报错 个人猜测&#xff0c;这个bug可能来源于LeetCode后台输出打印链表的代码逻辑问题。 问题描述 题目来自LeetCode的8…

五官行为检测(表情基)解决方案提供商

随着人工智能技术的日益成熟&#xff0c;情感识别与行为分析在企业界的应用逐渐广泛。美摄科技作为业内领先的五官行为检测&#xff08;表情基&#xff09;解决方案提供商&#xff0c;致力于为企业提供高效、精准的情感识别与行为分析服务。 美摄科技的五官行为检测&#xff0…

Linux系统编程(四)进程

一、进程的产生&#xff08;fork&#xff09; fork(2) 系统调用会复制调用进程来创建一个子进程&#xff0c;在父进程中 fork 返回子进程的 pid&#xff0c;在子进程中返回 0。 #include <sys/types.h> #include <unistd.h>pid_t fork(void); fork 后子进程不继…

java 调用智谱ai 大模型的完整步骤(国内的 AI 大模型 对话)

要使用java 调用智谱AI的API进行异步调用&#xff0c;您需要遵循以下步骤&#xff1a; 1. **获取API密钥**&#xff1a; - 您需要从智谱AI平台获取一个API密钥&#xff08;API Key&#xff09;&#xff0c;这个密钥将用于所有API请求的身份验证。 2. **SDK源…

使用第三方幻兽帕鲁应用模板部署游戏后,是否需要更新?

需要更新&#xff0c;因为幻兽帕鲁官方客户端更新&#xff0c;所以服务器也需要同步更新&#xff0c;才能继续游玩。版本不一致的话&#xff0c;是不能进入游戏的。 有两种更新方法&#xff1a; 如果你使用幻兽帕鲁应用模板部署游戏&#xff0c;那么可以选择使用游戏配置面板一…

Android14之Android Rust模块编译语法(一百八十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…