MySQL--复合查询

之前学过了基本的查询,虽然已经够80%的使用场景了,但是依旧需要了解剩下的20%。

一、多表笛卡尔积(多表查询)

  以前我们使用基本查询的时候,from后面就跟一张表名,在多表查询这里,from后面可以跟多张表名。

这里有两张测试表,一张是用户的成绩表,还有一张是用户的信息表。

假设我们直接在from后面跟上这两张表

我们发现它们的组合方式就是拿其中一张表的某一条数据,依次跟另一张表的所有数据进行组合。就是穷举组合。

但是我们发现,如果id不相等的话,查出来的结果是没有意义的,所以我们可以加判断条件,使查询结果合理,并且id列是重复的,我们可以指定显示哪些列。

select exam_result.id,name,chinese,qq,age from exam_result,user where exam_result.id = user.id;

在mysql下,一切皆为表。

比如,我们再来查询,年龄在13岁到15岁之间的。

二、自连接 

自连接是指在同一张表连接查询。

这样子写是不行的。

我们可以对表进行重命名后,再作查询。

 

案例1:找到数学成绩比孙悟空低的同学

方法1:可以用子查询的方式

select * from exam_result where math < (select math from exam_result where name = '孙悟空');

 

方法2:自连接。直接在同一张表里面自连接查询,记得重命名。 

select * from exam_result t1,exam_result t2 where t2.name='孙悟空' and t1.math<t2.math;

 另外我们其实只需要t1表中的信息,那么可以指定一下

三、子查询 

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

单行子查询 

 比如之前的案例:找到数学成绩比孙悟空低的同学

select * from exam_result where math < (select math from exam_result where name = '孙悟空');

因为在子查询那里查出来的条件是单列单行的,所以叫做单行子查询

多行子查询 

与单行不同的是,虽然多行的子查询条件还是只有一列,但是有多行。

这里主要用到三个关键字:in,all,any。

以之前的员工表为例:
in案例:查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己

select ename,job,sal,deptno from emp where job in (select distinct job from
emp where deptno=10) and deptno<>10;

 

all关键字案例:显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号

select ename, sal, deptno from EMP where sal > all(select sal from EMP where
deptno=30);

 any关键字:

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

多列子查询

单行子查询是指子查询只返回单列,单行数据;多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句
案例: 查询和 SMITH 的部门和岗位完全相同的所有雇员,不含 SMITH 本人

select ename from EMP where (deptno, job)=(select deptno, job from EMP
where ename='SMITH') and ename <> 'SMITH';

总结:任何时刻,我们查出来的临时结构,本质在逻辑上也是表结构。

在from子句中使用子查询

子查询语句出现在from子句中。这里要用到数据查询的技巧,把一个子查询当做一个临时表使用。 

案例:显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资

//获取各个部门的平均工资,将其看作临时表
select ename, deptno, sal, format(asal,2) from EMP,
(select avg(sal) myavg, deptno dt from EMP group by deptno) tmp
where EMP.sal > tmp.myavg and EMP.deptno=tmp.dt;

 

案例:查找每个部门工资最高的人的姓名、工资、部门、最高工资 

select EMP.ename, EMP.sal, EMP.deptno, ms from EMP,
(select max(sal) mymax, deptno from EMP group by deptno) tmp
where EMP.deptno=tmp.deptno and EMP.sal=tmp.mymax;

 案例:显示每个部门的信息(部门名,编号,地址)和人员数量

-- 1. 对EMP表进行人员统计
select count(*), deptno from EMP group by deptno;
-- 2. 将上面的表看作临时表
select DEPT.deptno, dname, dept_num, loc from DEPT,
(select count(*) dept_num, deptno from EMP group by deptno) tmp
where DEPT.deptno=tmp.deptno;

这里不仅使用了子查询,还使用了多表查询。

总结:解决多表问题的本质就是:想办法将多表转化成单表,在mysql中,所有的select问题全都可以转化成单表问题。(多表查询的指导思想)

