【MySQL】8.复合查询

news2024/9/21 20:45:18

复合查询

  • 一.基本查询回顾(新增子查询)
  • 二.多表查询
  • 三.自连接
  • 四.子查询
    • 1.单列单行子查询
    • 2.单列多行子查询——三个关键字
    • 3.多列子查询
    • 4.在 from 子句中使用子查询
  • 五.合并查询
  • 六.总结

一.基本查询回顾(新增子查询)

//1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们姓名首字母为‘J’
select * from emp where (sal>500 or job='MANAGER') and left(ename, 1)='J';

//2.按照部门号升序而雇员工资降序排序
select * from emp order by deptno asc, sal desc;

//3.使用年薪进行降序排序
select ename, sal, sal*12+ifnull(comm, 0) as 年薪 from emp order by 年薪 desc;

//4.显示工资最高的员工的名字和工作岗位
select ename, job from emp where sal=(select max(sal) from emp); //子查询

//5.显示工资高于平均工资的员工信息
select * from emp where sal > (select avg(sal) from emp); //子查询

//6.显示每个部门的平均工资和最高工资
select deptno, format(avg(sal), 2) as 平均工资, format(max(sal), 2) as 最高工资 from emp group by deptno;

//7.显示平均工资低于2000的部门号和它的平均工资
select deptno, avg(sal) as 平均工资 from emp group by deptno having 平均工资<2000;

//8.显示每种岗位的雇员总数和平均工资
select job, count(*) as 雇员总数, format(avg(sal), 2) as 平均工资 from emp group by job;

二.多表查询

在这里插入图片描述

//1.显示雇员名,雇员工资,和雇员所在部门的名字
select ename, sal, dname from emp, dept where emp.deptno=dept.deptno; 
//在emp和dept作笛卡尔积得到的表基础上,进行where筛选,由于两个表中的部门号字段重名,所以要用表名区分

//2.显示部门号为10号的部门名,员工名和工资
select dname, ename, sal from emp, dept where emp.deptno=dept.deptno emp.deptno=10;

//3.显示各个员工的姓名,工资和工资级别
select ename, sal, grade from emp, salgrade where sal between losal and hisal;

三.自连接

一个表自己和自己做笛卡尔积,叫做表的自连接

//1.找到员工FORD的领导的编号和姓名
//方案一:子查询
select ename, empno from emp where empno=(select mgr from emp where ename='FORD');

//方案二:自连接
select t2.ename, t2.empno from emp as t1, emp as t2 
where t1.ename='FORD' and t1.mgr=t2.empno;  //必须对两个表重命名,否则名字会冲突

四.子查询

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

1.单列单行子查询

返回一个条目的子查询

//显示和SMITH在同一部门的员工
select * from emp where deptno=(select deptno from emp where ename='SMITH');

2.单列多行子查询——三个关键字

返回多个条目的子查询

//查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不含10自己的
select ename, job, sal, deptno from emp 
where job in (select distinct job from emp where deptno=10) and deptno!=10; //in关键字

//显示工资比部门30的所有员工的工资高的员工的姓名,工资和部门号
//解法一:
select ename, sal, deptno from emp where sal > (select max(sal) from emp where deptno=30);

//解法二:
select ename, sal, deptno from emp 
where sal > all (select distinct sal from emp where deptno=30); //all关键字

//显示工资比部门30的任意员工的工资高的员工姓名,工资和部门号(包含自己30部门自己的员工)
select ename, sal, deptno from emp 
where sal > any (select sal from emp where deptno=30); //any关键字

3.多列子查询

返回多列数据的子查询

//查询和SMITH的部门和岗位完全相同的所有雇员,不包括本人
select * from emp 
where (deptno, job) = (select deptno, job from emp where ename='SMITH') and ename != 'SMITH'

目前的子查询全部都在 where 子句中,充当筛选条件。
但是任何时刻,查询出来的临时结构,也是表结构,所以也可以对子查询的结果再次查询!!!

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

//1.显示每个高于自己部门平均工资的员工的姓名,部门,工资和平均工资
select ename, deptno, sal, 部门平均工资 from emp, 
(select deptno, avg(sal) as 部门平均工资 from emp group by deptno) as tmp 
where emp.deptno=tmp.deptno and sal > tmp.部门平均工资;

//2.查找每个部门工资最高的人的姓名,工资,部门,最高工资
select ename, sal, t1.deptno, 部门最高工资 from emp as t1,
(select deptno, max(sal) as 部门最高工资 from emp group by deptno) as t2
where t1.deptno=t2.deptno and t1.sal=t2.部门最高工资;

