子查询的用法
在执行数据库操作(包括查询、添加、修改、删除等操作)的过程中,如果某个操作需要依赖另一个SELECT语句的查询结果,那么就可以把SELECT语句嵌入到该操作语句中,这样就形成了一个子查询。实际上,在关系型数据库中,各表之间的数据关系非常密切,它们相互关联,相互依存,这样就可以根据数据之间的关系使用相应的子查询,从而实现复杂的查询。
1. 子查询
子查询是在SQL语句内的另外一条SELECT语句,也被称为内查询或是内SELECT语句。在SELECT、INSERT、UPDATE或DELETE命令中允许是一个表达式的地方都可以包含子查询,子查询甚至可以包含在另外一个子查询中。
例,在emp表中查询部门名称(dname)为“RESEARCH”的员工信息:
查询也可以使用多表关联查询实现(多表关联效率高于子查询):
在执行子查询操作的语句中,子查询也称为内查询,包含子查询的查询语句也被称为外查询或主查询。子查询:select deptno from dept where dname=‘RESEARCH’;那么外查询语句就是:select empno,ename,job from emp
在一般情况下,外查询语句检索一行,子查询语句需要检索一遍数据,然后判断外查询语句的条件是否满足。如果条件满足,则外查询语句将检索到的数据行添加到结果集中,如果条件不满足,外查询语句继续检索下一行数据,所以子查询相对多表关联查询要慢一些。
另外,在使用子查询时,还应注意以下规则:子查询必须使用括号“()”括起来;子查询中不能包含ORDER BY子句。;子查询允许嵌套多层,但不能超过255层。在Oracle 11g中,通常把子查询再细化为单行子查询,多行子查询和关联子查询3种。
2. 单行子查询
单行子查询是指返回一行数据的子查询语句,当在WHERE子句中引用单行子查询时,可以使用单行比较运算符(=、>、<、>=、<=和<>)。
例,在emp表中,查出既不是最高工资,也不是最低工资的员工的信息:
在上面的语句中,如果内层子查询语句的执行结果为空值,那么外层的WHERE子句就始终不会满足条件,这样该查询的结果就必须为空值,因为空值无法参与比较运算。
在执行单行子查询时,要注意查询的返回结果必须是一行数据,否则Oracle系统会提示无法执行。另外,子查询也不能包含ORDER BY子句,如果非要对数据进行排序的话,那么只能在外查询语句中使用ORDER BY子句。
3. 多行子查询
多行子查询是指返回多行数据的子查询语句。当在WHERE子句中使用多行子查询时,必须使用多行运算符(IN、ANY、ALL)。
使用IN运算符:当在多行子查询中使用IN运算符时,外查询会尝试与子查询结果中的任何一个结果进行匹配,只要有一个匹配成功,则外查询返回当前检索的记录。例,在emp表中,查询不是销售部门(SALES)的员工信息:
使用ANY运算符:ANY运算符必须与单行比较运算符结合使用,并且返回行只要匹配子查询的任何一个结果即可。例,在emp表中,查询工资大于部门编号为10的任意一个员工工资即可的其他部门的员工信息:
使用ALL运算符:ALL运算符必须与单行运算符结合使用,并且返回行必须匹配所有子查询结果。例,在emp表中,查询工资大于部门编号为30的所有员工工资的员工信息:
4. 关联子查询
在单行子查询和多行子查询中,内查询和外查询是分开执行的,也就是说内查询的执行与外查询的执行是没有关系的,外查询仅仅是使用内查询的最终结果。在一些特殊需求的子查询中,内查询的执行需要借助于外查询,而外查询的执行又离不开内查询的执行,这时,内查询和外查询是相互关联的,这种子查询就被称为关联子查询。
在emp表中,使用“关联子查询”检索工资大于同职位的平均工资的员工信息:
在上面的查询语句中,内层查询使用关联子查询计算每个职位的平均工资。而关联子查询必须知道职位的名称,为此外层查询就要使用f.job字段值为内层查询提供职位名称,以便于计算出某个职位的平均工资。如果外层查询正在检索的数据行的工资高于平均工资,则该行的员工信息会显示出来,否则不显示。
注意,在执行关联子查询的过程中,必须遍历数据表中的每条记录,因此如果被遍历的数据表中有大量数据记录,则关联子查询的执行速度会比较慢。关联子查询不但可以作为SELECT语句的子语句,也可以作为INSERT、UPDATE和DELETE语句的关联子查询。
相关推荐
六轴机械手程序 用信捷XD5和威纶触摸屏编写。 此程序已经实际设备上批量应用,程序成熟可靠,借鉴价值高,程序有注释。
Java毕业设计-基于SpringBoot的旅游网站项目源码+数据库(高分毕设),个人经导师指导并认可通过的毕业设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 Java毕业设计-基于SpringBoot的旅游网站项目源码+数据库(高分毕设)Java毕业设计-基于SpringBoot的旅游网站项目源码+数据库(高分毕设)Java毕业设计-基于SpringBoot的旅游网站项目源码+数据库(高分毕设)Java毕业设计-基于SpringBoot的旅游网站项目源码+数据库(高分毕设)Java毕业设计-基于SpringBoot的旅游网站项目源码+数据库(高分毕设)Java毕业设计-个人经导师指导并认可通过的毕业设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!个人经导师指导并认可通过的毕业设计项目,评审分98分,项目中的源码都
世界著名女性美容秘诀(1).pdf
豫章医萃——名老中医临床经验精选.pdf
dubbo+zookeeper+tomcat资源包
YouQu(有趣),一个使用简单且功能强大的自动化测试框架。YouQu(有趣)是统信公司(Deepin/UOS)开源的一个 Linux 操作系统的自动化测试框架,支持多元化元素定位和断言、用例标签化管理和执行、强大的日志和报告输出等特色功能,同时完美兼容 X11、Wayland 显示协议,环境部署简单,操作易上手。
code.ipynb,个人学习整理,仅供参考
单片机的流水灯。资源来源于网络分享,如有侵权请告知!
Protel99se的元件库&Protel封装库&PCB封装教程 包含以下内容: 元件库 PCB库存封装缩写说明 PCB封装详解 Protel常用封装库 Protel常用元件库 Protel99se的元件库&Protel封装库&PCB封装教程
windy,scatter,lines,geotiff render,leaflet-echarts4 ... 一些地图可视化demo,大部分为气象数据的渲染传单学习例子演示项目设置npm install编译和热重载以进行开发npm run serve编译并压缩以用于生产npm run buildgeotiff文件在leaflet中的几种渲染方式怎样解析一个geotiff文件解析geotiff文件我们需要用到开源的库geotiff,具体用法如下import * as GeoTIFF from 'geotiff'const tiff= await GeoTIFF.fromArrayBuffer(buffer);let image = await tiff.getImage();this.tiffWidth = image.getWidth();this.tiffHeight = image.getHeight();let rasters = await image.readRasters();let tiepoint = image
200款ps艺术字体集合
Python编写录屏录音工具,工具界面十分简单,默认是全屏录屏录音(第一次使用得手动开启电脑声音设置的立体声混音作为输入),勾选不录制扬声器系统声音后只录屏,如果想自定义区域录制要先选择自定义区域录屏,然后再点击开始录制即可。 pycharm打开代码,运行即可
基于BufferedRandomAccessFile+Forkjoin读取大数据文件报文解析工具内容使用RandomAccessFile(BufferedRandomAccessFile 摘自网络)读取文本文件. 读取文件后使用Forkjoin任务拆分. 简单使用,查看简单示例SimpleTextMessageProcessorController如何使用使用docker compose创建一个mysql容器,cd yourproject docker-compose up使用test下的GeneratorServiceEntity生成mybatis文件 然后启动springboot应用启动成功,访问http://localhost:8080/person模拟场景 用户向第三方注册信息,返回token1初始化数据,例如1w条数据http://localhost:8080/insertBatch/100002导出离线数据http://localhost:8080/export3本地高速读取http://localhost:808
comsol枝晶生长 模型包括:典型,形状成核,随机成核,均匀沉积,雪花晶形成过程。 适用于电池,电化学沉积,催化的模拟学习。
安卓项目源码Android Rss订阅源码Demo提取方式是百度网盘分享地址
这是一款基于html5 canvas实现仿视频网站文字弹幕动画特效源码。界面上呈现出类似视频网站上文字弹幕的滚动动画效果,并带有清除与添加按钮来控制弹幕动画的清空与显示功能
村级(居委会)行政区划shp矢量数据 坐标系: wgs1984 字段包含: 村名称:village 乡镇名称:town 县名称:district 市名称:city 省名称:province
企业级数据大屏、数据可视化企业级数据可视化大屏
电源PFC入门 TI单相三相维也纳VIENNA整流器无桥 原理图PCB中文资料
编译原理期末试卷选择题