当前位置: 首页 > news >正文

MySQL复合查询

练习

  • 查询工资大于500或岗位为manager的雇员,同时还要满足姓名的首字母是大写的J
select * from emp where (sal>2500 or job='MANAGER') and substring(ename,1,1)='J';

或者

select * from emp where (sal>2500 or job='MANAGER') and ename like 'J%';
  • 按照部门号升序而雇员的工资降序排序
select * from emp order by deptno asc ,sal desc;
  • 使用年薪进行降序排列,先把每个人的年薪算出来
select sal*12+ifnull(comm,0) 年薪 from emp order by 年薪 desc;

在这里插入图片描述

  • 显示工资最高的员工的名字和工作岗位
    先获得最高的工资是多少,再在where里面使用这个数据,我们就可以使用符合查询
select ename,job,max(sal*12+ifnull(comm,0)) from emp;

在where里面套select,里面的先查询,进行子查询

 select ename,job,sal from emp where sal=(select max(sal) from emp);

在这里插入图片描述

  • 显示工资高于平均工资的员工信息
 select * from emp where sal>(select avg(sal) from emp);
  • 显示每个部门的平均工资和最高工资
select max(sal) 最高工资,avg(sal) 平均工资 from emp group by deptno;
  • 显示平均工资低于2000的部门号和它的平均工资
    having是在group by 之后进行操作
select deptno,avg(sal) 平均工资 from emp group by deptno having 平均工资<2000;

在这里插入图片描述

  • 显示每种岗位的雇员总数,平均工资
select job,count(ename),avg(sal) from emp group by job;

在这里插入图片描述

多表查询

多个组合成笛卡尔集
因为我们的数据都会被拆成不能再拆
重命名可以再from里面进行,select里面也可以,但是不能再where里面进行重命名

从第一张表中的第一条记录和另一张表中的所有记录进行组合,就是把数据一条一条的取出来,

所以,在我看来,所有的多表查询,都是单表查询
计算多张表里面的数据

select count(*) from emp one,emp two,emp three;
  • 显示雇员名,雇员工资以及所在的部门名,通过雇员所在的部门id来查找对应的值,使用外键
 select ename,sal,dname,dept.deptno from emp,dept where emp.deptno=dept.deptno;

我们认为所有的select查询出来的:”记录“,都可以把它看作”表“

  • 显示部门号为10的部门名,员工名和工资
 select ename,dname,sal,emp.deptno from emp,dept where dept.deptno=emp.deptno and emp.deptno=10;
  • 显示各个员工的姓名,工资,及工资级别
    因为前一个表会和后一个表的每一项都进行一个组合
select grade,ename,sal,deptno from emp,salgrade where sal between losal and hisal;

自链接

自链接是值在同一张表连接查询

  • 显示ford的上级领导的编号和姓名

可以先把两张表进行组合

select mgr.ename,mgr.empno from emp work,emp mgr where work.ename='FORD' and work.mgr=mgr.empno;

在这里插入图片描述

 select ename,empno from emp where (select mgr from emp where ename='FORD')=empno;

在这里插入图片描述

子查询

也叫做嵌套查询
在其他sql当中嵌套select的过程

单行子查询

查询的结果只有一列,一行

  • 显示和SMITH同一部分的员工
 select ename from emp where (select deptno from emp where ename='SMITH')=deptno;

在这里插入图片描述

多行子查询

查询的结果有多行的时候,可以用一些关键字来进行过滤

  • in 在一个范围内查找,不存在(属于一员)
    查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己
select ename,job,sal,deptno from emp where job in (select job from emp where deptno=10) and deptno!=10;

在这里插入图片描述

  • all关键字(比所有的都怎么样)
    显示工资比部门30的所有员工的工资都高的员工姓名,工资和部门号
select ename,sal,deptno from emp where sal> all(select distinct sal from emp where deptno=30);
  • any(比任意一个都要高)
    显示工资比部门30的任意员工的工资都高的员工姓名,工资和部门号
select ename,sal,deptno from emp where sal> any(select distinct sal from emp where deptno=30);

多列子查询

  • 查找和smith的部门和岗位完全相同的所有雇员,不含smith本人
select * from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH') and ename!='SMITH' ;
  • 显示每个高于自己部门平均工资的员工的姓名,部门,工资,平均工资
 select * from emp one,(select deptno,avg(sal) 平均工资 from emp group by deptno) avg_tb where (avg_tb.deptno=one.deptno) and sal>平均工资;
  • 查找每个部门工资最高的人的姓名,工资,部门,最高工资
select ename,sal,emp.deptno,maxsal from emp,(select ename,sal,deptno,max(sal) maxsal from emp group by deptno) maxtb where emp.deptno=maxtb.deptno and emp.sal=maxtb.maxsal;
  • 显示每个部门的信息(部门名,部门编号,地址)
select getno.deptno,dname,loc,num from (select deptno,count(*) num from emp group by deptno) getno,(select * from dept) deptdetail where getno.deptno=deptdetail.deptno;

合并查询

  • union,基本不会用
    将最终查询的结果进行结果,会自动去掉结果中的重复行
 select ename from emp where job='MANAGER' union select  sal>2500;
select * from emp where job='MANAGER' 
union
select * from emp where sal>2500;
  • union all:使用完,不会去掉重复的数据

相关文章:

  • 你需要的导航网站,这里都有
  • [SV]SystemVerilog中指定打印格式
  • 长期主义就是坚持重复的做一件事?
  • 各位程序员们,睡眠不足产生的后果超出你想象!
  • c++学习
  • 6步搭建一个飞机大战游戏
  • 前端与后端传递数据 — — JSON
  • CANoe/CAPL ,QQ消息远程通知
  • 3D 视觉算法初学概述
  • 特征点检测和特征点匹配(ORB)
  • MySQL事务篇:ACID原则、事务隔离级别及事务机制原理剖析
  • 【Spring依赖循环】提前曝光,直接曝光到二级缓存已经可以解决循环依赖问题了,为什么一定要三级缓存?
  • REACT全家桶(1)
  • 对Spring的后置处理器BeanPostProcessor的使用
  • 【day9】【洛谷算法题】-P2433小学数学N合一-刷题反思集[入门2分支结构]
  • [译]如何构建服务器端web组件,为何要构建?
  • fetch 从初识到应用
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Phpstorm怎样批量删除空行?
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • swift基础之_对象 实例方法 对象方法。
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 硬币翻转问题,区间操作
  • 回归生活:清理微信公众号
  • (4.10~4.16)
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (简单) HDU 2612 Find a way,BFS。
  • (力扣题库)跳跃游戏II(c++)
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (三)uboot源码分析
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .aanva
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .Net下的签名与混淆
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [C# WPF] 如何给控件添加边框(Border)?
  • [C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh
  • [CC2642r1] ble5 stacks 蓝牙协议栈 介绍和理解
  • [codevs] 1029 遍历问题
  • [flask]http请求//获取请求体数据
  • [Kubernetes]8. K8s使用Helm部署mysql集群(主从数据库集群)
  • [linux学习]apt-get参数解析
  • [NLP] 使用Llama.cpp和LangChain在CPU上使用大模型
  • [Phoenix] 七、如何使用自增ID
  • [PyTorch][chapter 66][强化学习-值函数近似]
  • [SpringBoot]接口的多实现:选择性注入SpringBoot接口的实现类
  • [SQL]数据库语言学习