Oracle 数据库的子查询(关联子查询)

文章目录

  • 一、子查询结果返回一个值(单列单行)
  • 二、子查询结果返回多行(单列多行)
  • 三、子查询结果返回多列多行
  • 四、关联子查询
    • (一)子查询执行顺序
    • (二)exists 关键字
  • 五、子查询总结
  • 六、关联子查询示例

一、子查询结果返回一个值(单列单行)

选择比较运算符:> < >= <= = <>

select ename from emp_xxx
where salary > ( select salary from emp_xxx where ename = '张无忌' ) ;

二、子查询结果返回多行(单列多行)

选择比较运算符:>ALL >ANY <ALL <ANY in

select ename from emp_xxx
where salary > ALL( select salary from emp_xxx
where ename = '张无忌' ) ;
select ename from emp_xxx
where salary > ANY( select salary from emp_xxx
where ename = '张无忌' ) ;
select ename,salary,job from emp_xxx
where deptno in(select deptno from emp_xxx
where ename = '刘苍松')
and ename <> '刘苍松' ;

三、子查询结果返回多列多行

查询每个部门薪水最高的员工:

select ename, salary, job, deptno from emp_xxx
where (deptno, salary) in ( select deptno, max(salary)
from emp_xxx
where deptno is not null group by deptno ) ;

注意:
子查询的条件是单列还是多列没关系 , 关键是要分清返回的是单行还是多行。

  • 如果是单行 , 用单行比较运算符 ,=,>,< 这些
  • 如果是多行 , 用 in, >all, >any, <all, <any 这些

四、关联子查询

子查询不再是独立的 Sql 语句 , 需要依赖主查询传来的参数 , 这种方式叫关联子查询。

子查询又称内部查询,而包含子查询的语句称之外部查询(又称主查询)。

查询员工表中薪水比所在部门平均薪水小的员工:

select ename, salary, deptno from emp_xxx a
where salary < ( select avg(nvl(salary,0))
from emp_xxx
where deptno = a.deptno ) ;
-- 子查询不再是独立的 Sql 语句 , 需要依赖主查询传来的参数 a.deptno

查询员工表中薪水比所在部门平均薪水大的员工:

select ename,salary,deptno,
(select avg(ifnull(salary,0)) from emp_htlwk where deptno = e.deptno) avgsal 
from emp_htlwk e where salary > (select avg(ifnull(salary,0)) 
from emp_htlwk where deptno =e.deptno);

上述例子中,一个子查询嵌到主查询的 select 子句,一个子查询嵌到 where 子句中。

(一)子查询执行顺序

  • 非关联子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。所以非关联子查询,先执行子查询,再执行主查询

  • 关联子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。所以关联子查询,先执行主查询,再执行子查询

(二)exists 关键字

哪些人是其他人的经理(即查询有下属的员工):

select ename from emp_xxx a
where exists (select 1 from emp_xxx
where mgr = a.empno) ;
  • exists 关键字判断子查询有没有数据返回,有则为 ture,没有则为 false,exists 不关心子查询的结果,所以子查询中 select 后面写什么都可以,本例中我们写常量“1”

  • sql 执行顺序从主查询开始 , 把主查询中的 empno 数据传入子查询 , 作为条件中的参数

哪些人不是别人的经理:

select ename from emp_xxx a
where not exists (select 1 from emp_xxx
where mgr = a.empno) ;

哪些部门没有员工:

select deptno, dname from dept_xxx d
where not exists (select 1
from emp_xxx
where deptno = d.deptno) ;

五、子查询总结

  1. 非关联子查询,先执行子查询,再执行主查询,子查询只执行一次,子查询的结果作为参数传给主查询使用;
  2. 关联子查询,先执行主查询,再执行子查询,主查询执行一次后,子查询跟着执行一次,主查询执行多少次,那么子查询也会执行多少次,主查询的结果作为参数传给子查询使用;
  3. 子查询只能是 select 查询语句,不可以是 update、insert 等 DML 语句。

六、关联子查询示例

1.查询每个科目成绩最高的学生信息:

