MySQL 复合查询和内外连接 -- 子查询,多表查询,自连接,合并查询,表的内外连接

【MySQL】复合查询+表的内外连接 可以看我们目前有什么,目前我们有部门号和部门平均工资,在我看来这就是一张表,然后我手里还有一张员工表,所以是不是可以把两张表做笛卡尔积,做完之后每个员工它所在那个部门已经所在部门的平均工资,在新的表中不就有了吗。这个笛卡尔积将两张表的信息做了穷举,可是做完笛卡尔积有些信息是有意义的,有些一看就无意义的的,就如一个员工所属部门它目前并不需要和它不是同一个部门号的平均工资做对比,如果将来需要再说。如果多表查询,我们想让左侧的表完全显示不要过任何过滤筛选,如果和右侧的表配不上,让右侧的都为空也可以。 阅读详情

目录

1. 子查询

1.1 单行子查询

1.2 多行子查询

1.3 多列子查询

1.4 在 from 子句中使用子查询

2. 多表查询

3. 自连接 

4. 合并查询

4.1 union

4.2 union all

5. 表的内连接

6. 表的外连接


        下列先给出该博客中所用到的所有表的数据。

        (1)部门表(dept)

        (2) 员工表(emp)

        (3) 薪资等级表(salgrade)

1. 子查询

        子查询是指嵌入在其他 sql 语句中的 select 语句,也叫嵌套查询。

1.1 单行子查询

        单行子查询:指的是在子查询语句中,返回的数据只有一行。-- 返回一个字段并且该字段只有一个值。

        例1:查询与 SMITH 同一个部门的员工。

        如上图,MySQL 会先执行括号中的子语句,返回一个 ename = 'SMITH' 的部门号 deptno,然后再执行外部 select 语句,筛选部门号与 SMITH 相同的数据。 

1.2 多行子查询

        多行子查询:指的是在子查询语句中,返回的数据为多行。-- 返回一个字段并且该字段有多个值。

        (1)in 关键字:用于判断一个数据是否在某一个集合当中。

        例1:查询和 10 号部门的工作岗位相同的员工名字,岗位,工资,部门号但是不包含 10 号部门自己的员工。

        上述的查询可以这样理解,(1)查出 10 号部门有哪些岗位。(2)筛选出 emp 表中与 10 部门中岗位相同岗位的员工。(3)排除 10 号部门自己的员工。 

        上述的语句中,子查询到的 job 不只是一个值,所以被称为多行子查询。

        (2)all 关键字:用于在判断的时候所有数据都要满足条件。

        例2:查询工资比 30 号部门所有员工的工资高的员工的姓名、工资和部门号。

        上图中的做法是先找到 30 号部门中最高的工资,然后再筛选出大于最高工资的员工。

        而上述的做法是先筛选出 30 号部门中所有员工的工资,然后再次筛选大于 30 号部门中所有员工工资的其他员工。 

        (3)any 关键字:用于在判断时是否至少有一条数据满足条件。

        例3:显示工资比 30 号部门中至少一名员工工资高的员工的姓名、工资、和部门号(包含自己部门的员工)。

        换句话说,就是显示比 30 号部门中最低工资要高的员工。

        上图为先筛选出 30 号部门中最低工资,然后筛选大于最低工资的员工。

        而这个图是先筛选出 30 号部门所有员工的工资,然后判断的时候表示 sal 大于 30 号部门中任意一名员工的工资高即可。 

1.3 多列子查询

        多列子查询:子查询中返回的数据为多列。-- 返回多个字段,该字段可以有一个值也可以有多个值。其实上述例子中的情况为单列单行自查徐,单列多行子查询,所以多行和多列是不冲突的。

        例1:查询和 SMITH 的部门和岗位完全相同的其他员工。

        上述的子查询可以称为多列单行子查询,先查出 SMITH 的部门号和岗位,在利用部门号和岗位筛选出员工,最后在筛选掉 SMITH 自己。 

