当前位置: 首页 > 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;方…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

生信服务器 | 做生信为什么推荐使用Linux服务器?

原文链接&#xff1a;生信服务器 | 做生信为什么推荐使用Linux服务器&#xff1f; 一、 做生信为什么推荐使用服务器&#xff1f; 大家好&#xff0c;我是小杜。在做生信分析的同学&#xff0c;或是将接触学习生信分析的同学&#xff0c;<font style"color:rgb(53, 1…...

【Zephyr 系列 16】构建 BLE + LoRa 协同通信系统:网关转发与混合调度实战

🧠关键词:Zephyr、BLE、LoRa、混合通信、事件驱动、网关中继、低功耗调度 📌面向读者:希望将 BLE 和 LoRa 结合应用于资产追踪、环境监测、远程数据采集等场景的开发者 📊篇幅预计:5300+ 字 🧭 背景与需求 在许多 IoT 项目中,单一通信方式往往难以兼顾近场数据采集…...

生产管理系统开发:专业软件开发公司的实践与思考

生产管理系统开发的关键点 在当前制造业智能化升级的转型背景下&#xff0c;生产管理系统开发正逐步成为企业优化生产流程的重要技术手段。不同行业、不同规模的企业在推进生产管理数字化转型过程中&#xff0c;面临的挑战存在显著差异。本文结合具体实践案例&#xff0c;分析…...