当前位置: 首页 > news >正文

高级查询 — 子查询

关于嵌套查询(子查询)

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
    );
    

沉住气别惧怕黑暗,因为光亮就在不远。 ——痛仰《当太阳照常升起》

相关文章:

高级查询 — 子查询

关于嵌套查询&#xff08;子查询&#xff09; 1.概述 子查询是在一个查询中嵌套另一个查询的查询语句。内部查询从外部查询或数据库中提取数据&#xff0c;然后使用这些数据来执行内部查询。出现在其他语句中的 select 语句&#xff0c;称为嵌套查询或子查询。外部的查询语句…...

霍夫变换(Hough Transform)

文章目录 1. 什么是霍夫变换2. 霍夫直线检测2.1 霍夫直线检测的具体步骤2.2 霍夫直线检测的优缺点2.3 OpenCV中霍夫直线检测的应用2.3.1 标准霍夫检测2.3.2 概率霍夫检测 3. 霍夫圆检测4. 源码仓库地址 1. 什么是霍夫变换 霍夫变换(Hough Transform)是图像处理中的一种特征提取…...

【每日挠头算法题(2)】压缩字符串|仅执行一次字符串交换能否使两个字符串相等

文章目录 一、压缩字符串思路 二、仅执行一次字符串交换能否使两个字符串相等思路1&#xff1a;计数法思路2&#xff1a;模拟法 总结 一、压缩字符串 点我直达~ 思路 使用双指针法 大致过程如下&#xff1a; 使用双指针&#xff0c;分别读&#xff08;read&#xff09;&…...

V4L2框架解析

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、概览二、流程简介三、关键结构体四、模块初始化五、处理用户空间请求 一、概览 相机驱动层位于HAL Moudle与硬件层之间&#xff0c;借助linux内核驱…...

Trie树模板与应用

文章和代码已经归档至【Github仓库&#xff1a;https://github.com/timerring/algorithms-notes 】或者公众号【AIShareLab】回复 算法笔记 也可获取。 文章目录 Trie树&#xff08;字典树&#xff09;基本思想例题 Trie字符串统计code关于idx的理解 模板总结应用 最大异或对分…...

【华为OD统一考试B卷 | 200分】跳格子游戏(C++ Java JavaScript Python)

文章目录 题目描述输入描述输出描述用例C++javajavaScriptpython题目描述 地上共有N个格子,你需要跳完地上所有的格子,但是格子间是有强依赖关系的,跳完前一个格子后,后续的格子才会被开启,格子间的依赖关系由多组steps数组给出,steps[0]表示前一个格子,steps[1]表示st…...

该选哪个语言进修呢?

前言&#xff1a; 如今&#xff0c;计算机编程已经成为了许多工作领域中的必备技能。但是&#xff0c;现在的计算机语言有很多&#xff0c;这可能会让我们感到困惑&#xff1a;我应该从哪个语言开始呢&#xff1f;在这篇博客中&#xff0c;我们将详细分析当前流行的一些计算机…...

数据库实验三 数据查询一

任务描述 本关任务&#xff1a;按条件查询数据表的所有字段 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 如何查询数据表的所有字段 相关知识 查询数据表 命令格式&#xff1a; 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 中&#xff0c;列表渲染是非常常见的操作。它允许我们将一个数组中的数据渲染为一个列表&#xff0c;从而实现数据的展示和交互。在本文中&#xff0c;我们将探讨 Vue 中的列表渲染的基本原理和用法&#xff0c;并给出一些实例代码来帮助读者更好地理…...

java 中的关键字

1. 面向对象编程(OOP) - 把程序中的实体看做对象&#xff0c;而不是过程或函数。OOP有3个基本特征&#xff1a;封装&#xff0c;继承和多态。 2. 类(Class) - 一个用于描述对象属性和方法的蓝图。 3. 对象(Object) - 类的实例化&#xff0c;也就是一个具体的实体。 4. 方法(Met…...

python序列化和结构化数据详解

序列化和结构化数据是计算机程序中非常重要的概念&#xff0c;它们的原理和应用在许多应用程序中都是必不可少的。Python作为一种高级编程语言&#xff0c;在序列化和结构化数据方面提供了很多优秀的解决方案。在本文中&#xff0c;我们将详细介绍Python中序列化和结构化数据的…...

PoseiSwap的趋势性如何体现?

DEX 代表了一种先进的意识形态&#xff0c;相对于 CEX 其更强调无许可、去中心化以及公开透明。然而随着 DeFi 赛道逐渐从 2021 年年底的高峰逐渐转向低谷&#xff0c;DEX 整体的交易量、TVL等数据指标也开始呈现下滑的趋势&#xff0c;DEX 正在面临发展的新瓶颈期。 在这样的背…...

西南交通大学智能监测 培训课程练习4

2023.056.07和09培训 项目实战 目录 一、infracore&#xff08;基础核心层&#xff09; 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.…...

设备树的引入及简明教程

首先说明&#xff0c;设备树不可能用来写驱动。 设备树只是用来给内核里的驱动程序&#xff0c;指定硬件的信息。比如LED驱动&#xff0c;在内核的驱动程序里去操作寄存器&#xff0c;但是操作哪一个引脚&#xff1f;这由设备树指定。 需要编写设备树文件(dts: device tree s…...

MM32F3273G8P火龙果开发板MindSDK开发教程12 -获取msa311加速器的敲击事件

MM32F3273G8P火龙果开发板MindSDK开发教程12 -获取msa311加速器的敲击事件 1、功能描述 msa311可以识别单击、双击事件&#xff0c;类似手机上的点击返回&#xff0c;双击截屏功能。 单击&#xff0c;双击都能产生中断事件。 中断事件产生后&#xff0c;从对应的状态寄存器读…...

