MYSQL复合查询

当我们要查询的数据要使用的限制条件不是很简单的时候,可能要在一个限制条件下再次限制,比如要查找小美所在公司的平均薪资,就要先找到小美的公司,再求平均薪资。复合查询分三种,多表连接查询、子句查询和合并查询。

本文要使用的数据库scott的三张表:

多表连接查询

多表连接就是将多个表作笛卡尔积,简单来说,就是将每个表的每一行依次组装起来。例如A,B表连接,会先将A表的第一行数据与B表的每一行数据组装,再从A表的第二行开始与B每一行组装,以此类推。所以最后组装好的表的行数为A的行数*B的行数。

我们在使用中一般会使用where条件来消除无效数据。例如,我们想知道每个员工的工作地点,就要将emp表和dept表连接,两个表中deptno相同的行就是有效数据:

不同表之间可以连接,表自身也可以和自己连接。例如,我们想要知道每个员工的管理者是谁,emp表中的每个员工数据中都会有mgr,即该员工的管理者的工号,我们可以将两个emp表连接,第一个表的mgr和第二个表的empno相同的为有效数据,(注意此时表的名字要重命名)

内外连接

多表连接分为内连接和外连接,上面我们使用where对连接后的表数据做筛选其实就是内连接。

内连接的标准写法是这样的:

select 列名... from 表1 inner join 表2 on 连接条件;

 外连接分为左外连接和右外连接:

--左连接
select 列名... from 表1 left join 表2 on 连接条件;
--有连接
select 列名... from 表1 right join 表2 on 连接条件;

那么这三者有什么区别呢?

我们考虑到在两个表间存在某些数据,只在一个表中出现,另一个表中不存在或者为null。 在这种情况下,内连接的处理是,丢弃这些数据;左连接会以表1为主表,表一中出现而表二没出现的,会在连接后的数据的表二部分补null;右连接会以表2为主表,表二出现而表一没出现的,会在连接后数据的表一部分补null。

例子:设计两个表,学生表和成绩表,但是学生表和成绩表中的数据并不都是一一对应的。

 

子句查询

子句查询就是在一个语句中嵌套使用select语句,也叫嵌套查询。

根据子句所在位置有两种:在where条件语句中,本文简称where子句查询,还可以在from中,本文简称from子句查询。

where子句查询

根据嵌套的select子句返回的记录可以分为三类:单行子查询,多行子查询和多列子查询。

单行子查询

子句返回一行记录。select后面只有一个列,且该列数据中满足where条件的只有一个。

查找SMITH所在部门的其他员工:

多行子查询

字句返回多行记录。select后面只有一个列,且该列数据中满足where条件的不止一个。

in关键字,查找列中数据是否在集合中;查询其他部门中与10号部门存在的工作岗位相同的雇员的信息,但是不包含10号部门的雇员:

all关键字;显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号:

any关键字;显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门 的员工)

这个问题也可以理解为找薪资大于部门30中最低的薪资的员工,和上面的结果一样:

多列子查询

查询返回多个列数据的子查询语句。select后面有多个列

案例:查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人

from子句查询

其实select子句本质就是返回一张临时表,包括我们每次查询的显示在屏幕上的结果就是一张表。所以我们可以用from子句获得的临时表与其他表作多表连接查询。注意:临时表必须指定一个名字。

案例1,显示每个高于自己部门平均工资的员工信息: 

select emp.ename,emp.deptno 
from emp,(select deptno,avg(sal) average from emp group by deptno) tem 
where emp.deptno=tem.deptno and emp.sal>average;

分析:先用子句按部门号分组,获取各部门平均薪资,再将这个表与emp连接,最后使用where条件筛选。  

 合并查询 

使用合并查询的前提是,两个结果集的列相同。

union

获取两个结果集的并集,并去除结果集中重复的行。

将工资大于25000或职位是MANAGER的人找出来:

union all

获取两个结果集的并集,但是不去除去除结果集中重复的行。

将工资大于25000或职位是MANAGER的人找出来:

可以发现这次的结果会发生重复,与上一个不加all的合并查询结果不同。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【论文阅读笔记】VLP: A Survey on Vision-language Pre-training

目录 前言2 特征提取(Feature extraction)2.1.1 图象特征提取OD-based Region feature / RoIFreeze the pre-trained object detectorsGrid features(网格特征)CNN-GFsEnd-to-End Training(端到端训练)ViT-…

U盘插入电脑不显示?别急,这里有解决方案!

随着科技的飞速发展,U盘已成为我们日常生活和工作中不可或缺的数据存储工具。然而,你是否遇到过这样的情况:满心欢喜地将U盘插入电脑,却发现电脑竟然“视而不见”,U盘图标迟迟不出现?别急,这种情…

如何使用Web-Check和cpolar实现安全的远程网站监测与管理

文章目录 前言1.关于Web-Check2.功能特点3.安装Docker4.创建并启动Web-Check容器5.本地访问测试6.公网远程访问本地Web-Check7.内网穿透工具安装8.创建远程连接公网地址9.使用固定公网地址远程访问 前言 本期给大家分享一个网站检测工具Web-Check,能帮你全面了解网…

【第一个qt项目的实现和介绍以及程序分析】【正点原子】嵌入式Qt5 C++开发视频