//3.显示每个部门的信息(部门名,编号,地址)和人员数量
select dname, t1.deptno, loc, dept_num from dept as t1,
(select deptno, count(*) as dept_num from emp group by deptno) as t2
where t1.deptno=t2.deptno;

小结:
解决多表查询的本质:想办法将多表转化为单表。所以 MySQL 中,所有 select 的问题全部可以转化为单表问题

五.合并查询

合并多个 select 的执行结果(前提是查出的表的结构相同),可以使用集合操作符 union,union all
union:取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。
union all:取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行

//将工资大于25000或职位是MANAGER的人找出来
select ename, sal, job from emp where sal > 2500 union
select ename, sal, jog from emp where job='MANAGER';

六.总结

本节重点掌握:

  1. 笛卡尔积 + 条件筛选解决多表查询问题
  2. 子查询的结果实质是一张表,可供 in,all,any 等关键字作条件判断,还可以被用来 select 查询

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

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

相关文章

js逆向-webpack-python

网站&#xff08;base64&#xff09;&#xff1a;aHR0cHM6Ly93d3cuY29pbmdsYXNzLmNvbS96aA 案例响应解密爬取&#xff08;webpack&#xff09; 1、找到目标url 2、进行入口定位&#xff08;此案例使用 ‘decrypt(’ 关键字搜索 &#xff09; 3、找到位置进行分析 --t 为 dat…

【软件工具】VMware Workstation Pro 15.5安装

1、双击运行安装包程序 2、接受许可证协议 3、选择安装位置&#xff0c;建议非中文无空格&#xff0c;增强型键盘驱动程序可选 4、按照自身使用习惯勾选产品更新和客户体验提升计划 5、快捷方式 6、开始安装 7、稍等会儿(可以玩会儿手机) 8、可输入许可证也可直接完成&#xff…

《ElementUI/Plus 基础知识》el-tree 之修改可拖拽节点的高亮背景和线

前言 收到需求&#xff0c;PM 觉得可拖拽节点的高亮背景和线样式不明显&#xff01;CSS 样式得改&#xff01; 注意&#xff1a;下述方式适用于ElementUI el-tree 和 ElementPlus el-tree&#xff01; 修改 拖拽被叠加节点的背景色和文字 关键类名 is-drop-inner .el-tree…

几何距离与函数距离:解锁数据空间中的奥秘

几何距离&#xff1a;直观的空间度量 几何距离&#xff0c;顾名思义&#xff0c;是我们在几何学中熟悉的距离概念&#xff0c;如欧几里得距离、曼哈顿距离和切比雪夫距离等。这些距离度量直接反映了数据点在多维空间中的位置关系。 欧几里得距离&#xff1a;最为人熟知的几何距…

conda install问题记录

最近想用代码处理sar数据&#xff0c;解放双手。 看重了isce这个处理平台&#xff0c;在安装包的时候遇到了一些问题。 这一步持续了非常久&#xff0c;然后我就果断ctrlc了 后面再次进行尝试&#xff0c;出现一大串报错&#xff0c;不知道是不是依赖项的问题 后面看到说mam…

langchain-runnable底层原理

文章目录 langchainlangchain生态介绍langchainLCELrunnablerunnable基础能力介绍invokebatchstreamainvokeabatchastream__or__、__ror__pipeget_nameInputType (属性)OutputType (属性)input_schema (属性)output_schema (属性) langchain langchain生态介绍 langchain是一个…

Min P Sampling: Balancing Creativity and Coherence at High Temperature阅读笔记

上一篇文章是关于大语言模型的调参数&#xff0c;写了temperature这个参数近期的一个工作。那接下来&#xff0c;就不得不再来讲讲top-p这个参数啦。首先还是上文章&#xff0c;同样是非常新的一个工作&#xff0c;2024年7月1日submit的呢。 文章链接&#xff1a;https://arxi…

NLP任务:情感分析、看图说话

我可不向其他博主那样拖泥带水&#xff0c;我有代码就直接贴在文章里&#xff0c;或者放到gitee供你们参考下载&#xff0c;虽然写的不咋滴&#xff0c;废话少说&#xff0c;上代码。 gitee码云地址&#xff1a; 卢东艺/pytorch_cv_nlp - 码云 - 开源中国 (gitee.com)https:/…

LED显示屏中什么是亮度检测?什么是亮度调节?

在夜幕降临的城市中&#xff0c;一套套璀璨夺目的LED显示屏如同现代生活的万花筒&#xff0c;展示着五彩斑斓的信息世界。从繁华的商业街区到繁忙的交通枢纽&#xff0c;再到家庭影院&#xff0c;LED显示屏以其高亮度、长寿命和灵活性&#xff0c;在数字时代的大潮中迅速崛起&a…