四、合并查询

在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 unionunion all。

跟多表查询还是不同的。

union:

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

 

如图上,就是将第一个数学大于70的结果表跟第二个语文大于85的结果的表合并在一起。

union all就是不去掉重复的行。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

跟进2年弄丢1.8亿,你的大客管理错在哪里?

数量并非目的之所在&#xff0c;质量才是根本之道。重视1%的超级用户&#xff0c;才是提高效率的关键所在。 ——凯文凯利 在当今的商业环境中&#xff0c;大客户已成为销售服务型企业最宝贵的资产。他们不仅贡献了企业收入的重要一环&#xff0c;…

监管端..

文章目录 1. 登录流程2. 日志AOP 1. 登录流程 使用账号&#xff08;手机号&#xff09;、密码、验证码。登录就是获取token的&#xff0c;输入的账号密码用RSA加密&#xff08;非对称&#xff09; 首先输入账号密码&#xff0c;在发送手机验证码时候先校验账号密码有没有输入…

AI智能体研发之路-模型篇(三):中文大模型开、闭源之争

博客导读&#xff1a; 《AI—工程篇》 AI智能体研发之路-工程篇&#xff08;一&#xff09;&#xff1a;Docker助力AI智能体开发提效 AI智能体研发之路-工程篇&#xff08;二&#xff09;&#xff1a;Dify智能体开发平台一键部署 AI智能体研发之路-工程篇&#xff08;三&am…

kafka-消费者组偏移量重置

文章目录 1、消费者组偏移量重置1.1、列出所有的消费者组1.2、查看 my_group1 组的详细信息1.3、获取 kafka-consumer-groups.sh 的帮助信息1.4、 偏移量重置1.5、再次查看 my_group1 组的详细信息 1、消费者组偏移量重置 1.1、列出所有的消费者组 [rootlocalhost ~]# kafka-…

光伏智慧化运营解决方案的应用和价值

在社会对新能源需求的不断扩大&#xff0c;光伏已经成为了可再生能源的重要组成部分&#xff0c;随着光伏电站数量和规模的不断扩大&#xff0c;相关企业和用户都就开始关注如何能够高效精准的进行电站管理&#xff0c;对此&#xff0c;鹧鸪云提出了光伏智慧化运营解决方案&…

Docker 入门版

目录 1. 关于Docker 2. Dockr run命令中常见参数解读 3. Docker常见命令 4. Docker 数据卷 5. Docker本地目录挂载 6. 自定义镜像 Dockerfile 语法 自定义镜像模板 Demo 7. Docker网络 1. 关于Docker 在docker里面下载东西&#xff0c;就是相当于绿色面安装板&#x…

B站广告推广引流哪里能做?

哔哩哔哩&#xff08;B站&#xff09;作为国内领先的年轻人文化社区与视频平台&#xff0c;其独特的二次元文化氛围和高度活跃的用户群体&#xff0c;成为了众多品牌寻求突破、触达年轻消费群体的理想阵地。在这样一个充满活力但又竞争激烈的平台上有效推广&#xff0c;吸引并留…

2024/5/28 P1247 取火柴游戏

取火柴游戏 题目描述 输入 k k k 及 k k k 个整数 n 1 , n 2 , ⋯ , n k n_1,n_2,\cdots,n_k n1​,n2​,⋯,nk​&#xff0c;表示有 k k k 堆火柴棒&#xff0c;第 i i i 堆火柴棒的根数为 n i n_i ni​&#xff1b;接着便是你和计算机取火柴棒的对弈游戏。取的规则如下&…

编译安装Apache httpd服务

目录 1.初始化设置&#xff0c;将Apache所需软件包传到 /opt 目录下 &#xff08;1&#xff09;关闭防火墙 &#xff08;2&#xff09;上传软件包到/opt目录 2.安装环境依赖包 3.配置软件模块 4.编译及安装 5.优化配置文件路径&#xff0c;并把httpd服务的可执行程序文件…

