MySQL —— 复合查询

一、基本的查询回顾练习

前面两章节整理了许多关于查询用到的语句和关键字,以及MySQL的内置函数,我们先用一些简单的查询练习去回顾之前的知识

1. 前提准备

同样是前面用到的用于测试的表格和数据,一张学生表和三张关于雇员信息表

雇员信息表

2. 测试样例

2.1 查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J

2.2 按照部门号升序而雇员的工资降序的排序

2.3 显示工资最高的员工名字和岗位

2.4 显示工资高于平均工资的人

同样是利用子查询,先算到平均工资是多少,然后条件筛选出高于该工资的人

2.5 显示每个部门的平均工资和最高工资

要不同部门的显示平均工资和最高工资,也就是要按部门先分组,再聚合

2.6 显示平均工资低于2000的部门号和它的平均工资

首先,我们要显示的是部门号和它的平均工资,要求是部门平均工资低于2000,因此还要得到各个部门的平均工资,并且进行条件筛选

2.7 显示每种岗位的雇员总数,平均工资

根据要求,应该要显示岗位、岗位雇员总数、平均工资,需要按岗位分组,聚合

二、多表查询

在实际开发中,往往要描述一些较为复杂的系统时,往往数据不止被记录在一张表格内,例如我们一直在使用的雇员信息表,就有三张,因此我们还需要多表进行查询

先介绍一个概念——笛卡尔积

笛卡尔积本质就是一种穷举的策略,在对两个表进行联合查询的时候,实际就是表一的第一条记录和表二的所有记录进行拼接,然后是表一第二条记录和表二的所有记录拼接,以此类推形成新表,这种穷举拼接的策略就是两个表的笛卡尔积

我们在需要用到多个表的数据时,联合查询会得到多个表的笛卡尔积,在其中通过条件筛选出我们需要的数据,就是多表查询,接下来还是利用雇员信息表来练习多表查询

1. 显示雇员名、雇员工资以及所在部门的名字

雇员名字和雇员工资在emp表中,而部门名字在dept表中,因此需要联合查询

2. 显示部门号为10的部门名,员工名和工资

首先我们需要显示部门名,员工名,还有工资,需要联合查询,然后是条件筛选出部门号为10的

3. 显示各个员工的姓名,工资,及工资级别

需要显示的是员工名字,工资和工资级别,因此要用到emp和salgrade这两个表

三、自查询

自查询实际就是一个表自己和自己的笛卡尔积,这种查询方式也有一定的应用场景,要注意,由于两个表都是同一张,因此命名上会有冲突,需要对表的名字进行重命名

应用场景

显示员工FORD的上级领导的编号和姓名

我们要找到员工FORD的领导信息,可以通过FORD信息中的领导编号去找到领导的信息,可以使用子查询的方式先找到FORD的领导编号,再找领导信息,同时也可以使用自查询的方式,去条件筛选出领导的信息

四、子查询

子查询在前面一些例子中已经用到过了,接下来详细整理和说明子查询

1.单行子查询

单行子查询就是前面用到的,子查询结果返回单行记录的情况

例子:显示SMITH同一部门的员工

首先我们要通过子查询先找到SMITH所属的部门,再进行条件筛选

2.多行子查询

当子查询返回结果为多行记录时,条件筛选的条件是一个集合,此时我们针对不同的情况,有三个关键字in、all、any去链接筛选条件:

in:表示筛选出该条件集合中的数据

all:表示前面的表达式需要满足和该集合中所有元素都作用且为true才符合筛选条件

any:表示前面的表达式和该集合中的元素任意一个满足条件即可符合筛选条件

例子:

a. 查询和10号部门的工作岗位相同的雇员名字、岗位、工资、部门号,但不包含10号本身

分析:要显示的是ename、job、sal、deptno,筛选条件是和部门号10相同的岗位,需要先找到和十号部门相同的岗位集合,条件是岗位是该集合其中一个即可符合条件,因此使用in,同时要去掉十号本身

b. 显示工资比部门30的所有员工的工资高的员工的名字、工资和部门号

分析:要显示的是员工名字、工资、部门号,条件是比部门30所有员工工资要高,我们可以选择找到该部门工资最高为多少,但这里为了示范all的使用,我们采用另一种思路,我们先找到30号部门所有员工工资的集合,然后筛选条件为大于该集合中的所有元素,因此用all

c. 显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(结果包括部门30的人)

分析:显示ename、sal、deptno,要求比部门30的任意员工工资都高,先子查询找到该部门工资的集合,条件筛选是大于该部门的任意一人,因此使用any连接条件

3.多列子查询

子查询返回的结果为多列数据时就叫多列子查询

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

分析:条件是和SMITH的部门和岗位都完全相同,因此需要先找到SMITH的岗位和部门是什么,该子查询返回结果是两列的,此时返回的结果的格式要认为是(v1,v2,...)这种类型,在做条件判断时,左侧也应该是这种格式

