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

ORACLE查询(子查询,分页查询)

一、子查询

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

1 .查询 2012 年 1 月用水量大于平均值的台账记录

select * from t_account where usenum >

(select avg(usenum) from t_account where year = '2012' and month = '01' );

结果:

6519a84a656fb991bd1bc7c5a3a5b3b7.png

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

in 运算符

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

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

结果:

fda5521b8299a8d8aa61dedadf9ec37b.png

2 .查询地址含有“花园”的业主的信息

select * from t_owners where addressid in ( select id from t_address where name like '%花园%');

结果:

a23912b6f44cdcd1ff99ca3f7c67acfc.png

3. 查询地址不含有“花园”的业主的信息

select * from t_owners where addressid not in (select id from t_address where name like '%花园%');

结果:

eff183ca6813e3f59c41d63b6aa23f73.png

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

select * from t_account where year = '2012' and usenum >

(select max(usenum) from t_account where year = '2012' and month = '03');

结果:

9154cb747964158f5b27c64e32d5f09e.png

(三)嵌套子查询 ( 在子查询中再嵌套子查询 )

1.查询在海淀区的小区名字中含有花园的业主记录

select * from t_owners ow

where addressid in

(select ar.id from t_area ar , t_address ad

where ar.id = ad.areaid and ar.name = '海淀' and ad.name like '%花园%');

结果:

1cc040ddfd9867d76249e812f75013ca.png

(四)标量子查询 ( 子查询的语句执行的结果直接作为主查询的结果显示 ) 标量子查询实现 : dual 专门用来呈现数据

1. 查询台账表中的用户年用水量的总和 以及 年平均用水量

-- 方式一

select sum(usenum),avg(usenum) from t_account ;

-- 方式二

select (select sum(usenum) from t_account) 年用水 , (select avg(usenum) from t_account) 年均用水 from dual;

结果:

3d34aa1da9cbcdfc71893dd1f7515a0e.png

(五)相关子查询 ( 子查询需要依赖主查询 )

1. 查询显示业主编号,业主名称、地址和业主类型

-- 方式一

select os.id ,os.name,ad.name, ow.name from t_owners os ,t_address ad,t_ownertype ow;

-- 方式二

select os.id , os.name 业主名 ,

(select name from t_address where id = os.addressid) 地址,

(select name from t_ownertype where id= os.ownertypeid) 业主类型

from t_owners os;

结果:

5b0b4d8b806478f77e8b1e161a7d2357.png

二、分页查询

(一)简单分页

1.分页查询台账表 T_ACCOUNT,每页 10 条记录

select * from t_account where Rownum <= 10;

结果:

86900acebe58103d93404e67f14c0743.png

1.分页查询台账表 T_ACCOUNT,每页 11 - 20 条记录

select a.* from

(select rownum rn,ac.* from t_account ac) a

where rn between 11 and 20;

结果:

8642edb113b5f481dec68588dc047d3d.png

(二)基于排序的分页

1.基于排序 分页查询台账表 T_ACCOUNT ,每页 11 - 20 条记录

select a.* from

(select rownum r,t.* from

(select * from t_account order by money asc) t) a

where a.r between 11 and 20;

结果:

e91107ab15a845031c8945790793edac.png

以下推荐个人文章

[亲测]Oracle数据库安装与配置

[亲测]Oracle数据库操作

[亲测]Oracle表的创建、修改与删除

[亲测]Oracle数据库约束

[亲测]Oracle数据增删改

[亲测]Oracle查询–单表查询,连接查询(一)

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

[亲测]Oracle查询–单行函数–PL/SQL,分析函数,集合运算(三)

Oracle执行计划Explain Plan 如何使用

[亲测]数据库优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值