设置AXI主寄存器切片和AXI数据FIFO

设置AXI主寄存器切片和AXI数据FIFO 打开MHS文件&#xff0c;并为每个AXI主机设置启用寄存器切片/启用数据FIFO。到 确定正确的设置&#xff0c;使用下表中的信息搜索MHS。 进行搜索时&#xff0c;将<intf_name>替换为相关的BUS_INTERFACE名称。 例如&#xff0c;BUS_INTE…

AI开发初体验:昇腾加持,OrangePi AIpro 开发板

文章目录 一、前言二、板子介绍2.1 拆箱2.2 板子规格2.2.1 常规项目2.2.2 扩展项目2.2.3 操作系统 2.3 点板画面 三、AI程序初体验3.1 新奇的地方3.2 运行第一个AI程序3.2.1 硬件连接3.2.2 串口连接3.2.3 开启外部IP端口3.2.4 查询板子IP地址3.2.5 了解 juypter lab 启动脚本&a…

前端响应式期末作品

网页设计成品_前端响应式 主题&#xff1a;租房网站&#xff0c;共6个html页面&#xff0c;包含首页&#xff0c;登录注册&#xff0c;租房新闻&#xff0c;租房精选&#xff0c;租房详情&#xff0c;数据可视化页面&#xff08;可以修改内容&#xff09; 采用技术&#xff1a;…

webserver服务器从零搭建到上线(九)|⭐️EventLoop类(一)——详解成员变量、简述成员方法

在本节中&#xff0c;我们一起来仔细探讨一下EpollPoller类。该类可以说是muduo库中最最核心的类了&#xff0c;一定要搞懂&#xff01; 文章目录 私有成员using ChannelList std::vector<Channel*>looping_、quit_threadId_pollReturnTime_、poller_wakeup_fd、wakeupC…

音视频集市应用融合平台方案

音视频应用即有深度又有广度&#xff0c;如何让一个平台拥有更多功能更灵活的拓展能力&#xff0c;从单体模块化&#xff0c;多插件到微服务都有大量的实践。 笔者在实际开发过程也同样面对这些纷繁复杂而又必须共容共通需求的挑战。 在实战开发了大量从服务端到设备端再到浏览…

软考案例题总结

数据库故障与恢复 E-R图 关系规范化 SQL 涉及的知识点一般包括&#xff1a;表的创建、视图和索引创建的关键字、表的查询、聚集函数、子查询、分组查询、集合操作、外连接存储过程、游标、触发器以及表的更新、插入和删除

【iOS】——GCD再学习

文章目录 一、GCD的定义二、GCD 任务和队列1.任务2.队列 三、GCD 的使用1.创建队列2.创建任务3.队列任务 组合方式并发队列 同步执行异步执行 并发队列同步执行 串行队列异步执行 串行队列同步执行 主队列在主线程中调用 同步执行 主队列在其它线程中调用 同步执行 主队…

现代信号处理11_Spectral Analysis谱分析(CSDN_20240526)

谱分析与傅里叶变换 对于一个信号&#xff0c;一方面可以从时域上对其进行分析&#xff0c;另一方面也可以从频域上对其进行认识&#xff0c;对信号进行频谱分析能够帮助我们了解能量在频域上的分布。 确定性信号的能量通常是有限的&#xff0c;而平稳随机信号的能量通常是无限…

基于香橙派搭建家庭网盘

一、概述 家庭网盘是一种用于家庭用户的在线存储和文件共享服务。它允许家庭成员在云端存储、同步和分享照片、视频、文档等文件&#xff0c;方便快捷地访问和管理个人和家庭数据。家庭网盘通常提供安全可靠的数据存储和备份功能&#xff0c;保障用户数据的安全性。此外&#x…

前端 CSS 经典:水波进度样式

前言&#xff1a;简单实现水波进度样式&#xff0c;简单好看。 效果图&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" /><meta http-equiv"X-UA-Compatible" cont…