【MySQL】 复合查询 | 内外连接
文章目录
- 1. 复合查询
- 多表笛卡尔积
- 自连接
- 在where子句使用子查询
- 单行子查询
- 多行子查询
- in关键字
- all关键字
- any关键字
- 多列子查询
- 在from子句中使用子查询
- 合并查询
- union
- union all
- 2. 内连接
- 3. 外连接
- 左外连接
- 右外连接
1. 复合查询
多表笛卡尔积
显示雇员名、雇员工资以及所在部门的名字
由于员工 信息属于 emp表 而所在部门名字属于 dept表
数据来自不同的表,所以需要进行多表查询

表示从 emp (员工表) 和dept (部门表) 中获取信息

分别用emp员工的信息 与 dept 部门表的信息 做 穷举 组合
就称 两张表 进行笛卡尔积
就把两张表 变成了 一张表 ,就可以进行单表查询

如 smith 本来是20号部门的,把10号部门的信息传过来 是没有意义的

输入 select * from emp,dept where emp.deptno =dept.deptno;
把对应的部门号 与部门信息 匹配上

输入 select ename ,sal,dname from emp,dept where emp.deptno =dept.deptno;
就可以显示雇员名、雇员工资以及所在部门的名字
自连接
自连接 指的是在同一张表连接查询

将同一张表单纯的写两次,是不可以一起查询的

可以把同一张表的表名通过重命名的方式 分别 进行不同命名 即可
把对同一张表 进行笛卡尔积的 行为 叫做 自连接
显示员工FORD的上级领导的编号和姓名
先找 员工FORD 和领导编号 ,与员工表有关
再通过领导的编号,找领导信息,也是与员工表有关
所以就需要借助 自连接

输入 select e2.ename ,e2.empno from emp e1,emp e2 where e1.ename=‘FORD’ and e1.mgr=e2.empno;
通过第一张表emp中的 员工FORD, 找到对应的领导编号,正好对应第二张emp表的员工编号
所以设置 e1.mgr =e2.empno
这样就可以 通过员工FORD 找到 对应的 领导 的名字和编号
在where子句使用子查询
子查询 是指嵌入其他sql语句中的select语句,也叫嵌套查询
单行子查询
返回一行记录的子查询

查看emp表 的员工信息

想要查看工资最高的员工的名字和工作岗位
首先 要找到 最高工资,但是发现这样写是不可以的
子查询: 在 一条sql内部 再执行 select查询
先执行内部的sql语句,再执行外部的sql语句

先找到 最高工资 ,再通过最高工资找到对应这个人的名字和工作信息
多行子查询
返回多行记录的子查询
in关键字
用来进行判断一个对应的列值是否在一个集合当中
若在集合中,则为查找成功
查询和10号部门的工作岗位相同雇员的名字、岗位、工资、部门号 ,但是不包含10号自己的

首先要找到10号部门的工作岗位

再通过in关键字,只有工作种类在 10号部门的工作岗位的集合中 ,才能返回

使用and 关键字 ,同时也不包含10号部门的人的信息
all关键字
表示所有人
显示工资比部门30的所有员工的工资高的员工的姓名 、工资 和部门号

先取到 30号部门的所有员工对应的工资
加入 distinct 去除重复的工资

all (select distinct sal from emp where deptno=30) 表示大于 30号部门的所有员工的薪资
any关键字
表示比任意一个高
显示工资比部门30的任意员工的工资高的员工的排名(包含自己部门)

先取到 30号部门的所有员工对应的工资
加入 distinct 去除重复的工资

any(select distinct sal from emp where deptno=30) 表示大于 30号部门的任意员工的薪资
多列子查询
多列子查询 是指 返回多个列数据的子查询语句
查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人

首先要找到SMITH对应的部门和岗位

因为要比较的是 两个条件 部门和岗位
而mysql 支持 圆括号 直接写两列
将SMITH 对应的部门和岗位作为筛选条件

还需添加条件 ename <> ‘SMITH’ 不能为SMITH员工本身
在from子句中使用子查询
在查询语句在from子句中,把一个子查询当作一个临时表使用
显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资

首先找到每个部门的平均工资
通过group by 将各个部门分开,再获取对应的每个部门的平均工资

将 select deptno,avg(sal) from emp group by deptno 整体操作所形成的数据 看作一张表,并重命名为 tmp,与emp表 做 笛卡尔积

寻找到emp表的部门号 与 tmp表的部门号 相同的 数据 才是合适的,所以加上 emp.deptno=tmp.deptno

select deptno,avg(sal) myavg from emp group by deptno
为了不让其在后面比较起冲突,所以 将avg(sal) 重命名为 myavg
再添加 emp.sal > tmp.myavg 筛选条件,显示每个高于自己部门平均工资的员工信息
合并查询
为了合并多个select的执行结果,可以使用集合符 union 和 union all
union