1.4 在 from 子句中使用子查询

        上述所有的子查询都是在 where 子句中充当筛选条件。但是子查询也可以在 from 子句中使用,这里要清楚一个概念,任何时刻查询出来的临时数据,在逻辑上本质都可以当作一张表。

        例1:显示每个部门中高于该部门平均工资的员工的姓名、部门、工资以及部门平均工资。

        上图中先是将每个部门的部门号和部门平均工资筛选出来作为一张临时表,再将两张表作笛卡尔积,筛选出两张表中部门号相同且工资大于部门平均工资的员工信息。 

2. 多表查询

        如下图所示,得到的结果称为笛卡尔积,也就是两张表每条数据的两两组合:

        其中有些数据是没有意义的,比如第一条数据,SMITH 是属于 20 号部门的,所有拼接上部门表中部门号为 10 的数据就不是一条合理的数据,可以利用两张表相同的字段(上图中的部门号)进行有意义的数据筛选:

        例1:显示员工名、员工工资以及所在部门(不仅仅是部门号,还有部门信息)。则需要从 emp 表和 dept 表中得出数据,所以可以用以下查询语句进行查询:

        例2:显示各个员工的姓名、工资及工资级别。则需要从 emp 表和 salgrade 表中得到数据,可以通过员工工资在那个工资等级的范围内进行有效数据的筛选:

3. 自连接 

        自连接就是将两张相同的表作笛卡尔积。由于两张表的名字相同,所以作笛卡尔积的时候需要进行重命名。

        如上两张图所示,当没有重命名对相同的表作笛卡尔积会报错,重命名之后作笛卡尔积就不会报错。 

        例1:显示员工 FORD 上级领导的编号和姓名(mgr 是员工领导的编号)。这个需求可以分为两步来进行,一是找打 FORD 上级领导的编号,二是使用这个编号找到领导的信息,而这些信息都在 emp 表中,所以语句如下:

        也可以将 emp 表先进行自连接,然后通过 FORD 上级领导编号 mgr 和员工编号 empno 相等的方式找到 FORD 上级领导的信息,语句如下:

4. 合并查询

4.1 union

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

        例1:将工资大于 2500 或职位是 MANAGER 的人找出来。

        上述是使用了两个筛选条件筛选出结果。 

        而上图是使用 union 将两个查询的结果集合并起来。 

4.2 union all

        union all:该操作符用于取得两个结果集的并集。但是该操作符不对结果集中重复行去重。

        上述两种合并查询的时候列字段的个数和属性必须相同才能进行拼接。 

5. 表的内连接

        上述多表进行笛卡尔积之后都需要一个 where 语句进行有效数据的筛选,其实就叫做内连接,但是为了方便给其规定了一种内连接语法:

select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;

        例1:显示 SMITH 的名字和部门名称。

        上图为之前使用 where 子句的写法。

        这个是使用内连接语法的写法。 

6. 表的外连接

        (1)左外连接:在两张表进行笛卡尔积之后,左表的数据完全显示。

select 字段 from 表名1 left join 表名2  on 连接条件;

        如上图所示,现在有两张表,一个学生表,一个成绩表,需要将学生表中的所有行数据筛选出来,就算学生没有成绩也需要筛选出来,这时候就可以使用左外连接。

        (2)右外连接: 在两张表进行笛卡尔积之后,右表的数据完全显示。

select 字段 from 表名1 right join 表名2  on 连接条件;

        现在需要将成绩表中所有行数据筛选出来,就算成绩没有对应的学生也要将右表的所有行进行显示。

面经-2023-联发科MTK-数字芯片设计 阅读详情

相关推荐

Godot4 TileMap分层绘制全攻略:解决角色、树木遮挡混乱,打造正确视觉层级

本文详细介绍了Godot4 TileMap分层绘制技术,通过图层管理和Y-Sort功能解决2D游戏中角色与物体的遮挡问题。从基础图层设置到高级优化策略,帮助开发者打造符合自然视觉规律的场景层次,提升游戏沉浸感。特别针对TileMap和TileSet的使用提供了实用技巧和代码示例。

