高级查询 — 子查询
关于嵌套查询(子查询)
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. 主函数测试 带头双向循环链表的实现 今天我们来实现一下带头双向循环链表,顾名思义,带头就是有哨兵位,哨兵位不是链表的头,它是连接头节点的一个节点,方…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...
热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...
rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...