4.在from子句中使用子查询

我们可以将子查询的结果看作一张临时表,子查询的结果同样可以放在from后面去满足一些查询要求

案例:

a.显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资

分析:先通过分组子查询可以查到各个部门的部门平均工资,然后可以对emp和子查询结果进行笛卡尔积,这样每个员工信息后面都附加上了其所在部门的平均工资,然后再条件筛选即可

select ename,emp.deptno,sal,avg_sal from emp,(select deptno,avg(sal) as avg_sal from emp group by deptno) as tmp where emp.deptno=tmp.deptno and emp.smp.sal>tmp.avg_sal;

b. 查找每个部门工资最高的人的姓名、工资、部门、最高工资

分析:先子查询到每个部门的最高工资,然后再和emp笛卡尔积得到新表进行筛选

select ename,sal,deptno,max_sal from emp,(select deptno dt,max(sal) max_sal from emp group by deptno) tmp where emp.deptno=tmp.dt and emp.sal=tmp.max_sal;

c. 显示每个部门的信息(部门名、编号、地址)和人员数量

分析:我们先将需要的信息都查询出来,我们需要每个部门的部门名、编号以及地址,这些信息都在dept表上,人员数量则是对emp表格中根据部门不同分组然后聚合

select dept.deptno,dept.dname,dept.loc,num from dept,(select deptno,count(*) as num from emp group by deptno) as tmp where dept.deptno=tmp.deptno;

5.合并查询

在实际应用中,为了合并多个select的查询结果,可以使用集合操作符 union 和 union all

(1)union

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

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

(2)union all(不去重)

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

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

总结

本篇更进一步的整理介绍了查询的操作,对一些复杂的情况进行各种复合查询的操作,以及提供了大量的练习和样例

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

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

相关文章

优化数据查询性能:StarRocks 与 Apache Iceberg 的强强联合

Apache Iceberg 是一种开源的表格格式,专为在数据湖中存储大规模分析数据而设计。它与多种大数据生态系统组件高度兼容,相较于传统的 Hive 表格格式,Iceberg 在设计上提供了更高的性能和更好的可扩展性。它支持 ACID 事务、Schema 演化、数据…

leetcode-设计LRU缓存结构-112

