Oracle--子查询(单行子查询、多行子查询、相关子查询)详解

Oracle数据库SQL语句(四)—子查询(嵌套查询) Oracle数据库SQL语句(四) 一、子查询(嵌套查询) 1、单行子查询 SELECT * FROM stu WHERE ID > (SELECT ID FROM stu WHERE NAME ='王五'); 2、多行子查询 --IN 在什么范围内 SELECT * FROM stu WHERE ID IN (SELECT ID FROM stu WHERE CLASS = '一班'); --ANY:表示任意的 --= ANY :和子查询中任意一个结果相等 阅读详情
什么是子查询?

使用子查询解决问题:谁的工资比SCOTT高?
在这里插入图片描述

子查询的语法

在这里插入图片描述

  • 子查询(内查询)在主查询之间一次执行完成。\color{red}{子查询(内查询)在主查询之间一次执行完成。}子查询(内查询)在主查询之间一次执行完成。
  • 子查询的结果被主查询使用(外查询)。\color{red}{子查询的结果被主查询使用(外查询)。}子查询的结果被主查询使用(外查询)。
子查询的类型

在这里插入图片描述

单行子查询
  • 只返回一条记录
  • 单行操作符
操作符含义
=Equal to
>Greater than
>=Greater than or equal to
<Less than
<=Less than or equal to
<>Not equal to

示例1:

select ename,job,sal
from emp
where job=
      (select job
      from emp
      where empno=7566) and sal >
            (select sal
            from emp
            where empno=7782);

在这里插入图片描述
示例2:

select ename,job,sal
from emp
where sal=
     (select min(sal)
     from emp);

在这里插入图片描述
示例3:

select deptno,min(sal)
from emp
group by deptno
having min(sal) >
      (select min(sal)
      from emp
      where deptno=20);

在这里插入图片描述
示例4:
查询出比雇员7654的工资高,同时从事和7788的工作一样的员工

select *
from emp t1
where t1.sal>
      (select t.sal 
      from emp t 
      where t.empno=7654) and t1.job=
            (select t2.job
            from emp t2
            where t2.empno=7654);

在这里插入图片描述
示例5:
要求查询每个部门的最低工资和最低工资的雇员和部门名称

 select d.dname, a.minsal, e.ename
 from dept d,
      (select deptno, min(sal) minsal 
      from emp
      group by deptno) a,emp e
 where d.deptno=a.deptno and e.sal=a.minsal;

在这里插入图片描述

非法使用单行子查询示例
select empno,ename
from emp
where sal=
     (select min(sal)
     from emp
     group by deptno);

在这里插入图片描述

多行子查询
  • 返回了多条记录
  • 多行操作符
操作符含义
IN等于列表中的任何一个
ANY和子查询返回的任意一个值比较
ALL和子查询返回的所有值比较

示例:in 在集合中
查询部门名称是SALES和ACOUNTING的员工

select * from emp where deptno in
       (select deptno from dept where dname='SALES' or dname='ACCOUNTING');

在这里插入图片描述
示例:any 和集合中的任意一个值比较
查询工资比30号部门员工高的员工信息

select * from emp where sal > any
       (select sal from emp where deptno=30);

在这里插入图片描述
示例:all 和集合中的所有值比较
查询工资比30号部门所有员工高的员工信息

select * from emp where sal > all
       (select sal from emp where deptno=30);

在这里插入图片描述

子查询需要注意的问题
  • 括号
  • 合理的书写风格
  • 可以在主查询的where、select、having、from后面使用子查询
  • 不可以在group by使用子查询
  • 强调from后面的子查询
  • 主查询和子查询可以不是同一张表;只有子查询返回的结果 主查询可以使用 即可
  • 一般不在子查询中排序;但在top-n分析问题中,必须对子查询排序
  • 一般先执行子查询,再执行主查询;相关子查询列外
  • 单行子查询只能使用单行操作符;多行子查询只能使用多行操作符
  • 子查询中的null

