【MySQL】8.复合查询

复合查询

  • 一.基本查询回顾(新增子查询)
  • 二.多表查询
  • 三.自连接
  • 四.子查询
    • 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.rhkb.cn/news/375409.html

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

相关文章

MySQL下载安装

下载 1.进入mysql官网&#xff0c;点击下列链接 2.选择server 3.点击Archives&#xff0c;Archives&#xff0c;选择需要的版本 安装 基本是点下一步&#xff0c;值得注意的几点如下&#xff1a; 1、显示所有准备安装的MySQL相关应用&#xff0c;点击“[Execute]”开始执行安…

从数字化营销与运营视角:看流量效果的数据分析

基于数据打通的“全链路”营销是当下的“时髦”&#xff0c;应用它的前提是什么&#xff1f;深度营销和运营的关键数据如何获得&#xff1f;如何利用数据进行更精准的营销投放&#xff1f;如何利用数据优化投放的效果&#xff1f;如何促进消费者的转化&#xff0c;以及激活留存…

【万亿赛道!向量数据库--AI 大模型技术底座解决方案深度分析 2024】

文末有福利&#xff01; ‍ 向量数据库作为新型技术&#xff0c;发展时间较短&#xff0c;开源和上云是目前的主流趋势。在向量数据库领域早期的探索&#xff0c;主要是以Zilliz、Weaviate和Pinecone等初创型公司引领。 在AI大模型未被普遍应用之前&#xff0c;该产品的需求较…

某某会员小程序后端性能优化

背景 某某会员小程序后台提供开放平台能力&#xff0c;为三方油站提供会员积分、优惠劵等api。当用户在油站加油&#xff0c;油站收银会调用我们系统为用户发放积分、优惠劵等。用户反馈慢&#xff0c;三方调用发放积分接口性能极低&#xff0c;耗时30s&#xff1b; 接口情况…

VSCode神仙插件——Codeium (AI编程助手)

1、安装&登录插件 安装过程中会让你登录Codeium账户&#xff0c;可以通过Google账户登录&#xff0c;或者可以注册一个Codeium账户&#xff08;如果没有弹出让你登录账户的界面&#xff0c;可以等安装结束后在右下角找到登录的地方&#xff09; 右下角显示如下图所示&#…

Vue3打包发布,刷新出现的空白页面和错误

Vue3打包发布出现的错误&#xff1a;Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of text/html. Strict MIME type checking is enforced for module scripts per HTML spec. 第一次点击访问到这个路径&…

45 mysql truncate 的实现

前言 truncate 是一个我们也经常会使用到的命令 其作用类似于 delete from $table; 但是 他会比 delete 块很多&#xff0c;这里我们来看一下 它的实现 delete 的时候会逐行进行处理, 打上 删除标记, 然后 由后台任务 进行数据处理 truncate table 的实现 执行 sql 如下 …

C++:从C语言过渡到C++

在这篇博客中&#xff0c;我将会介绍从C语言过渡到C的一些基础知识。 目录 C起源 C的关键字 输出hello&#xff0c;world ​编辑 命名空间 1.什么是命名空间 2.namespace的作用 3.域作用限定符 4.命名空间的使用 IO流 缺省参数 函数重载 引用 1.引用的定义 2.引…

汽车零配件行业看板管理系统应用

生产制造已经走向了精益生产&#xff0c;计算时效产出、物料周转时间等问题&#xff0c;成为每一个制造企业要面临的问题&#xff0c;工厂更需要加快自动化&#xff0c;信息化&#xff0c;数字化的布局和应用。 之前的文章多次讲解了企业MES管理系统&#xff0c;本篇文章就为大…

solidity实战练习1

//SPDX-License-Identifier:MIT pragma solidity ^0.8.24; contract PiggyBank{constructor()payable{emit Deposit(msg.value);//触发事件1//意味着在部署合约的时候&#xff0c;可以向合约发送以太币&#xff08;不是通过调用函数&#xff0c;而是直接在部署合约时发送&#…