题目要求 思路 双链表哈希表 代码实现 struct Node{int key, val;Node* next;Node* pre;Node(int _key, int _val): key(_key), val(_val), next(nullptr), pre(nullptr){} };class Solution { public: unordered_map<int, Node*> hash; Node* head; Node* tail; int …

普源DHO924示波器OFFSET设置

一、简介 示波器是电子工程师常用的测量工具之一&#xff0c;能够直观地显示电路信号的波形和参数。普源DHO924是一款优秀的数字示波器&#xff0c;具有优异的性能和易用性。其中OFFSET功能可以帮助用户调整信号的垂直位置&#xff0c;使波形更清晰易读。本文将详细介绍DHO924…

声音转文本(免费工具)

声音转文本&#xff1a;解锁语音技术的无限可能 在当今这个数字化时代&#xff0c;信息的传递方式正以前所未有的速度进化。从手动输入到触控操作&#xff0c;再到如今的语音交互&#xff0c;技术的发展让沟通变得更加自然与高效。声音转文本&#xff08;Speech-to-Text, STT&…

爬虫学习--12.MySQL数据库的基本操作(下)

MySQL查询数据 MySQL 数据库使用SQL SELECT语句来查询数据。 语法&#xff1a;在MySQL数据库中查询数据通用的 SELECT 语法 SELECT 字段1&#xff0c;字段2&#xff0c;……&#xff0c;字段n FROM table_name [WHERE 条件] [LIMIT N] 查询语句中你可以使用一个或者多个表&…

vue3使用mitt.js进行各种组件间通信

我们在vue工程中&#xff0c;除开vue自带的什么父子间&#xff0c;祖孙间通信&#xff0c;还有一个非常方便的通信方式&#xff0c;类似Vue2.x 使用 EventBus 进行组件通信&#xff0c;而 Vue3.x 推荐使用 mitt.js。可以实现各个组件间的通信 优点&#xff1a;首先它足够小&…

【云原生】Kubeadm部署k8s

目录 一、部署步骤 二、部署kubernetes 2.1、所有节点关闭防火墙 核心防护 iptables规则 swap交换 2.2、修改主机名并添加主机映射 2.3、调整内核参数 三、安装Docker 3.1、所有节点安装docker 3.2、所有接点添加镜像加速器 3.3、开启docker、并设置开机自启、查看状态…

ESP32学习笔记:WS2812B驱动

WS2812B是一款贴片RGB灯。由于采用了单总线通讯&#xff0c;所以需要特别关注下它的通讯时序。 调试细节&#xff1a; 本来以为会是一个比较简单的调试&#xff0c;结果还是花了很长时间才调试完成。 首先是关于ESP32的纳秒级延时确定&#xff0c;当时按照空指令始终调试不出来…

Linux中的计划任务(crontab)详解

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、Linux的起源与发展 2、什么是计划任务&#xf…

超详细的前后端实战项目(Spring系列加上vue3)(一步步实现+源码)前端篇(一)

最近想着一步步搭建一个前后端项目&#xff0c;将每一步详细的做出来。&#xff08;如果有不足或者建议&#xff0c;也希望大佬们指出哦&#xff09; 前端初始化 1.根据vue脚手架创建vue项目 这里可以用很多方法创建vue项目&#xff0c;大家看着创建吧&#xff0c;只要能创建…

机器学习面试问题总结 | 贝叶斯网络

本文给大家带来的百面算法工程师是机器学习中贝叶斯网路面试总结&#xff0c;文章内总结了常见的提问问题&#xff0c;旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中&#xff0c;我们还将介绍一些常见的面试问题&#xff0c;并提供参考的回答及其理论基础&#…

FreeRTOS_事件组_学习笔记

事件组 原文链接 事件组是一个整数&#xff0c;其中的高8位留给内核&#xff0c;只能用其他位来表示时间 每一位代表一个事件&#xff0c;且每个时间的含义由程序员决定 1为发生&#xff0c;0为未发生 一个/多个任务或ISR都能读写这些位 可以等待某一位&#xff0c;也可以等待…

如何理解合约中的引用类型(3)——Mapping

映射&#xff08;mapping&#xff09; 声明形式&#xff1a;mapping(key type > value type)keytype可以是除枚举外的几乎任何基本类型&#xff0c;包括bytes和string&#xff0c;不包括用户自定义的复杂类型-合约&#xff0c;枚举&#xff0c;结构&#xff0c;映射value t…

简单美观易上手的 Docker Compose 可视化管理器 Dockge

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 Dockge 是 Uptime Kuma 作者的新作品&#xff0c;因此 UI 风格与 Uptime Kuma 基本一致&#xff0c;如果你正在使用 Uptime Kuma 的话&#xff0c;那么 Dockge 的 UI 设计应该也不会让你失望。Dockge 主打…

智慧校园为高校带来哪些价值

在21世纪的教育图景中&#xff0c;"智慧"不再仅仅是一个科技名词&#xff0c;它已成为衡量教育现代化水平的重要标志。智慧校园&#xff0c;这一融合了物联网、大数据、云计算等先进技术的教育新形态&#xff0c;正逐步成为高校转型升级的关键驱动力。本文将从多个维…

BUUCTF靶场 [reverse]easyre、reverse1、reverse2

工具&#xff1a; DIE&#xff1a;下载&#xff1a;https://download.csdn.net/download/m0_73981089/89334360 IDA&#xff1a;下载&#xff1a;https://hex-rays.com/ida-free/ 新手小白勇闯逆向区&#xff01;&#xff01;&#xff01; [reverse]easyre 首先查壳&#xf…

【oracle003】图片转为字节、base64编码等形式批量插入oracle数据库并查询

1.熟悉、梳理、总结下Oracle相关知识体系 2.欢迎批评指正&#xff0c;跪谢一键三连&#xff01; 资源下载&#xff1a; oci.dll、oraocci11.dll、oraociei11.dll3个资源文件资源下载&#xff1a; Instant Client Setup.exe资源下载&#xff1a; oci.dll、oraocci11.dll、oraoc…

ubuntu手动替换源后,更新源时提示“仓库.... jammy Release“ 没有Release文件

问题如图所示&#xff0c;由于问题不好定位&#xff0c;我就从替换源&#xff0c;以及解决错误提示这两个步骤&#xff0c;来解决其中可能存在的问题。 1、替换源 这一步骤&#xff0c;网上的资料可以搜到很多&#xff0c;我跟着做了之后&#xff0c;总会冒出来各种各样的小问…

皮影戏艺术品3D沉浸式展馆提供非同一般的趣味体验

引领艺术展示的未来&#xff0c;深圳华锐视点融合多年的web3d项目制作经验&#xff0c;倾力打造3D虚拟艺术品展馆在线编辑平台&#xff0c;为您提供一个超越时空限制的线上艺术展示平台。 一、极致视觉盛宴 我们拥有领先的美术团队&#xff0c;运用先进的web3D开发技术&#xf…

可能是最适合PS的AI插件,设计师大救星!StartAI初体验!不是恰饭

这款软件虽然有一些功能需要完善&#xff0c;比如&#xff1a; 1&#xff1a;生成图片产品海报&#xff0c;会出现图随意出现&#xff0c;跟设计图起冲突&#xff0c;需要PS才可以正常使用它。 2&#xff1a;即使开会员也需要排队生成。 3: 还有&#xff0c;会员没有更加好用的…