SELECT t.stuid,  t.stuname,  t.score,  t.classid  
FROM stugrade t  
WHERE t.score = (SELECT max(tmp.score) FROM stugrade tmp WHERE tmp.classid = t.classid)

2.筛选出每个部门工资排名前二的员工信息,并且按部门升序,按部门分组,部门内的员工按工资降序:

select deptid,salary
from employee a
where 2 > (select count(1)from employee bwhere a.salary < b.salary and a.deptid = b.deptid)
order by a.deptid,a.salary desc;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大端字节序码流中取出2字节_产生字节码

大端字节序码流中取出2字节在这篇文章中&#xff0c;我们将看到如何为我们的语言生成字节码。 到目前为止&#xff0c;我们已经看到了如何构建一种语言来表达我们想要的东西&#xff0c;如何验证该语言&#xff0c;如何为该语言构建编辑器&#xff0c;但实际上我们还不能运行代…

python编写程序时必须遵守的规则被称为_Python程序设计方案习题与答案

《 Python 程序设计》习题与参考答案 第 1 章 基础知识 简单说明如何选择正确的 Python 版本。 答&#xff1a; 在选择 Python 的时候&#xff0c;一定要先考虑清楚自己学习 Python 的目的是什么&#xff0c;打算做哪 方面的开发&#xff0c;有哪些扩展库可用&#xff0c;这些扩…

python写520_用Python做一个520表白神器,值得收藏

本文最后给出了打包好的软件&#xff0c;无需安装Python环境和各种依赖&#xff0c;直接下载软件&#xff0c;解压后&#xff0c;双击exe文件即可使用。先来看一下具体的效果。运行程序。用Python做一个520表白神器&#xff0c;值得收藏点击「选择图片」 选择JPG/JPGE/PNG三种中…

Oracle/MySQL数据库查询结果集的集合操作(合集/交集/差集)

文章目录集合操作的前提条件集合操作合集 union合集 union 和 union all 的比较交集 intersect差集 minus集合操作的前提条件 1.两个结果集必须结构相同。 当列的个数、列的顺序、列的数据类型一致时 , 我们称这两个结果集结构相同 2.只有结构相同的结果集才能做集合操作 集…

python有道自动翻译_利用python写一个有道翻译的脚本

废话不多说&#xff0c;直接上代码import urllib.request import urllib.parse import json content input("请输入要翻译的内容&#xff1a;") url http://fanyi.youdao.com/translate?smartresultdict&smartresultrule&smartresultugc&sessionFromn…

为什么java抗并发_用最通熟易懂的话说明,为什么要使用java并发编程

老早之前的计算机只有一个处理器&#xff0c;而 一个处理器在同一时刻只能处理一条指令 &#xff0c;换句话说&#xff0c;我们的代码需要一行一行的按顺序被计算机执行&#xff0c;计算机只能把一个程序完整的执行完&#xff0c;然后再执行第二个程序。所以计算机专业的同学们…

java ee的小程序_Java EE调度程序

java ee的小程序Java EE应用程序服务器具有本机调度支持&#xff0c;并且在大多数应用程序中&#xff0c;不需要包括外部依赖项&#xff0c;例如著名的Quartz调度程序库。 Java EE 6和7完整配置文件上提供的Java EE 6计时器服务为我们提供了许多选项来定义调度间隔&#xff0c…

MyEclipse for Mac快捷键

文章目录编辑查询/替换导航调试重构其他编辑 快捷键功能说明Command1快速修复&#xff0c;比如与Syso配合&#xff0c;与main配合可快速构造方法签名&#xff08;最经典的快捷键,就不用多说了&#xff0c;可以解决很多问题&#xff0c;比如import类、try catch包围等&#xff…

不同坐标系下角速度_最伟大的数学发明,坐标系的诞生,是人类史上的方向盘...

【想要了解更多精彩文章、视频&#xff0c;欢迎关注创鹏科学堂】人生最大的意义&#xff0c;莫过于过得更方便&#xff1b;数学最大的意义&#xff0c;莫过于帮助人类过得更方便。几千年来&#xff0c;自从数学出现之后&#xff0c;它就一直以人类生活为导向&#xff0c;以宇宙…

c++ double 截取_c选择double小数点后自动截取3位,不...

