我的编程空间,编程开发者的网络收藏夹
学习永远不晚

关于Oracle子查询各大用法详解

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

关于Oracle子查询各大用法详解

关于Oracle子查询各大用法详解

子查询

一.概述:

子查询:一个select语句,作为另一条select语句语法的一部分。

select语句语法:

select distinct * | 字段 from 表名
where 查询条件
group by 分组字段 having 分组条件
order by 排序字段 asc | desc

 

二. 单行子查询

  • 只返回一条记录
  • 单行操作符

 

  • 编写步骤,将一个需求拆分成多个子需求,依次完成每一个子需求,最后将组合子需求

--(一)单行子查询
--只返回一条记录


--需求:查询2012年1月用水量大于平均值的台账记录
--1用水量平均值
select avg(ac.usenum) from t_account ac where ac.year="2012"
 and  ac.month="01";

--2.查询2012年1月所有用水量
select * from t_account ac 
where ac.year="2012" and 
ac.month="01";

--合并
select * from t_account ac 
where ac.year="2012" and 
ac.month="01" and ac.usenum>=(
select avg(ac.usenum) from t_account ac where ac.year="2012" and 
ac.month="01"
);

 

 

 

三. 多行子查询

 

  • 返回了多条记录
  • 多行操作符


--(二)多行子查询
--返回了多条记录

--1查询地址编号为1 、3、4 的业主记录

select * from t_owners ow where ow.addressid in(1,3,4);


--2查询地址含有“花园”的业主的信息
--1.含有"花园"地址id
select ad.id from t_address ad where ad.name like "%花园%";

--2.整合
select * from t_owners ow where ow.addressid 
in(select ad.id from t_address ad where ad.name like "%花园%");


--方式2
select * from t_owners ow ,t_address ad 
where ow.addressid=ad.id and ad.name like "%花园%";



--3查询地址不含有“花园”的业主的信息
select * from t_owners ow where ow.addressid 
not in(select ad.id from t_address ad where ad.name like "%花园%");



--4查询2012年台账中,使用量大于2012年3月最大使用量的台账数据

--方式1;求最大值
--1.2012年3月最大使用量
select max(ac.usenum) from t_account ac where ac.year="2012" 
and ac.month="03";


--2.查询2012年台账中使用量大于13808
select * from t_account ac where ac.year="2012" 
 and ac.usenum>13808;


--整合
select * from t_account ac where ac.year="2012" 
 and ac.usenum>(select max(ac.usenum) from t_account ac where ac.year="2012" 
and ac.month="03");




--方式2;使用all运算符
--1.求2012年3月所有使用量
select ac.usenum from t_account ac where ac.year="2012" 
and ac.month="03";

--2.查询2012年台账大于3月份所有使用量
select * from t_account ac where ac.year="2012"
and ac.usenum >all(13808,13390);


--3整合
select * from t_account ac where ac.year="2012"
and  ac.usenum >all(select ac.usenum from t_account ac where ac.year="2012" 
and ac.month="03"); 

 

 

四. 嵌套子查询

  • 嵌套子查询:在子查询中再次嵌入子查询


--(三)嵌套子查询

----嵌套子查询:在子查询中再次嵌入子查询
--查询在海淀区的小区名字中含有花园的业主记录
--1.查询区域id,名称为"海淀"
select a.id from t_area a where a.name="海淀";

--2 查询地址,条件,名称含"花园"和区域id
select ad.id from t_address ad 
where ad.name  like "%花园%" and
ad.areaid=(select a.id from t_area a where a.name="海淀");


--3 查询业主,条件;一组地址id
select * from t_owners ow where 
ow.addressid=(select ad.id from t_address ad 
where ad.name  like "%花园%" and
ad.areaid=(1));


--4.组合
select * from t_owners ow where 
ow.addressid=(select ad.id from t_address ad 
where ad.name  like "%花园%" and
ad.areaid=(select a.id from t_area a where a.name="海淀"));

 

 