示例:在select语句后使用子查询
注意:select语句后的子查询必须是单行子查询
查询员工号,姓名,薪水,7839的职位

select empno,ename,sal,
       (select job 
       from emp 
       where empno=7839)
from emp;

在这里插入图片描述
示例:在from语句后面使用子查询
查询员工信息:员工号,姓名,月薪

select * 
from (select empno, ename, sal from emp);

在这里插入图片描述
示例:top-n分析问题
rownum行号:

  1. rownum永远按照默认的顺序生成
  2. rownum只能使用小于等于,不能使用大于等于

查询员工表中工资最高的前三名

select rownum, empno, ename, sal
from (select * from emp order by sal desc)
where rownum <= 3;

在这里插入图片描述
示例:找到员工表中薪水大于本部门平均薪水的员工

select e.empno, e.ename, e.sal, d.avgsal
from emp e, (select deptno, avg(sal) avgsal from emp group by deptno) d
where e. deptno=d.deptno and e.sal > d.avgsal;

在这里插入图片描述
相关子查询:
将主查询中的值 作为参数传递给子查询
使用相关子查询解决上面的示例

select empno, ename, sal, (select avg(sal) from emp where deptno=e.deptno) avgsal
from emp e
where sal > (select avg(sal) from emp where deptno=e.deptno);

在这里插入图片描述

示例:统计每年入职员工的个数

select count(*) Total,
       sum(decode(to_char(hiredate, 'yyyy'), '1980', 1, 0)) "1980",
       sum(decode(to_char(hiredate, 'yyyy'), '1981', 1, 0)) "1981",
       sum(decode(to_char(hiredate, 'yyyy'), '1982', 1, 0)) "1982",
       sum(decode(to_char(hiredate, 'yyyy'), '1987', 1, 0)) "1987"
from emp;

在这里插入图片描述

子查询中的null值问题
  • 单行子查询中的null值问题
    在这里插入图片描述- 多行子查询中的null值问题
    示例:查询不是老板的员工
    在这里插入图片描述在这里插入图片描述查询错误,集合中有null值不可以使用not in
《Pro Oracle SQL》子查询与CTE使用详解 子查询,也称为内部查询或嵌套查询,是在另一个SQL语句的WHERE子句或HAVING子句中嵌套的一个查询。子查询可以返回单个值、单行、多行或多个列,其结果取决于父查询的需要。子查询是嵌套在其他SQL语句中的查询,它是SQL能力强大的核心特征之一。在查询中使用子查询能够帮助我们按层次解决复杂的问题,使数据的提取更加灵活多变。子查询可以在SELECTINSERTUPDATE和DELETE语句中使用,它们可以作为表达式的一部分出现在这些语句的任何地方。 阅读详情

相关推荐

✨使用 vLLM + Docker 部署 Qwen3-Embedding-8B 并实现高效文本向量生成(附 `curl` 测试)

本文介绍了如何使用 vLLM 和 Docker 部署 Qwen3-Embedding-8B 嵌入模型服务,并通过标准 OpenAI 兼容接口进行调用和结果解析。如果你在部署中遇到任何问题,欢迎留言讨论!

用大模型重构生活:猫奴程序员的AI智能日常记录 6238

Oracle数据库学习的第二天(多表练习_子查询_集合运算)

一、多表练习 1.笛卡尔积:两张表的乘积 select * from emp,dept; -- 两张表的乘积结果并没有实际意义 2.隐式内连接 select * from emp,dept where emp.deptno=dept.deptno; 3.显示内连接 select * from emp inner join dept on emp.deptno=dept.deptno; 4.自连接 select e1.empno,e1.ename,e1.mgr,m1.ename from emp

飞奔的嗨少 528

VS Code + EIDE + Clangd 构建 Keil/MDK 嵌入式开发新范式