Maven聚合

在实际的开发过程中&#xff0c;我们所接触的项目一般都由多个模块组成。在构建项目时&#xff0c;如果每次都按模块一个一个地进行构建会十分得麻烦&#xff0c;Maven 的聚合功能很好的解决了这个问题。 聚合 使用 Maven 聚合功能对项目进行构建时&#xff0c;需要在该项目中…...

[架构之路-211]- 需求- 软架构前的需求理解:ADMEMS标准化、有序化、结构化、层次化需求矩阵 =》需求框架

目录 前言&#xff1a; 一、什么是ADMES: 首先&#xff0c;需求是分层次的&#xff1a; 其次&#xff0c;需求是有结构的&#xff0c;有维度的 再次&#xff0c;不同层次需求、不同维度需求之间可以相互转化&#xff08;难点、经验积累&#xff09; 最终&#xff0c;标准…...

基于前推回代法的连续潮流计算研究【IEEE33节点】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

【双向链表】

双向链表 带头双向循环链表的实现1. 函数的声明2. 函数的实现3. 主函数测试 带头双向循环链表的实现 今天我们来实现一下带头双向循环链表&#xff0c;顾名思义&#xff0c;带头就是有哨兵位&#xff0c;哨兵位不是链表的头&#xff0c;它是连接头节点的一个节点&#xff0c;方…...

OpenWrt 固件扩容官方指南

[OpenWrt Wiki] Expanding root partition and filesystem OpenWrt针对固件扩容有官方指南&#xff0c;但目前很多网络教程仍然停留在老版本&#xff0c;特此记录。 特点&#xff1a; 1、支持 ext4 和 squashfs 固件格式 2、自动识别根分区和文件系统。 3、利用空闲空间扩…...

如何用InvenTree开源库存管理系统实现零基础高效库存管理

如何用InvenTree开源库存管理系统实现零基础高效库存管理 【免费下载链接】InvenTree Open Source Inventory Management System 项目地址: https://gitcode.com/GitHub_Trending/in/InvenTree 在当今数字化时代&#xff0c;无论是小型制造企业、创客工作室还是电子爱好…...

Flowable7.x实战指南:构建高效“我的已办”功能与流程闭环

1. 为什么企业级应用必须实现"我的已办"功能 第一次接触Flowable工作流引擎时&#xff0c;我总觉得"我的已办"就是个简单的历史记录功能。直到在实际项目中踩过几次坑才发现&#xff0c;这个看似简单的模块&#xff0c;其实是整个流程管理系统的"中枢…...

如何快速上手ESP-ADF:从零开始构建智能音频项目

如何快速上手ESP-ADF&#xff1a;从零开始构建智能音频项目 【免费下载链接】esp-adf Espressif Audio Development Framework 项目地址: https://gitcode.com/gh_mirrors/es/esp-adf ESP-ADF&#xff08;Espressif Audio Development Framework&#xff09;是乐鑫为ESP…...

Dify + Weaviate/Qdrant混合重排架构实践(支持动态权重调度、Fallback降级与A/B测试埋点)

第一章&#xff1a;Dify重排序架构的核心设计哲学Dify 的重排序&#xff08;Reranking&#xff09;模块并非简单叠加于检索之后的后处理步骤&#xff0c;而是在整个 LLM 应用生命周期中承担语义对齐、意图强化与可信度校准三重使命的设计原语。其核心哲学可凝练为&#xff1a;*…...

Xinference-v1.17.1快速部署Web应用:Flask集成指南

Xinference-v1.17.1快速部署Web应用&#xff1a;Flask集成指南 1. 引言 想给自己的AI模型快速搭建一个Web界面吗&#xff1f;今天咱们就来聊聊怎么把Xinference-v1.17.1这个强大的AI推理引擎集成到Flask Web应用中。不需要复杂的架构设计&#xff0c;也不用担心API对接问题&a…...

LFM2.5-1.2B-Thinking-GGUF精彩案例:100字产品介绍生成质量实测分享

LFM2.5-1.2B-Thinking-GGUF精彩案例&#xff1a;100字产品介绍生成质量实测分享 1. 模型简介与测试背景 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的一款轻量级文本生成模型&#xff0c;特别适合在资源有限的环境中快速部署和使用。这款模型采用了GGUF格式和llama.cpp运行时…...

nRF24L01无线通讯模块发送失败排查指南:从引脚冲突到ACK配置

1. 引脚冲突&#xff1a;最容易被忽略的硬件陷阱 第一次用nRF24L01模块时&#xff0c;我踩过一个大坑&#xff1a;明明发送端显示数据发送成功&#xff0c;接收端却毫无反应。换了三套硬件还是同样的问题&#xff0c;直到发现接收板的CSN引脚竟然和复位电路共用了同一个GPIO。这…...

告别手动复制!用Apifox Helper插件实现IDEA代码注释自动同步API文档(2024最新版)

2024终极指南&#xff1a;用Apifox Helper打造无缝API文档同步工作流 在当今快节奏的开发环境中&#xff0c;API文档与代码的同步问题一直是困扰开发团队的痛点。传统的手动维护方式不仅耗时耗力&#xff0c;还容易因人为疏忽导致文档与实现不一致。想象一下&#xff0c;当你在…...

Flutter GetX Snackbar实战:5分钟实现顶部弹窗通知(附完整属性表)

Flutter GetX Snackbar实战&#xff1a;5分钟实现顶部弹窗通知&#xff08;附完整属性表&#xff09; 在移动应用开发中&#xff0c;通知弹窗是用户交互的重要组成部分。Flutter开发者常常需要快速实现各种样式的通知提示&#xff0c;而GetX库提供的Snackbar功能以其简洁的API和…...