2016-09-01 01:05辛培兵 客户经理printf()函数是格式输出函数&#xff0c;请求printf()打印变量的指令取决与变量的类型&#xff0e;例如&#xff0c;在打印整数是使用&#xff05;d符号&#xff0c;在打印字符是用&#xff05;c 符号&#xff0e;这些符号被称为转换说明&#…

dynamodb分页查询_使用DynamoDBMapper查询DynamoDB项目

dynamodb分页查询在上一篇文章中&#xff0c;我们使用底层Java api在DynamoDB数据库上发出了查询。 使用DynamoDBMapper进行查询非常简单。 使用哈希键发出查询非常简单。 这样的查询的最佳候选者是通过使用电子邮件哈希键进行搜索的Users表。 public User getUser(String e…

python字典编码_python中包含UTF-8编码中文的列表或字典的输出

>>> dict {"asdf": "我们的python学习"} >>> print dict {asdf: \xe6\x88\x91\xe4\xbb\xac\xe7\x9a\x84python\xe5\xad\xa6\xe4\xb9\xa0} 在输出处理好的数据结构的时候很不方便&#xff0c;需要使用以下方法进行输出&#xff1a; >…

php中的ol标签,html5中ol标签的用法详解

这篇文章主要介绍了详解HTML5中ol标签的用法,是HTML5入门学习中的基础知识,需要的朋友可以参考下定义和用法标签定义有序列表。HTML 4.01 与 HTML 5 之间的差异在 HTML 4.01 中&#xff0c;不赞成使用 "start" 属性&#xff0c;在 HTML 5 中是允许的。在 HTML 4.01 中…

portlet_平台策略:从Portlet到OpenSocial小工具再到渐进式Web应用程序:最新技术

portlet介绍 由于世界仍在Java的掌控之中&#xff0c;因此我们经常定义所谓的基于组件的平台 。 我在2000年拥有OpenUSS&#xff08;开放大学支持系统&#xff09;的经验。 当时我有一个想法&#xff0c;就是开发一个可以使用组件体系结构和J2EE技术​​&#xff08; OpenUSS C…

MySQL JDBC URL各参数详解

通常MySQL连接URL可以设置为&#xff1a; jdbc:mysql://localhost:3306/test?userroot&password123456&useUnicodetrue&characterEncodinggbk &autoReconnecttrue&failOverReadOnlyfalse&serverTimezoneUTC&drivercom.mysql.cj.jdbc.Driver注&am…

keil5函数 默认返回值_C++ 函数的定义

“ C对于函数的基本用法”01—函数的定义//函数声明&#xff1a;[返回值类型] [函数名称] (参数列表)int Function(int a, int b);//函数定义int Function(int a, int b){ //函数体 return a b;}02—函数的默认参数定义函数时可以在参数列表中为形参指定默认值int Function2…

apc php7,深入解析php之apc

apc定义&#xff1a;apc是一个开放自由的php opcode缓存。它的目标是提供一个自由、开放和健全的框架&#xff0c;用于缓存和优化php中间代码。apc常用函数&#xff1a;1.apc_clear_cache() 清楚apc缓存内容2.apc_define_constants(string key,array constants,[,bool case_sen…

Apache NetBeans?

在JavaOne之前的几天和几周内发布有关Java世界的重要公告是很常见的。 考虑到这一点&#xff0c;不足为奇的是&#xff0c;我们在下周开始的JavaOne 2016之前看到了一些与Java有关的重要公告。 马克莱因霍尔德 &#xff08; Mark Reinhold &#xff09;的JDK 9计划变更提案是一…

已经创建了AWS EC2实例,Linux系统默认没有root用户,那么如何创建root用户并更改为root用户登录呢?

文章目录1. 如何创建ROOT及设置密码2.更改登陆方式&#xff0c;采用ROOT用户登陆a. 编辑EC2实例的ssh登录方式b. 再编辑authorized_keys文件&#xff0c;将ssh-rsa 前面的文字全部删除&#xff0c;确保ssh-rsa没有任何文字&#xff0c;包括空格。3. 重新登陆对于刚创建AWS EC2实…