该操作符用于取得 两个结果集的并集,当使用该操作符时,会自动去掉结果集中的重复行

select * from emp where sal>2500 即工资大于2500 的人的信息

select * from emp where job=‘MANAGER’ 即工作岗位为 manager的人的信息
发现两者使用重合信息存在的,所以可以使用 union

使用 union ,会自动去除 两者 重合部分的 重复数据
union all
在union的基础上,不会去除重复部分的重复数据

重复的数据会被保留
2. 内连接
内连接 是指 使用where子句对两种表形式的笛卡尔积 进行筛选
语法:
select 字段 from 表1 inner join 表2 on 连接条件 and 连接条件;
显示SMITH的名字和部门名称

筛选条件为 emp.deptno=dept.deptno and ename=‘SMITH’
表示 两张表的 对应 部门号 要相同 ,同时 名字为 SMITH
3. 外连接
左外连接
左侧表完全显示 右侧的表按条件拼接(条件满足拼接,条件不满足拼NULL)
语法:
select 字段名 from 表名1 left join 表名2 on 连接条件
相对于内连接的语法,外连接语法只是把inner 替换成了 left

创建一张表 stu ,内部包含 id 和 name

向stu表中 插入对应的数据 ,并 将其显示出来

再次创建一张成绩表 exam ,内部 包含id 和grade

向exam表中 插入对应的数据,并将其显示出来

发现stu 学生表中 有四名同学,而exam成绩表中 只有三个成绩
而且成绩表中有一个 不存在的id值为11 的学生
查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来

由于有些学生是没有成绩的,就导致两张表中的id 匹配不上
若只拿id 做内连接,就只有 id值为 1 2 的信息能够显示

为了保证所有学生的信息都显示,所以使用 左外连接
右外连接
左侧的表按条件拼接(条件满足拼接,条件不满足拼NULL) 右侧表完全显示
语法:
select 字段 from 表名1 right join 表名2 on 连接条件
对stu表和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要
显示出来

stu 学生表中 有四名同学,而exam成绩表中 只有三个成绩
而且成绩表中有一个 不存在的id值为11 的学生

此时右侧exam表的三个id值 全部显示出来了
左侧stu表 由于只有两个id值与exam表中的id值对应,所以只显示2个,剩下显示为NULL
相关文章:

【MySQL】 复合查询 | 内外连接
文章目录 1. 复合查询多表笛卡尔积自连接在where子句使用子查询单行子查询多行子查询in关键字all关键字any关键字 多列子查询 在from子句中使用子查询合并查询unionunion all 2. 内连接3. 外连接左外连接右外连接 1. 复合查询 多表笛卡尔积 显示雇员名、雇员工资以及所在部门…...

【linux】麒麟v10安装openjdk8
openjdk的官网 点我就到官网 jdk8的网址 安装 yum install -y java-1.8.0-openjdk-devel 出现Complete! 就是安装完成。 验证 java -version配置环境变量 查找安装路径 find / -name java 修改配置文件 vim /etc/profile 增加内容 export JAVA_HOME/usr/lib/jvm/j…...
项目部署与上线
文章目录 多环境前端后端 原始部署安装nginx部署前端部署后端 宝塔Linux部署前端部署后端部署 Docker部署Docker平台部署(√)绑定域名跨域问题解决 多环境 项目部署上线 原始前端/后端宝塔Linux容器容器平台 多环境 同一套项目代码,在不…...
系统架构主题之八:非功能性需求对系统架构及设计的影响
从大的方面来讲,软件系统的需求分为功能性需求和非功能性需求。功能性需求一般由业务分解而来,是直接面向用户的需求,也是直接体现用户价值的需求。非功能性需求一般多是由功能性需求的内在要求衍生而来,其价值更多的体现在对功能…...

盛元广通化工实验室管理系统
随着时代的进步和网络技术的普及应用,管理化工实验室的日常工作和实验过程,企业科研单位对信息化、智能化和安全性日趋要求严格,根据化工实验室的实际需求出发,从完整的开发框架、调度引擎和丰富的组件、页面样例等快速响应应用需…...

代码没注释?一个方法几百行?
干程序员的都有接收别人的代码的经历,大部分时候,我们都会偷偷骂一句“这人是傻逼吧,这代码写的这么烂!” “一个方法写几百行,还没有注释,鬼知道写的什么东西!” 现在,你不需要为…...

Angular-04:指令
① 内置指令1.1 *ngIf 结构指令1.2 [hidden] 属性指令1.3. *ngFor 结构指令1.4 *ngSwitch 结构指令 ② 自定义指令用法 指令是angular操作dom的途径,分为属性指令和结构指令。属性指令:修改元素的外观或行为。使用 [ ] 包裹。结构指令:增加、…...

