【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.mzph.cn/bicheng/45784.shtml

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

相关文章

Avalonia创建导航菜单

1. 简介 已开源&#xff0c;后续还会继续更新学习到的内容&#xff0c;欢迎Star&#xff0c;GitHub地址 开发Avalonia需要的一些资料&#xff0c;我已经分享到另一篇文章 示意图 涉及到内容&#xff1a; MVVM路由模板 开发&#xff1a; 开发工具&#xff1a;Rider&#x…

【linux】进程间通信(IPC)——匿名管道,命名管道与System V内核方案的共享内存,以及消息队列和信号量的原理概述

目录 ✈必备知识 进程间通信概述 &#x1f525;概述 &#x1f525;必要性 &#x1f525;原理 管道概述 &#x1f525;管道的本质 &#x1f525;管道的相关特性 &#x1f525;管道的同步与互斥机制 匿名管道 &#x1f525;系统调用接口介绍 &#x1f525;内核原理 …

C++ QT开发 学习笔记(1)

C QT开发 学习笔记(1) 考试系统 创建项目 新建Qt桌面应用程序&#xff0c;项目名&#xff1a;ExamSys。 类信息&#xff1a;类名LoginDialog继承自QDialog &#xff08;1&#xff09; ExamSys.pro 工程文件&#xff0c;包含当前工程的相关信息。 QDialog 是 Qt 框架中用…

二、计划任务

1.什么是计划任务 对于一些特定的任务&#xff0c;可以设定任务&#xff0c;让服务在规定时间去执行 2.windows中的计划任务 打开控制面板》管理工具》任务计划程序》创建基本任务 3.linux中的计划任务 周期性的计划crontab crontab -l :显示当前的计划惹怒我 -e&#…

大健康产业运营模式|大健康行业商业模式|健康管理盈利模式

大家好&#xff01;今天我们来聊聊如何在大健康行业中选择一个适合自己的商业模式&#xff0c;从保健、医疗、健身、美容、养老等方面快速发展并取得成功。 首先&#xff0c;大健康行业涵盖了很多领域&#xff0c;但最核心的是保健和医疗&#xff0c;这两者是保障大家健康的基础…

通过maven基于springboot项目构建脚手架archetype

1、引入脚手架构建的插件依赖 <!--构建脚手架archetype--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-archetype-plugin</artifactId><version>3.2.1</version></plugin><plugin><…

【Visual Studio】Visual Studio使用技巧及报错解决合集

目录 目录 一.概述 二.Visual Studio报错问题及解决方法 三.Visual Studio操作过程中遇到的问题及解决方法 四.Visual Studio编译优化选项 五.Visual Studio快捷键 一.概述 持续更新Visual Studio报错及解决方法&#xff0c;包括Visual Studio报错问题及解决方法、Visua…

土壤品质检测仪:守护大地之母的科技卫士

土壤&#xff0c;作为地球生命之源&#xff0c;承载着万物的生长与繁衍。然而&#xff0c;随着现代农业的快速发展&#xff0c;土壤品质问题日益凸显&#xff0c;对农作物的生长和人们的健康构成了潜在威胁。 随着环保意识的增强和农业可持续发展的需求&#xff0c;土壤品质检测…

实验8 视图创建与管理实验

一、实验目的 理解视图的概念。掌握创建、更改、删除视图的方法。掌握使用视图来访问数据的方法。 二、实验内容 在job数据库中&#xff0c;有聘任人员信息表&#xff1a;Work_lnfo表&#xff0c;其表结构如下表所示&#xff1a; 其中表中练习数据如下&#xff1a; 1.‘张明…

中霖教育:2024年中级经济师备考还来得及吗?

【中霖教育怎么样】【中霖教育口碑】 2024年的中级经济师考试还未开始报名&#xff0c;考试时间在11月16日-11月17日进行&#xff0c;考生目前距离考试还有半年的准备时间。不同的考生人群针对性的复习方法不同&#xff0c;以下内容可以作为大家的参考。 1、零基础考生&#…

Python类与对象02:继承

1、什么是继承 上一节中我们介绍了类与对象的用法。类可以看作是一种程序内的设计图纸&#xff0c;而对象则是基于这个图纸制造出来的实体。这个过程类似于现实中的设计表格和填写表格。 现在假设你是一名设计师&#xff0c;需要迭代一款新产品。你有两个选择&#xff1a; 在…

我的六天C++外出学习记

第一天 7月7日 星期日 早晨&#xff0c;我早早起来了&#xff0c;穿好衣服吃完饭就出发了。 我从家到学校用了1H&#xff0c;迟到了&#xff01;我急急忙忙去报到。 我们中午和晚上的饭菜虽说有点贵&#xff0c;但实在太美味了&#xff0c;和我们原本初中的饭菜相比&#…

手机怎么用代理ip上网

在数字化时代&#xff0c;网络已经成为我们生活中不可或缺的一部分。然而&#xff0c;有时候出于安全、隐私或访问特定网络资源的需要&#xff0c;我们可能需要使用代理IP来上网。那么&#xff0c;什么是代理IP&#xff1f;如何在手机上设置并使用它呢&#xff1f;本文将为您详…

AI绘画,Stable Diffusion姓氏头像副业拆解,操作简单,小白也能轻松上手!

前言 嗨&#xff0c;我是月月。 说时候&#xff0c;现在副业项目层出不穷&#xff0c;但要找到一个操作简单、收益可观且具有长期潜力的项目并不容易。 今天&#xff0c;我为大家推荐一个当下非常火爆的副业项目——AI定制百家姓氏头像。这不仅是一个热门项目&#xff0c;更…

云动态摘要 2024-07-12

给您带来云厂商的最新动态,最新产品资讯和最新优惠更新。 最新优惠与活动 数据库上云优选 阿里云 2024-07-04 RDS、PolarDB、Redis、MongoDB 全系产品新用户低至首年6折起! [免费体验]智能助手ChatBI上线 腾讯云 2024-07-02 基于混元大模型打造,可通过对话方式生成可视化…

Vue3 markRaw的使用

markRaw 作用:将一个对象标记为不可以被转化为代理对象。返回该对象本身。 应用场景: 1.有些值不应被设置成响应式时,例如复杂的第三方类库等 2.当渲染具有不可变数据源的大列表时,跳过响应式转换可以提高性能 3.在动态渲染组件的时候我们就可以使用 markRaw 包裹。markRaw 的…

Chromium实用技巧篇-如何下载指定版本的Chromium(一)

1. 引言 随着互联网技术的不断发展&#xff0c;网络浏览器已经成为我们日常生活中不可或缺的一部分。作为一款开源浏览器项目&#xff0c;Chromium不仅为Google Chrome提供了坚实的基础&#xff0c;也为其他许多浏览器提供了技术支持。如果您希望体验最前沿的浏览器功能或参与开…

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

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

网络基础知识--网络硬件设备介绍(含eNSP模拟器命令使用)

华为 eNSP 模拟器安装教程可参考&#xff1a;华为 eNSP 模拟器安装教程&#xff08;内含下载地址&#xff09;_ensp下载-CSDN博客 华为eNSP&#xff08;Enterprise Network Simulation Platform&#xff09;模拟器是一款由华为提供的免费网络仿真平台&#xff0c;主要用于模拟和…

虚拟机vmware网络设置

一、网络分类 打开vmware workstation网络编辑器可以知道有三种网络类型&#xff0c;分别是&#xff1a;桥接模式、nat模式、仅主机模式。 1、桥接模式 桥接模式是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接的作用下, 类似于把物理主机虚拟为一个交换机, 所有设…