高级查询 — 子查询
关于嵌套查询(子查询)
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. 主函数测试 带头双向循环链表的实现 今天我们来实现一下带头双向循环链表,顾名思义,带头就是有哨兵位,哨兵位不是链表的头,它是连接头节点的一个节点,方…...
OpenWrt 固件扩容官方指南
[OpenWrt Wiki] Expanding root partition and filesystem OpenWrt针对固件扩容有官方指南,但目前很多网络教程仍然停留在老版本,特此记录。 特点: 1、支持 ext4 和 squashfs 固件格式 2、自动识别根分区和文件系统。 3、利用空闲空间扩…...
如何用InvenTree开源库存管理系统实现零基础高效库存管理
如何用InvenTree开源库存管理系统实现零基础高效库存管理 【免费下载链接】InvenTree Open Source Inventory Management System 项目地址: https://gitcode.com/GitHub_Trending/in/InvenTree 在当今数字化时代,无论是小型制造企业、创客工作室还是电子爱好…...
Flowable7.x实战指南:构建高效“我的已办”功能与流程闭环
1. 为什么企业级应用必须实现"我的已办"功能 第一次接触Flowable工作流引擎时,我总觉得"我的已办"就是个简单的历史记录功能。直到在实际项目中踩过几次坑才发现,这个看似简单的模块,其实是整个流程管理系统的"中枢…...
如何快速上手ESP-ADF:从零开始构建智能音频项目
如何快速上手ESP-ADF:从零开始构建智能音频项目 【免费下载链接】esp-adf Espressif Audio Development Framework 项目地址: https://gitcode.com/gh_mirrors/es/esp-adf ESP-ADF(Espressif Audio Development Framework)是乐鑫为ESP…...
Dify + Weaviate/Qdrant混合重排架构实践(支持动态权重调度、Fallback降级与A/B测试埋点)
第一章:Dify重排序架构的核心设计哲学Dify 的重排序(Reranking)模块并非简单叠加于检索之后的后处理步骤,而是在整个 LLM 应用生命周期中承担语义对齐、意图强化与可信度校准三重使命的设计原语。其核心哲学可凝练为:*…...
Xinference-v1.17.1快速部署Web应用:Flask集成指南
Xinference-v1.17.1快速部署Web应用:Flask集成指南 1. 引言 想给自己的AI模型快速搭建一个Web界面吗?今天咱们就来聊聊怎么把Xinference-v1.17.1这个强大的AI推理引擎集成到Flask Web应用中。不需要复杂的架构设计,也不用担心API对接问题&a…...
LFM2.5-1.2B-Thinking-GGUF精彩案例:100字产品介绍生成质量实测分享
LFM2.5-1.2B-Thinking-GGUF精彩案例:100字产品介绍生成质量实测分享 1. 模型简介与测试背景 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的一款轻量级文本生成模型,特别适合在资源有限的环境中快速部署和使用。这款模型采用了GGUF格式和llama.cpp运行时…...
nRF24L01无线通讯模块发送失败排查指南:从引脚冲突到ACK配置
1. 引脚冲突:最容易被忽略的硬件陷阱 第一次用nRF24L01模块时,我踩过一个大坑:明明发送端显示数据发送成功,接收端却毫无反应。换了三套硬件还是同样的问题,直到发现接收板的CSN引脚竟然和复位电路共用了同一个GPIO。这…...
告别手动复制!用Apifox Helper插件实现IDEA代码注释自动同步API文档(2024最新版)
2024终极指南:用Apifox Helper打造无缝API文档同步工作流 在当今快节奏的开发环境中,API文档与代码的同步问题一直是困扰开发团队的痛点。传统的手动维护方式不仅耗时耗力,还容易因人为疏忽导致文档与实现不一致。想象一下,当你在…...
Flutter GetX Snackbar实战:5分钟实现顶部弹窗通知(附完整属性表)
Flutter GetX Snackbar实战:5分钟实现顶部弹窗通知(附完整属性表) 在移动应用开发中,通知弹窗是用户交互的重要组成部分。Flutter开发者常常需要快速实现各种样式的通知提示,而GetX库提供的Snackbar功能以其简洁的API和…...
