设为首页 收藏本站
查看: 868|回复: 0

[经验分享] Oracle-day02 中

[复制链接]
发表于 2018-9-5 10:32:19 | 显示全部楼层 |阅读模式
  二、连接查询
  (一)多表内连接查询
  (1)需求:查询显示业主编号,业主名称,业主类型名称,如下图:
DSC0000.jpg

  查询语句:
  

select o.id 业主编号,o.name 业主名称,ot.name 业主类型  
from T_OWNERS o,T_OWNERTYPE ot
  
where o.ownertypeid=ot.id
  

  (2)需求:查询显示业主编号,业主名称、地址和业主类型,如下图
DSC0001.jpg

  分析:此查询需要三表关联查询。分别是业主表,业主分类表和地址表
  语句:
  

select o.id 业主编号,o.name 业主名称,ad.name 地址,  
ot.name 业主类型
  
from T_OWNERS o,T_OWNERTYPE ot,T_ADDRESS ad
  
where o.ownertypeid=ot.id and o.addressid=ad.id
  

  (3)需求:查询显示业主编号、业主名称、地址、所属区域、业主分类,如下图:
DSC0002.jpg

  分析:这里需要四个表关联查询,比上边多了一个区域表(T_AREA)
  查询语句:
  

select o.id 业主编号,o.name 业主名称,ar.name 区域, ad.name 地  
址, ot.name 业主类型
  

from T_OWNERS o ,T_OWNERTYPE ot,T_ADDRESS ad,T_AREA ar  
where o.ownertypeid=ot.id and o.addressid=ad.id
  
ad.areaid=ar.id
  
and
  

  (4)需求:查询显示业主编号、业主名称、地址、所属区域、收费员、业主分类,如下图:
DSC0003.jpg

  分析:此查询比上边又多了一个表 T_OPERATOR
  语句:
  

select ow.id 业主编号,ow.name 业主名称,ad.name 地址,  
ar.name 所属区域,op.name 收费员, ot.name 业主类型
  
from T_OWNERS ow,T_OWNERTYPE ot,T_ADDRESS ad ,
  
T_AREA ar,T_OPERATOR op
  
where ow.ownertypeid=ot.id and ow.addressid=ad.id
  
and ad.areaid=ar.id and ad.operatorid=op.id
  

  (二)左外连接查询
  需求:查询业主的账务记录,显示业主编号、名称、年、月、金额。如果此业主
  没有账务记录也要列出姓名。
DSC0004.jpg

  分析:我们要查询这个结果,需要用到 T_OWNERS(业主表) ,T_ACCOUNT
  (台账表) 按照查询结果,业主表为左表、账务表为右表。
  按照 SQL1999 标准的语法,查询语句如下:
  

SELECT ow.id,ow.name,ac.year ,ac.month,ac.money  
FROM T_OWNERS ow left join T_ACCOUNT ac
  
on ow.id=ac.owneruuid
  

  按照 ORACLE 提供的语法,就很简单了:
  

SELECT ow.id,ow.name,ac.year ,ac.month,ac.money FROM  
T_OWNERS ow,T_ACCOUNT ac
  
WHERE ow.id=ac.owneruuid(+)
  

  如果是左外连接,就在右表所在的条件一端填上(+)
  (三)右外连接查询
  需求:查询业主的账务记录,显示业主编号、名称、年、月、金额。如果账务记
  录没有对应的业主信息,也要列出记录。如下图:
DSC0005.jpg

  SQL1999 标准的语句
  

select ow.id,ow.name,ac.year,ac.month,ac.money from  
T_OWNERS ow right join T_ACCOUNT ac
  
on ow.id=ac.owneruuid
  
ORACLE 的语法
  
select ow.id,ow.name,ac.year,ac.month,ac.money from
  
T_OWNERS ow , T_ACCOUNT ac
  
where ow.id(+) =ac.owneruuid
  

  三、子查询
  (一)where 子句中的子查询


  • 单行子查询  l 只返回一条记录
      l 单行操作符
    DSC0006.jpg

      需求:查询 2012 年 1 月用水量大于平均值的台账记录
      语句:

  

select * from T_ACCOUNT  
where year='2012' and month='01' and usenum>
  
( select avg(usenum) from T_ACCOUNT where year='2012' and
  

  month='01' )
  查询结果:
DSC0007.jpg

  平均值为:
DSC0008.jpg



  • 多行子查询  l 返回了多条记录
      l 多行操作符
    DSC0009.jpg

      in 运算符
      (1)需求:查询地址编号为 1 、3、4 的业主记录
      分析:如果我们用 or 运算符编写,SQL 非常繁琐,所以我们用 in 来进行查询
      语句如下:

  

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

  查询结果如下:
DSC00010.jpg

  (2)需求:查询地址含有“花园”的业主的信息
  语句:
  

select * from T_OWNERS  
where addressid in

  
( select>  

  查询结果:
DSC00011.jpg

  (3)需求:查询地址不含有“花园”的业主的信息语句:
  

select * from T_OWNERS  
where addressid not in

  
( select>  

  查询结果:
DSC00012.jpg

  (二)from 子句中的子查询
  from 子句的子查询为多行子查询
  需求:查询显示业主编号,业主名称,业主类型名称,条件为业主类型为”居民”,
  使用子查询实现。
  语句:
  select * from
  

(select o.id 业主编号,o.name 业主名称,ot.name 业主类型  
from T_OWNERS o,T_OWNERTYPE ot
  
where o.ownertypeid=ot.id)
  
where 业主类型='居民'
  

  查询结果如下:
DSC00013.jpg

  (三)select 子句中的子查询
  select 子句的子查询必须为单行子查询

  (1)需求:列出业主信息,包括>  语句:
  


  
select>
  
(select name from t_address where>  
from t_owners
  

  查询结果如下:
DSC00014.jpg


  (2)需求:列出业主信息,包括>  语句:
  


  
select>
  
( select name from t_address where>  
addressname,

  
( select (select name from t_area where>
  
t_address where>  
adrename
  
from t_owners;
  

  查询结果如下:
DSC00015.jpg

  四、分页查询
  (一)简单分页
  需求:分页查询台账表 T_ACCOUNT,每页 10 条记录
  分析:我们在 ORACLE 进行分页查询,需要用到伪列 ROWNUM 和嵌套查询
  我们首先显示前 10 条记录,语句如下:
  

  
select rownum,t.* from T_ACCOUNT t where rownum10 and rownum

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-563469-1-1.html 上篇帖子: AIX+oracle+rac+asm 下篇帖子: Oracle数据库巡检
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表