高级查询 — 子查询
关于嵌套查询(子查询)
1.概述
- 子查询是在一个查询中嵌套另一个查询的查询语句。
- 内部查询从外部查询或数据库中提取数据,然后使用这些数据来执行内部查询。
- 出现在其他语句中的 select 语句,称为嵌套查询或子查询。
- 外部的查询语句,称为主查询或外查询。
2.分类
-
按结果集的行列数分类
- 标量子查询(子查询结果集只有一行一列)
- 列子查询(子查询结果集只有一列多行)
- 行子查询(子查询结果集有一行多列)
- 表子查询(子查询结果集一般为多行多列)
-
按子查询出现的位置分类
- select 后:标量子查询。
- from 后面:表子查询。
- where 或 having 后:标量子查询、行子查询、列子查询、表子查询。
- exists 后
-
按与父查询的关系分类
- 不相关子查询:子查询的条件不依赖于父查询。
- 相关子查询:子查询的条件依赖于父查询。
3.注意
- 子查询一般放在小括号内,并且一般放在条件的右侧。
- 标量子查询,一般搭配着单行操作符使用;列子查询,一般搭配着多行操作符使用。
- 子查询的
select语句中不能使用order by子句,因为其只能对最终结果进行排序。
where 或 having 后的子查询
1.标量子查询
-
子查询结果集只有一行一列
-
在
where子句中过滤数据:使用标量子查询来比较列与单个值之间的关系 -
查询工资比名为Ellen高的员工的名字和工资
-
分步:查询Ellen的工资(子) -> 查询比其工资高的信息(父)
-
select first_name, salary from employees where salary > (select salaryfrom employeeswhere first_name = 'Ellen' );
-
-
查询工资最少的员工的名字、工种和月薪
-
分步:查询最少工资(子)-> 查询工资等于最少工资的员工信息
-
select first_name, job_id, salary from employees where salary = (select min(salary)from employees );
2.列子查询
-
子查询结果集只有一列多行
-
放在
where语句中,用来限制主查询返回的结果集,可以用于比较、过滤和连接数据。 -
返回位置编号是 1400 和 1500 两个部门中的所有员工名字
-
分步:1400 和 1500 两个部门(子) -> 此两部门的员工信息(父)。
-
select first_name, department_id from employees where department_id in(select distinct department_idfrom departmentswhere location_id in(1400, 1500) );
-
-
查询其它工种中比
it_prog工种所有工资都低的员工的员工编号、名字、工种和月薪-
分步:it_prog公种所有员工的工资(子) -> 查询满足要求的员工信息()父。
-
select employee_id, first_name, job_id, salary from employees where salary < all(select distinct salaryfrom employeeswhere job_id = 'it_prog' ) and job_id != 'it_prog';
-
3.行子查询
-
子查询结果集有一行多列。
-
查询员工编号最小并且工资最高的员工信息(编号、姓名、工资)
-
分步:最小员工编号与最高工资(子) -> 员工信息(父)。
-
select employee_id, first_name, salary from employees where(employee_id, salary) = (select min(employee_id), max(salary)from employees );
-
-
查询 employees 的部门编号和管理者编号在 departments 表中的员工名字,部门编号和管理者编号
-
分步:部门编号和管理者编号(子)-> 员工信息(父)
-
select first_name, department_id, manager_id from employees where (department_id, manager_id) in (select department_id, manager_idfrom departments );
-
select 和 from 后的子查询
1. select
-
select后面仅支持标量子查询。 -
查询每个部门信息和该部门员工个数
-
分步:部门员工个数(子)-> 部门信息(父)
-
select d.*, (select count(*)from employees ewhere e.department_id = d.department_id ) as num from departments d;
-
-
查询 90 编号的部门员工人数占公司总人数的比例,带百分号,小数点后保留一位。
-
select concat(truncate((select count(*)from employeeswhere department_id = 90) / (select count(*)from employees)*100,1), '%') as percent from dual;
-
2. from
-
from后面支持表子查询。 -
子查询结果作为临时表,要求必须起别名。
-
查询部门编号、该部门的平均工资 average_salary 和工资等级,平均工资去掉小数部分
-
分步:部门编号、该部门的平均工资(子)-> 部门编号、该部门的平均工资和对应的工资等级(父)。
-
select s.*, g.grade_level from (select department_id, truncate(avg(salary), 0) as average_salaryfrom employeesgroup by department_id ) as s join job_grades as g on s.average_salary between lowest_sal and highest_sal;
-
exit 后的子查询
1.语法
exists(query_statement)- 返回结果为1或0。
2.示例
-
查询工资大于3000的员工编号
select employee_id from northwind.employees where salary > 30000;select exists(select employee_idfrom northwind.employeeswhere salary > 30000 ) as 'exist salary > 30000'; -
查询有员工的部门名
select department_name from departments as d where exists (select *from employees as ewhere d.department_id = e.department_id );
沉住气别惧怕黑暗,因为光亮就在不远。 ——痛仰《当太阳照常升起》
相关文章:
高级查询 — 子查询
关于嵌套查询(子查询) 1.概述 子查询是在一个查询中嵌套另一个查询的查询语句。内部查询从外部查询或数据库中提取数据,然后使用这些数据来执行内部查询。出现在其他语句中的 select 语句,称为嵌套查询或子查询。外部的查询语句…...
霍夫变换(Hough Transform)
文章目录 1. 什么是霍夫变换2. 霍夫直线检测2.1 霍夫直线检测的具体步骤2.2 霍夫直线检测的优缺点2.3 OpenCV中霍夫直线检测的应用2.3.1 标准霍夫检测2.3.2 概率霍夫检测 3. 霍夫圆检测4. 源码仓库地址 1. 什么是霍夫变换 霍夫变换(Hough Transform)是图像处理中的一种特征提取…...
【每日挠头算法题(2)】压缩字符串|仅执行一次字符串交换能否使两个字符串相等
文章目录 一、压缩字符串思路 二、仅执行一次字符串交换能否使两个字符串相等思路1:计数法思路2:模拟法 总结 一、压缩字符串 点我直达~ 思路 使用双指针法 大致过程如下: 使用双指针,分别读(read)&…...
V4L2框架解析
和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、概览二、流程简介三、关键结构体四、模块初始化五、处理用户空间请求 一、概览 相机驱动层位于HAL Moudle与硬件层之间,借助linux内核驱…...
Trie树模板与应用
文章和代码已经归档至【Github仓库:https://github.com/timerring/algorithms-notes 】或者公众号【AIShareLab】回复 算法笔记 也可获取。 文章目录 Trie树(字典树)基本思想例题 Trie字符串统计code关于idx的理解 模板总结应用 最大异或对分…...
【华为OD统一考试B卷 | 200分】跳格子游戏(C++ Java JavaScript Python)
文章目录 题目描述输入描述输出描述用例C++javajavaScriptpython题目描述 地上共有N个格子,你需要跳完地上所有的格子,但是格子间是有强依赖关系的,跳完前一个格子后,后续的格子才会被开启,格子间的依赖关系由多组steps数组给出,steps[0]表示前一个格子,steps[1]表示st…...
该选哪个语言进修呢?
前言: 如今,计算机编程已经成为了许多工作领域中的必备技能。但是,现在的计算机语言有很多,这可能会让我们感到困惑:我应该从哪个语言开始呢?在这篇博客中,我们将详细分析当前流行的一些计算机…...
数据库实验三 数据查询一
任务描述 本关任务:按条件查询数据表的所有字段 为了完成本关任务,你需要掌握: 如何查询数据表的所有字段 相关知识 查询数据表 命令格式: select * from 数据表 where 查询条件 任务要求 打开province数据库 第一题 查询街…...
【Python百日进阶-Web开发-Peewee】Day244 - 数据库 Postgresql、CockroachDB
文章目录 六、数据库6.1 初始化数据库6.2 使用 Postgresql6.2.1 隔离级别 6.3 使用 CockroachDB 六、数据库 http://docs.peewee-orm.com/en/latest/peewee/database.html PeeweeDatabase对象表示与数据库的连接。该类Database使用打开数据库连接所需的所有信息进行实例化&…...
Vue 中的列表渲染
Vue 中的列表渲染 在 Vue 中,列表渲染是非常常见的操作。它允许我们将一个数组中的数据渲染为一个列表,从而实现数据的展示和交互。在本文中,我们将探讨 Vue 中的列表渲染的基本原理和用法,并给出一些实例代码来帮助读者更好地理…...
java 中的关键字
1. 面向对象编程(OOP) - 把程序中的实体看做对象,而不是过程或函数。OOP有3个基本特征:封装,继承和多态。 2. 类(Class) - 一个用于描述对象属性和方法的蓝图。 3. 对象(Object) - 类的实例化,也就是一个具体的实体。 4. 方法(Met…...
python序列化和结构化数据详解
序列化和结构化数据是计算机程序中非常重要的概念,它们的原理和应用在许多应用程序中都是必不可少的。Python作为一种高级编程语言,在序列化和结构化数据方面提供了很多优秀的解决方案。在本文中,我们将详细介绍Python中序列化和结构化数据的…...
PoseiSwap的趋势性如何体现?
DEX 代表了一种先进的意识形态,相对于 CEX 其更强调无许可、去中心化以及公开透明。然而随着 DeFi 赛道逐渐从 2021 年年底的高峰逐渐转向低谷,DEX 整体的交易量、TVL等数据指标也开始呈现下滑的趋势,DEX 正在面临发展的新瓶颈期。 在这样的背…...
西南交通大学智能监测 培训课程练习4
2023.056.07和09培训 项目实战 目录 一、infracore(基础核心层) 1.1database 1.2config 1.3util 二、业务领域模块 2.1structure模块 2.1.1domain层 2.1.2application层 2.1.3adapter层 2.2sensor模块 2.2.1domian层 2.2.2application层 2.2.…...
设备树的引入及简明教程
首先说明,设备树不可能用来写驱动。 设备树只是用来给内核里的驱动程序,指定硬件的信息。比如LED驱动,在内核的驱动程序里去操作寄存器,但是操作哪一个引脚?这由设备树指定。 需要编写设备树文件(dts: device tree s…...
MM32F3273G8P火龙果开发板MindSDK开发教程12 -获取msa311加速器的敲击事件
MM32F3273G8P火龙果开发板MindSDK开发教程12 -获取msa311加速器的敲击事件 1、功能描述 msa311可以识别单击、双击事件,类似手机上的点击返回,双击截屏功能。 单击,双击都能产生中断事件。 中断事件产生后,从对应的状态寄存器读…...
Maven聚合
在实际的开发过程中,我们所接触的项目一般都由多个模块组成。在构建项目时,如果每次都按模块一个一个地进行构建会十分得麻烦,Maven 的聚合功能很好的解决了这个问题。 聚合 使用 Maven 聚合功能对项目进行构建时,需要在该项目中…...
[架构之路-211]- 需求- 软架构前的需求理解:ADMEMS标准化、有序化、结构化、层次化需求矩阵 =》需求框架
目录 前言: 一、什么是ADMES: 首先,需求是分层次的: 其次,需求是有结构的,有维度的 再次,不同层次需求、不同维度需求之间可以相互转化(难点、经验积累) 最终,标准…...
基于前推回代法的连续潮流计算研究【IEEE33节点】(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
【双向链表】
双向链表 带头双向循环链表的实现1. 函数的声明2. 函数的实现3. 主函数测试 带头双向循环链表的实现 今天我们来实现一下带头双向循环链表,顾名思义,带头就是有哨兵位,哨兵位不是链表的头,它是连接头节点的一个节点,方…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...