Drv8434s芯片两相步进电机驱动程序+硬件解决方案

一、Drv8434s芯片介绍 PWM 微步进电机驱动器 – 具有 STEP/DIR 引脚的 SPI 接口 – 最高 1/256 的微步进分度器 • 集成电流检测功能 – 无需检测电阻 – 4% 满量程电流精度 • 智能调优、慢速和混合衰减选项 • 工作电源电压范围为 4.5V 至 48V • 低 RDS(ON)&#xff1a;24V…

最小二乘算法的解

最小二乘法&#xff08;Least Squares&#xff09;是一种用于寻找线性回归模型的最佳拟合直线的标准方法。它通过最小化数据点与拟合直线之间的平方差来找到最佳拟合的线性模型。 线性回归模型 假设我们有一组数据点 (xi,yi)&#xff0c;线性回归模型的目标是找到系数 w 和截…

一个很变态但是有用的变现手段:用AI技术搞电商模特图,接单接到手软~

前言 今天带大家拆解一个特别有趣的项目&#xff0c;必须得跟大家分享一下&#xff1a;用AI技术搞电商模特图。 是不是感觉挺科幻的&#xff1f;但这真不是科幻小说里的情节&#xff0c;而是咱们现实生活中已经实现的事情。 想想看&#xff0c;咱们平常在网上看到的那些漂亮…

《数据科学与工程》课程结课报告

目录 作业要求: 一、数据预处理(包括数据扩展、数据过滤、数据加载等) 1.数据查看 2.上传数据 3.查看数据读取情况 4.时间维度的切割 二、单维度数据描述分析 2.1 条数统计 (1)查询数据的总条数 (2)非空查询条数 (3)查询无重复总条数 (4)查询UID唯一的条…

ARM功耗管理之功耗数据与功耗收益评估

安全之安全(security)博客目录导读 思考&#xff1a;功耗数据如何测试&#xff1f;功耗曲线&#xff1f;功耗收益评估&#xff1f; UPF的全称是Unified Power Format&#xff0c;其作用是把功耗设计意图&#xff08;power intent&#xff09;传递给EDA工具&#xff0c; 从而帮…

Vue3 使用 Vue Router 时,prams 传参失效和报错问题

Discarded invalid param(s) “id“, “name“, “age“ when navigating 我尝试使用 prams 传递数据 <script setup> import { useRouter } from vue-routerconst router useRouter() const params { id: 1, name: ly, phone: 13246566476, age: 23 } const toDetail…

XSS: 原理 反射型实例[入门]

原理 服务器未对用户输入进行严格校验&#xff0c;使攻击者将恶意的js代码&#xff0c;拼接到前端代码中&#xff0c;从而实现恶意利用 XSS攻击危害 窃取用户Cookie和其他敏感信息&#xff0c;进行会话劫持或身份冒充后台增删改文章进行XSS钓鱼攻击利用XSS漏洞进行网页代码的…

ARM功耗管理之唤醒源与组合唤醒源

安全之安全(security)博客目录导读 思考&#xff1a;什么是睡眠锁&#xff1f;什么是唤醒源&#xff1f;什么是组合唤醒源&#xff1f; DynamIQ系统下的唤醒源 Redistributor中包含了一个GICR_WAKER寄存器&#xff0c;用于记录connected PE的状态是onLine还是offline. 如果让P…

数电基础 - 组合逻辑电路

目录 一. 简介 二. 分析方法 三. 设计方法 四. 常用的逻辑组合电路 五. 冒险现象 六. 消除冒险现象 七. 总结 一. 简介 组合逻辑电路是数字电路中的一种类型&#xff0c;它在任何时刻的输出仅仅取决于当时的输入信号组合&#xff0c;而与电路过去的状态无关。 组合逻辑…

C#实现最短路径算法

创建点集 double r 200 * 500;double width 1920;double height 1080;int col (int)(r / width);int row (int)(r / height);List<(double, double)> list1 new List<(double, double)>();for (int i 0; i < row; i){var y i * height;if (y < r){va…

[web]-图片上传、文件包含-图片上传

题目内容提示&#xff1a;上传图片试试吧&#xff0c;注意统一时区问题 打开页面如图&#xff0c;源码没有过滤&#xff0c;随便输入&#xff0c;进入上传目录 根据链接可以看到是文件包含&#xff0c;可以利用编码读取源码&#xff0c;这里只列出有用页面的编码&#xff08;?…