嵌入式C/C++开发长期受限于传统IDE的语法理解弱、导航卡顿、跨工程复用难等问题。Clangd作为基于AST的现代语言服务器,结合EIDE对Keil uVision和ARM MDK工程文件(.uvprojx)的深度解析能力,可将编译配置、芯片型号、内存模型、扩展关键字等语义精准翻译为标准compile_commands.json,从而实现智能跳转、宏展开识别、结构体实时展开等高阶编辑体验。该方案不替换Keil/MDK编译与烧录流程,仅升级代码理解层,天然兼容STC8051、STM32 Cortex-M、G

weixin_34321753的博客 352

oracle第二天笔记

select * from bonus; select * from salgrade; /* 多表查询: 笛卡尔积: 实际上是两张表的乘积,但是在实际开发中没有太大意义 格式: select * from 表1,表2 */ select * from emp; select * from dept; select * from emp, dept; select * from emp e1, dept d1 where e1.deptno = d1.deptno; /* 内联接: 隐式内联接: 等值内联接

岛田悠米 469

通过EMIF接口实现FPGA与DSP的高速连接(方法)

请注意,具体的连接细节和步骤可能会根据所使用的FPGA和DSP型号以及特定的应用需求而有所不同。开发DSP和FPGA上的软件,以实现数据交换和处理。根据系统的具体需求,对FPGA和DSP的接口逻辑进行优化,以减少延迟、提高数据吞吐量或降低资源消耗。它通常支持多种类型的存储器,如SRAM、DRAM、ROM等,以及通过特定的接口与FPGA连接。对于FPGA,需要编程来实现与DSP的接口逻辑,包括地址译码、数据传输、时序控制等。在连接完成后,进行详细的调试和测试,以确保数据能够在DSP和FPGA之间正确传输。

AigcFox的博客 4586

学术类PPT制作总结

本文分享了科技类PPT的制作技巧,希望相关的信息能帮助到读者。

奇妙水果的技术博客,欢迎交流技术~ 2880

oracle 学习(二)

/* 多表查询: 笛卡尔积:实际上是两张表的乘积 格式:select *from 表1,表2 */ select *from emp; select *from dept; select *from emp e,dept d where e.deptno=d.deptno; /* 内联结 隐式内联接 等值内联接 where e1.deptno=d....

林彬的专栏 352

基于YOLOv13+CBAM注意力机制

本教程详细介绍了CBAM注意力机制的原理及其在YOLOv13中的集成方法。CBAM通过通道注意力和空间注意力两个模块,动态调整特征权重以增强模型性能。通道模块利用池化操作和共享MLP生成通道权重,空间模块则通过池化和卷积生成空间权重。教程提供了在YOLOv13中实现CBAM的具体步骤,包括模块代码定义、模型配置修改等关键环节,帮助开发者在目标检测任务中提升模型表现。

FJN110的博客 305

使用Oracle数据库scott用户测试多表关联查询

文章目录Oracle多表关联查询多表查询外连接查询子查询练习分页查询集合运算exists和 not exists Oracle多表关联查询 多表查询 目标:查询员工编号、姓名、部门编号、部门名称、部门地址、中文显示工资等级、领导编号、领导姓名、领导部门名称、中文显示领导工资等级 select * from salgrade;–工资等级表 一共5个等级 select * from emp;–员工表 一共14个员工 select * from dept;–部门表 一共4个部门 若要查询上述内容,画关系图如

cgs的博客 786

在ParaView中编程实现涡量可视化

综上所述,本文介绍了在ParaView中使用编程方式实现涡量可视化的方法,并提供了相应的Python代码示例。通过灵活运用ParaView的编程接口,我们可以根据特定需求定制复杂的数据可视化流程,进一步深入了解和分析流体的旋转行为。ParaView是一款强大的开源数据可视化工具,它提供了丰富的功能和灵活的编程接口,使用户能够定制数据可视化流程。你可以根据需要自定义颜色映射范围和颜色,上述代码中的RGBPoints列表中包含了两个点,分别对应涡量值为0和10时的颜色。在实际使用过程中,你需要替换代码中的。

ByteProwl的博客 1434

uniapp - [全端兼容] 详解实现国际化多语言切换全流程及示例,全部页面中英文多语言随意切换即时生效,语言切换全项目立即变化可自定义新增各国其他语言,uniApp实现中英文语言切换完整源码教程!

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,uniapp多语言实现,uni-app项目使用多语言切换功能,中英文切换,uniapp实现中英文语言切换,uniApp实现国际化多语言切换,中文英文之间的更换,Uniapp使用什么插件能支持多种语言,退出后重启依然能让语言保留,设置可切换中英文,uniapp国际化页面双语/顶部导航双语/根据系统语言双语,标题栏文字原生底部菜单tabbar怎么改,使用vue-i18n国际化多国语言,全平台i18n插件,

🏆 前端领域优质创作者 1万+

Oracle练习

一些增删改差,建表,修改表结构,建表空间、用户,plsql编程,存储过程,触发器等 使用HR用户登录 默认密码是HR –1. 查询工资大于12000的员工姓名和工资 SELECT first_name ||' ' || last_name 姓名 ,salary 工资 from employees where salary>12000; –2. 查询员工号为176的员工的姓名和部门号 sel...

qq_43777978的博客 939

EtherCAT从站EEPROM组成信息详解(2):字8-15产品标识区

以实际的从站EEPROM数据为例,参照EtherCAT的SII规范,详细分析了从站EEPROM字8-字15的产品标识区内容组成。

kevin1499的博客 718

orecle笔记

select 'abc'||'付浩浩',ename,sal from emp;abc付浩浩。

2301_80210036的博客 259

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Oracle - 子查询基础,单行子查询与多行子查询的用法

🎯 摘要 本文深入解析Oracle数据库中的子查询技术,重点区分单行与多行子查询的应用场景及执行机制。通过实测案例展示子查询在SELECT、UPDATE、INSERT等操作中的实际应用,并揭示Oracle优化器对子查询的重写策略(如转换为JOIN或半连接)。文章特别强调: 单行子查询必须返回0或1行,否则触发ORA-01427错误 多行子查询需配合IN/ANY/ALL/EXISTS运算符使用 相关子查询的性能隐患及优化方案 NOT IN运算符遇到NULL值的致命陷阱 子查询与Java集成的实战示例(JDB

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Oracle中解决单行子查询返回多行结果的问题

我在日常开发中经常需要往原先的sql上增加子查询,使得程序能够显示新的相关内容,但是有时也会出现单行子查询返回多行结果的问题有些时候是因为关联关系没有写到位,而也有些是特殊情况,需要特殊处理以该sql为新增的子查询#sql查询结果A张三B李四C王五以下是我最近总结的处理方式。

weixin_52342654的博客 8532

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

第七章:Oracle子查询(单行子查询、多行子查询、相关子查询)

什么是子查询? 使用子查询解决问题:谁的工资比SCOTT高? 子查询的语法 子 查 询 ( 内 查 询 ) 在 主 查 询 之 间 一 次 执 行 完 成 。 子 查 询 的 结 果 被 主 查 询 使 用 ( 外 查 询 ) 。 子查询的类型 单行子查询 只返回一条记录 单行操作符 示例1: select ename,job,sal from emp where job= (select job from emp where empn...

u013914878的专栏 647

Oracle 子查询详解

本文主要介绍Oracle数据库中子查询和分页查询技术。子查询分为单行、多行、多列和相关子查询,用于条件判断和数据获取。Oracle分页方法包括传统ROWNUM、ROW_NUMBER()函数和12c+的FETCH FIRST/NEXT语法,其中后者性能最佳且符合标准。文章对比了各方法特点,并给出优化建议:创建索引、避免SELECT *、使用主键范围查询等。最后展示了子查询与分页结合的典型应用——查询各部门薪资前3员工,通过ROW_NUMBER()窗口函数实现分组排序。

不辉放弃的博客 1253

oracle 子查询排序,关于Oracle子查询各大用法详解

子查询一.概述:子查询:一个select语句,作为另一条select语句语法的一部分。select语句语法:select distinct * | 字段 from 表名where 查询条件group by 分组字段 having 分组条件order by 排序字段 asc | desc二.单行子查询只返回一条记录单行操作符 编写步骤,将一个需求拆分成多个子需求,依次完成每一个子需求,最后将组合子...

weixin_28693683的博客 1707

Oracle子查询大全

子查询 一、单行和多行子查询1.单行子查询 单行子查询是指返回一行数据的子查询语句。当在where子句中引用单行子查询时,可以使用单行比较符(=,<,>,<=,>=,<>)。SELECT ename,sal,deptno FROM emp where deptno...

fhy36897的博客 1558

Oracle的子查询【单行子查询和多行子查询】

1、查询部分分为主查询和子查询; 2、根据返回值的记录多少分为单行子查询和多行子查询;单行子查询用单行比较符=连接;多行子查询用多行比较符in连接; 3、子查询的内容可以放在FROM后面,也可以放在WHERE后面,也可以放在HAVING后面; 4、完整的SELECT语句可以拥有GROUP BY,HAVING子句,也可以使用组函数;也可以从多个表中查询; 5、

极客神殿 3322

Oracle子查询详解

子查询 用于当一次查询的结果是另一次查询所需要的时候, 可以使 用子查询 1 单行子查询 子查询的返回结果是单行数据. a) 查询所有比“CLARK”工资高的员工的信息 select * from emp where sal &gt; (select sal from emp where ename='CLARK'); b) 查询工资高于平均工资的雇员名字和工资 select en...

时间静止 626

ORACLE:子查询

在主查询执行之前,子查询首先执行一次。子查询的结果要在主查询中使用。从上述可知,使用NOT IN时不能对null操作。需要重复执行子查询。(where写在子查询中)注:单行子查询返回有多行结果时,会出错。使用IN 和 NOT IN。在SELECT中使用子查询。IN 等于列表中的某一个值。ANY 与列表的任意值比较。ALL 与列表所有值比较。:等价于not in。在FROM中使用子查询。子查询使用HAVING。多行多列子查询要使用。

qq_41896822的博客 3061

[亲测]Oracle查询--子查询,分页查询(二)

ORACLE查询(子查询,分页查询) 一、子查询 (一)单行子查询 ( 只返回一条记录 ) 1 .查询 2012 年 1 月用水量大于平均值的台账记录 select * from t_account where usenum &amp;amp;amp;amp;gt; (select avg(usenum) from t_account where year = '2012' and month = '01' ); 结果: ...

Armymans的博客 2641

oracle 判断子查询,ORACLE中的子查询

ORACLE中的子查询“子查询”就是查询中嵌套着另一个查询,也即通过SELECT语句的嵌套使用形成子查询。当我们不知道特定的查询条件时,可以用子查询来为父查询提供查询条件以获得查询结果。ORACLE中常见的子查询有下面几类:A、单行子查询(Single-row subqueries)。B、多行子查询(Multirow subqueries)。C、内部视图型子查询(Inline views)。D、多...

weixin_42721619的博客 673

Oracle数据库之SQL子查询详解

前言                考虑到这样一种情况:查询员工中有哪些员工的工资比SMITH高。要解决这类问题我们首先要          要的就是将SIMTH的工资查询出来,之后再将所有员工的工资与其进行比较。那么如何利用第一          次查询的结果了,就需要用到子查询了。     子查询              子查询其实就是指嵌入到其他语句中的select语句,也称其为

LCore的专栏 5129
上一篇: Oracle--多表查询、层次查询详解
下一篇: Oracle---集合运算(交、并、差)详解
吴声子夜歌
博客等级 码龄9年 2687粉丝 2262原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值