[SpringCloud] Eureka 与 Ribbon 简介
目录 一、服务拆分 1、案例一:多端口微服务 2、案例二:服务远程调用 二、Eureka 1、Eureka 原理分析 2、Eureka 服务搭建(注册 eureka 服务) 3、Eureka 服务注册(注册其他服务) 4、Eureka 服务发现…...

【Python 零基础入门】常用内置函数 再探
【Python 零基础入门】内容补充 1 常用内置函数 Python 简介为什么要学习内置函数集合操作len(): 计算长度sorted(): 排序all(): 检查所有元素any(): 检查任一元素filter(): 过滤元素map(): 应用函数zip(): 组合元素 文件操作和输入输出open(): 打开文件read(): 读取文件write(…...

10.30二叉树一些性质,找公共祖先(一般与搜索树),操作的复杂度,选择题细节
课上 一些结论,性质 n0,n1,n2指的是子结点的数量,n0没有子节点,叶子结点 n2*n2n11,若n1为奇数,则n为偶数,不然,则为奇数 满二叉树 没有度为1的结点,即每个结点要么没有孩子结点,要么…...

亮氨酸脯氨酸肽——一种新型的医药中间体研究肽
亮氨酸脯氨酸医药中间体肽是一种合成(人造)激素,类似于大脑中产生的天然激素。它用于治疗许多医疗问题,包括: 子宫平滑肌瘤(子宫肌瘤)出血引起的贫血,或晚期或晚期前列腺癌症&#…...

Ubuntu 22.04 开机闪logo后卡在/dev/sda3: clean
环境 Vmware 17.0.0,CPU 2,内存4G,硬盘50G Ubuntu 22.04 问题描述 开机 --> 显示两行代码 --> 显示ubuntu logo --> 左上显示两个代码卡住不动 原因分析 1、网上大多说显卡驱动,最近没安装相关软件,也没…...
avue-crud 自定义列
基本设置: option: {columnBtn: false,refreshBtn: false,addBtn: false,delBtn: false,editBtn: false,viewBtn: false,searchShowBtn: false,height: auto,maxHeight: auto,calcHeight: 70,searchLabelWidth: 58,tip: false,searchShow: false,searchMenuSpan: 6…...

达索系统SOLIDWORKS 2024 装配体新增功能
如今市场环境紧迫,许多企业在这样的情形之下,都需要尽快将产品推向市场,赢得头筹。所以产品设计需要快速进行装配验证,以确保产品功能和性能的准确性和可靠性,同时原型或样机的制造和装配需要尽快完成,以满…...
电脑入门:电脑专业英语500词,供新手参考
1. file n. 文件;v. 保存文件 2. command n. 命令,指令 3. use v. 使用,用途 4. program n. 程序 5. line n. (数据,程序)行,线路 6. if conj. 如果 7. display vt. 显示,显示器 8. set v. 设置,n. 集合 9. key n. 键,关键字,关键码 10. list n. 列表,显示,…...

采购管理工具-采购软件-Leangoo免费看板工具
我们可以按照公司的实际情况定制采购流程。 1、在Leangoo免费看板工具中创建一个项目,项目类型建议选择“轻量级协作”,项目模版建议选择“人事与行政” 系统会自动为您创建四个看板,如下图: 图1 2、在项目内创建一个 “办公室采…...

【23真题】大神凭这套拿452分!看看你能拿多少?
今天分享的是23年福州大学866的信号与系统试题及解析。23年福州大学新一代电子信息的最高分是452分!但是我看不到单科分数。按照75,75,150,150。也就是只有450,说明这个同学,专业课和数学几乎拿满ÿ…...

大数据之LibrA数据库系统告警处理(ALM-12002 HA资源异常)
告警解释 HA软件周期性检测Manager的WebService浮动IP地址和数据库。当HA软件检测到浮动IP地址或数据库异常时,产生该告警。 当HA检测到浮动IP地址或数据库正常后,告警恢复。 告警属性 告警参数 对系统的影响 如果Manager的WebService浮动IP地址异常…...

CSS基础入门04
目录 1.内边距 1.1基础写法 1.2复合写法 2.外边距 2.1基础写法 2.2复合写法 2.3块级元素水平居中 3.去除浏览器默认样式 4.弹性布局 4.1初体验 5.flex 布局基本概念 6.常用属性 6.1justify-content 6.2align-items 1.内边距 padding 设置内容和边框之间的距离. …...

LeetCode2741.特别的排列 状压
暴力枚举的话是n! 考虑状压DP,其实就是用二进制表示状态 再进行暴力 同时加一个记忆化就好了 这里有常用技巧: 全集(1<<n)-1 增加某个元素 x | (1<<i) 删除某个元素 x & ~(1<<i) const i…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...