weixin_28717411的博客 513

MySQL数据库⑦_复合查询+内外链接(多表/子查询)

MySQL数据库⑦_复合查询+内外链接(多表查询_笛卡尔积+自链接+子查询+合并查询+内连接+左外链接+右外链接),下一篇是MySQL索引。

参考书籍:《C语言程序设计》《数据结构》《C++ Primer》《Effective C++》《STL源码剖析》《现代操作系统》《UNIX环境高级编程》《图解TCP/IP》《图解HTTP》《Linux高性能服务器编程》《剑指Offer》《算法导论》 1442

无线控制的隐形桥梁:深入解析NRF24L01在电机控制中的数据传输艺术

本文深入解析NRF24L01无线模块在电机控制中的数据传输技术,涵盖通信机制优化、抗干扰策略及实时性保障。通过舵机和无刷电机的实战案例,展示如何构建稳定高效的无线控制系统,为嵌入式开发提供完整解决方案。

j7k8l的博客 333

MySQL复合查询

MySQL复合查询

qq_55958734的博客 956

深度学习Halcon中GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢,通过设置硬件参数的解决方法

深度学习Halcon中GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢,通过设置硬件参数的解决方法 前言 在训练自己模型的时候,会遇到GPU显存利用率高,但GPU、CPU利用率较低,导致模型训练速度很慢的问题。这个问题一方面是由于硬件没有设置到最佳工作状态,另一方面是代码中参数没有设置好。最近在跑Halcon DL遇到这个问题,而Halcon不像开源的几个框架那样自由,代码封装的比较多。所以遇到这种问题,只能在参数最优的情况下,通过设置硬件参数来提升性能。 当然,在跑DL之前,无论什么框

ZiLiangQin的博客 9916

银河麒麟V10 SP1忘记密码?3分钟搞定单用户模式密码重置(附详细截图)

本文详细介绍了银河麒麟V10 SP1操作系统忘记登录密码后的应急恢复方法。核心是通过GRUB引导菜单进入单用户模式,无需密码即可获得root权限,从而快速重置用户密码。文章提供了从捕捉GRUB界面、编辑启动参数到执行密码修改命令的完整步骤图解与常见问题解决方案,帮助用户在几分钟内恢复系统访问。

w3x4y的博客 922

【MySQL】数据库表的内外连接——复合查询

MySQL中的复合查询允许使用UNION、UNION ALL合并多个SELECT语句的结果。内外连接(INNER JOIN、LEFT JOIN、RIGHT JOIN)用于连接多个表,INNER JOIN返回匹配的行,LEFT JOIN返回左表所有行和右表匹配行,RIGHT JOIN一样。 单行子查询是指子查询只返回单列,单行数据;多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句。内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选。

why 1212

从零做出可发布的2D冒险游戏!Unity全流程实战指南:从资源搭建到打包发布,新手也能跟着做

项目配置→资源导入→核心模块开发→关卡设计→调试→打包发布;玩家控制→敌人AI→道具系统→UI系统→游戏管理器→音效系统;新手开发重点:先实现核心玩法(移动、跳跃、攻击),再补充UI、音效、存档等辅助功能;调试是关键:每实现一个功能就测试,避免最后一堆bug难以定位。从零做一款完整的2D冒险游戏,能快速提升你的Unity综合能力——不仅能掌握C#编程、2D物理、UI系统,还能理解游戏开发的完整流程。先做出基础版,再慢慢迭代优化,你会发现游戏开发并没有想象中那么难。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1182

MySQL数据库复合查询

本文通过实战案例解析MySQL复合查询与多表查询技巧。主要内容包括:1) 复合查询示例,如筛选工资高于500或岗位为MANAGER的员工;2) 排序查询,按部门升序、工资降序排列;3) 多表连接操作,包括内连接、外连接和自连接;4) 子查询应用,既有单行子查询也有多行子查询;5) 聚合函数使用,如计算部门平均工资和最高工资。文章特别强调:所有子查询结果本质都是表结构,可通过笛卡尔积进一步操作。适合已经掌握MySQL基础语法,需要通过实际案例提升查询能力的开发者。