五.标量子查询

标量子查询:子查询的语句执行的结果直接作为主查询的结果显示



--查询台账表中的用户年用水量的总和    以及  年平均用水量
--1.查询用水量总和
select sum(ac.usenum) from t_account ac;


--2.查询用水量平均值
select avg(ac.usenum) from t_account ac;


--3.将两个不相关的数据,使用虚表dual组合在一起
select
 (select sum(ac.usenum)from t_account ac) as 年用水量的总和,
 (select avg(ac.usenum) from t_account ac)as 年平均用水量
  from dual;

 

 

 

六.相关子查询

  • 相关子查询:子查询依赖外面的主查询的结果


--查询显示业主编号,业主名称、地址和业主类型
select ow.id,ow.name,ad.name,ot.name
 from t_owners ow ,t_address ad,t_ownertype ot
where ow.addressid=ad.id 
and ow.ownertypeid=ot.id;



--方式2;相关查询
select ow.id as 业主编号,ow.name as 业主名称,
(select ad.name from t_address ad where ad.id=ow.addressid) as 地址,
(select ot.name from t_ownertype ot where ot.id=ow.ownertypeid) as 业主类型 
 from t_owners ow;








--查询显示业主编号、业主名称、地址、所属区域、业主分类
--方式一
select ow.id,ow.name,ad.name,ar.name,ot.name from 
 t_owners ow ,t_address ad, t_area ar,t_ownertype ot
 where ow.addressid=ad.id and ad.areaid=ar.id 
and ow.ownertypeid=ot.id;


--方式二;相关查询
select ow.id as 业主编号,ow.name as 业主名称,
(select ad.name from t_address ad where ad.id=ow.addressid) as 地址,
(select ar.name from t_area ar, t_address ad where ar.id=ad.id and ad.id=ow.addressid)as 所属区域,
(select ot.name from t_ownertype ot where ot.id=ow.ownertypeid) as 业主类型 
 from t_owners ow ;

 

 

今天就先到这里了,让我们下篇见噢!!!

 

看完恭喜你,又知道了一点点!!!

你知道的越多,不知道的越多! 

~感谢志同道合的你阅读,  你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

关于Oracle子查询各大用法详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

关于Oracle子查询各大用法详解

子查询 一.概述: 子查询:一个select语句,作为另一条select语句语法的一部分。 select语句语法: select distinct * | 字段 from 表名 where 查询条件 group by 分组字段 having 分组条件 or
关于Oracle子查询各大用法详解
2016-11-05

mysql连接查询、联合查询、子查询原理与用法实例详解

本文实例讲述了mysql连接查询、联合查询、子查询原理与用法。分享给大家供大家参考,具体如下: 本文内容:连接查询联合查询子查询from子查询where子查询exists子查询首发日期:2018-04-11连接查询:连接查询就是将多个表联合
2022-05-12

关于 MySQL 嵌套子查询中无法关联主表字段问题的解决方法

今天在工作中写项目的时候,遇到了一个让我感到几乎无解的问题,在转换了思路后,想出了一个折中的解决方案,记录如下。其实,问题的场景,非常简单:就是需要查询出上图的数据,红框是从 项目产品表 中查询的2个字段,绿框是从与项目产品表关联的 文章
2022-12-26

关于MySQL嵌套子查询中无法关联主表字段问题的解决方法

这篇文章主要介绍了关于MySQL嵌套子查询中,无法关联主表字段问题的折中解决方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-12-26

Oracle数据库查询表空间大小的方法详解

Oracle数据库是一种常用的关系型数据库管理系统,表空间是数据库存储数据的重要组成部分。对于数据库管理员和开发人员来说,了解如何查询表空间的大小是非常重要的。本文将详细介绍在Oracle数据库中查询表空间大小的方法,同时提供具体的代码示例
Oracle数据库查询表空间大小的方法详解
2024-03-03

编程热搜

目录