中职网络安全wire0077数据包分析

从靶机服务器的FTP上下载wire0077.pcap&#xff0c;分析该文件&#xff0c;找出黑客入侵使用的协议&#xff0c;提交协议名称 SMTP 分析该文件&#xff0c;找出黑客入侵获取的zip压缩包&#xff0c;提交压缩包文件名 DESKTOP-M1JC4XX_2020_09_24_22_43_12.zip 分析该文件&…

26.Labview波形图、XY图、强度图使用精讲

我们如何使用Labview显示曲线或者制作出下面这种我们想要的曲线并随着我们输入值的变化而变化呢&#xff1f; 本文详细讲解一下每种波形图的使用方式&#xff0c;帮助大家深入了解波形图的使用技巧。 文章中所有程序均可在百度网盘下载&#xff0c;下载方式&#xff1a;复制下…

elasticsearch源码分析-04集群状态发布

集群状态发布 cluster模块封装了在集群层面执行的任务&#xff0c;如集群健康、集群级元信息管理、分片分配给节点、节点管理等。集群任务执行之后可能会产生新的集群状态&#xff0c;如果产生新的集群状态主节点会将集群状态广播给其他节点。 集群状态封装在clusterState中&…

python作业二

# 二进制转化为十进制 num input("num:")def binaryToDecimal(binaryString):he 0length len(binaryString)for i in range(length):he int(binaryString[i]) * 2 ** (length - i - 1)return heprint(binaryToDecimal(num))代码运行如下&#xff1a; import math…

ADC 性能规格-静态性能- (2) - 偏移误差( offset error)和满标度增益误差(full scale gain error)

偏移误差(Offset error) 失调(Offset) 定义:失调是指ADC输出数字代码中零位与实际模拟输入零位之间的差异。简单来说,就是当输入信号为零时,ADC输出的数字代码并不一定是零,这个偏差就是失调。影响:失调会影响ADC的整体精度,因为它在整个输入范围内引入了一个固定的偏…

攻防世界 Web_python_template_injection(flask模版注入)

学习文章&#xff1a;https://www.freebuf.com/column/187845.html https://blog.csdn.net/weixin_54515836/article/details/113778233 flask的渲染方法有render_template和render_template_string两种。 render_template()是用来渲染一个指定的文件的。使用如下 return re…

一文读懂DNS和CDN

一.什么是DNS DNS&#xff08;Domain Name System&#xff09;全称为域名系统&#xff0c;是一个将域名和IP地址相互映射的分布式服务&#xff0c;他的作用就是把一个域名解析成为IP地址。我们平时输入的网址&#xff08;或者域名&#xff09;不能被计算机直接识别&#xff0c;…

操作系统——内存管理(面试准备)

虚拟内存 单片机没有操作系统&#xff0c;每次写完代码&#xff0c;都需要借助工具把程序烧录进去&#xff0c;这样程序才能跑起来。 另外&#xff0c;单片机的CPU是直接操作内存的物理地址。 在这种情况下&#xff0c;想在内存中同时运行两个程序是不可能的&#xff0c;如果第…

Python数据分析案例49——基于机器学习的垃圾邮件分类系统构建(朴素贝叶斯,支持向量机)

案例背景 trec06c是非常经典的邮件分类的数据&#xff0c;还是难能可贵的中文数据集。 这个数据集从一堆txt压缩包里面提取出来整理为excel文件还真不容不易&#xff0c;肯定要做一下文本分类。 虽然现在文本分类基本都是深度学习了&#xff0c;但是传统的机器学习也能做。本案…

【论文速读】《面向深度学习的联合消息传递与自编码器》,无线AI的挑战和解决思路

这篇文章来自华为的渥太华无线先进系统能力中心和无线技术实验室&#xff0c;作者中有大名鼎鼎的童文。 一、自编码架构的全局收发机面临的主要问题 文章对我比较有启发的地方&#xff0c;是提到自编码架构的全局收发机面临的主要问题&#xff1a; 问题一&#xff1a;基于随…