2302_80105876的博客 2142

使用MATLAB求解二维顶盖驱动流问题的详细代码和说明

本文介绍了使用MATLAB求解二维顶盖驱动流问题的涡量-流函数方法。代码采用129×129网格,雷诺数Re=1000,通过迭代求解Navier-Stokes方程,包含流函数方程和涡量输运方程的离散求解。程序实现了边界条件处理、收敛性检查,并提供丰富后处理功能:流线图、涡量分布图、中心线速度曲线、矢量图和三维涡量可视化。计算结果可与Ghia等(1982)的经典数据进行验证。该代码完整展示了CFD问题的数值求解流程,包括参数设置、主循环计算和多种结果呈现方式,适用于流体力学教学和科研验证。

AI的内部世界的博客 227

最全的Hermes安装教程以及Hermes WebUI安装部署和配置指南

* 直接执行命令**

小石头的专栏 1076

【MySQL】复合查询与内外连接

多表查询,笛卡尔积,子查询,内外连接

2303_80828380的博客 1145

金融领域图注意力网络的创新应用

随着金融市场的日益复杂和数据量的爆炸式增长,传统的数据分析方法在处理金融数据的复杂关系和结构时面临诸多挑战。图注意力网络(Graph Attention Network,GAT)作为一种新兴的深度学习技术,能够有效处理图结构数据,挖掘数据中的潜在关系。本文的目的在于深入探讨图注意力网络在金融领域的创新应用,涵盖风险评估、投资决策、欺诈检测等多个方面。通过理论分析、算法实现和实际案例展示,为金融从业者和研究者提供全面的技术参考,推动图注意力网络在金融领域的广泛应用。

AI云原生与云计算技术学院 721

MySQL 复合查询全解析:从单表到多表的实战进阶

本文系统介绍了MySQL复合查询的核心技巧,包括单表查询(多条件筛选、自定义排序、聚合统计)、多表关联查询(两表/三表连接)、自连接、子查询(单行/多行/from子句嵌套)以及合并查询(union/union all)。通过实际案例演示了如何灵活运用这些技术解决企业级数据查询需求,如处理NULL值、避免笛卡尔积、实现表内数据关联等场景。文章强调掌握复合查询对处理分散在多表中的数据至关重要,并提供了不同场景下的语法实现和性能考量。

2401_83603768的博客 1726

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

MySQL之复合查询与内外连接

MySQL之复合查询与内外连接

Miwll的博客 1440

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

MySQL复合查询与内外连接(9)

继续,本篇有点小难,不过问题不大,还请继续加油!!!很重要的一篇,但是我们接下来迎来的索引跟事务更是重量级!

tan180°的博客 913

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【MySQL】复合查询

MySQL的复合查询与内外连接

2301_80277275的博客 979

MySQL——复合查询&&表的内外连

本文回顾了SQL查询中的多种技术,包括基本查询、复合查询、多表查询、自连接、子查询、合并查询以及表的内外连接。基本查询涉及条件筛选、排序和聚合函数的使用,如查询工资高于500或岗位为MANAGER的雇员,并按部门号和工资排序。多表查询通过连接不同表获取数据,如显示雇员名、工资及部门名。自连接用于在同一表内进行查询,如查找员工的上级领导。子查询嵌入在其他SQL语句中,用于复杂条件筛选,如显示与SMITH同部门的员工。合并查询使用UNION和UNION ALL合并多个SELECT结果。内外连接则用于处理表之间的

有时间要学习的博客 827

Linux——MySQL内置函数与复合查询

内置函数,复合查询,内外连接

qq_63580639的博客 683
上一篇: 五种 IO 模式的简单介绍 -- 阻塞 IO,非阻塞 IO,信号驱动 IO,IO 多路复用,异步 IO
下一篇: MySQL 索引 -- 磁盘,主键索引,唯一索引,普通索引,全文索引
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值