qt项目的实现和介绍 1.第一个qt项目  (1).创建qt工程    [1].创建一个存放qt的目录    [2].新建一个qt工程    [3].编译第一个工程    发生错误时的解决方式 二.QT文件介绍  (1).工程中文件简单介绍  (2).项目文件代码流程介绍    [1].添…

【Linux】命令行参数 | 环境变量

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:青果大战linux 总有光环在陨落,总有新星在闪烁 前几天在搞硬件&…

【数据结构与算法】第7课—数据结构之队列

文章目录 1. 队列1.1 什么是队列1.2 队列的结构1.3 队列初始化1.4 队列入栈1.5 出队列1.6 查找队列有效元素个数1.7 取队头和队尾数据1.8 销毁链表 2. 用两个队列实现栈3. 用两个栈实现队列4. 循环队列 1. 队列 注:文中Queue是队列,Quene是错误写法 1.1 …

数据结构 ——— 向上/向下调整算法将数组调整为升/降序

目录 向上调整算法(默认小堆) 向下调整算法(默认小堆) 利用向上调整算法对现有数组直接建堆 利用向下调整算法对以建成的小堆数组排降序 举一反三: 那么如何将数组 a 排成升序呢? 向上调整算法&…

一种基于GPU的归并排序并行实现

0️⃣归并排序流程 分割过程:将待排序数组等分为左右子数组,再对左右子数组递归式等分,直至不可分割合并过程:将所有子数组两两递归合并,逐步得到较大有序数组,直到得到完整有序数组 1️⃣传统的并行归并 …

【MySQL】数据类型

目录 一、常见数据类型汇总 二、数值类型 2.1 tinyint 2.2 bit 2.3 float 2.4 decimal 三、字符串类型 3.1 char 3.2 varchar 四、日期和时间类型 五、枚举和集合 5.1 enum枚举 5.2 set集合 一、常见数据类型汇总 分类数据类型说明数值类型BIT(M)二进制位。M指定…

《探索 HarmonyOS NEXT (5.0):开启构建模块化项目架构奇幻之旅 —— 动态路由 ZRouter:引领高效模块通信的智慧中枢》

ZRouter简介:是一款轻量级的动态路由框架,基于Navigation系统路由表和Hvigor插件实现的方案,可以解决多个业务模块(HAR/HSP)之间解耦和通信问题,从而实现业务复用和功能扩展。 ZRouter出处ZRouter&#xff…

网络原理(数据链路层)->以太网帧格式解

前言 大家好我是小帅,今天我们来了解以太网帧格式 个人主页 文章目录 1.数据链路层1.1 认识以太⽹1.2 MAC地址(⽹卡的硬件地址)1.2.1 对⽐理解MAC地址和IP地址 1.3 认识MTU1.4 MTU对IP协议的影响1. 5 MTU对UDP协议的影响1.6 MTU对于TCP协议的…

银行金融知识竞赛活动策划方案

根据《中国人民银行**市中心支行“创新金融服务,支持经济发展”业务竟赛活动实施方案》安排,中支决定于9月28日举办**市人民银行系统“创新金融服务,支持经济发展”现场业务竞赛,为确保业务竞赛组织工作顺利开展,特制定…

渗透测试练习题解析 7 (CTF web)

一、[红明谷CTF 2021]write_shell 1 考点: 1、PHP 短标签 2、 符号的使用 通过代码可知 check 是一个过滤函数,利用正则的方式过滤掉 空格、php、eval 等一些关键字或符号,$dir 是路径,这个值可以通过 actionpwd 获取到&#…

VBA中类的解读及应用第十七讲:类,让文本框在激活时改变颜色(下)

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。 类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入&#xff0…

如何下载安装TestLink?

一、下载TestLink、XAMPP TestLink 下载 |SourceForge.net 备用:GitHub - TestLinkOpenSourceTRMS/testlink-code: TestLink开源测试和需求管理系统 下载XAMPP: Download XAMPP 注意:TestLink与PHP版本有关系,所以XA…

基于SpringBoot+微信小程序+协同过滤算法+二维码订单位置跟踪的农产品销售平台-新

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: “农产品商城”小程序…

实现旺店通到金蝶云星空的数据集成:技术详解

旺店通旗舰版数据集成到金蝶云星空案例分享:入库瞬时成本-生产入库单-1 在企业日常运营中,数据的高效流转和准确对接是确保业务顺利进行的关键。本文将聚焦于一个具体的系统对接集成案例——如何将旺店通旗舰版的数据集成到金蝶云星空,以实现…

selinux与防火墙

一.selinux (1).什么是selinux SELinux是Security-Enhanced Linux的缩写,意思是安全强化的linu。 SELinux是对程序、文件等权限设置依据的一个内核模块。由于启动网络服务的也是程序,因此刚好也 是能够控制网络服务能否访问系统资源的一道关卡。 (2)…

【论文精读】LPT: Long-tailed prompt tuning for image classification

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀论文精读_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 摘要 2. …

链表详解(三)

目录 链表功能实现链表的查找SLNode* SLFind(SLNode* phead, SLNDataType x)代码 链表任意位置前插入void SLInsert(SLNode**pphead,SLNode* pos, SLNDataType x)代码 链表任意位置前删除void SLErase(SLNode**pphead,SLNode* pos)代码 链表任意位置后插…