男性健康项目表三.docx
- 文档编号:10972012
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:45
- 大小:30.90KB
男性健康项目表三.docx
《男性健康项目表三.docx》由会员分享,可在线阅读,更多相关《男性健康项目表三.docx(45页珍藏版)》请在冰点文库上搜索。
男性健康项目表三
男性健康项目表三
#Oracle
##DBA权限
~~~java
//给用户赋予DBA权限
grantdbatoscott
~~~
##Oracle获得连接
~~~java
~~~
##1.常用查询语句
###1.简单的语句查询
~~~java
//查询水表编号为30408的业主记录
select*fromt_ownerswherewatermeter=30408
//查询业主名称包含“刘”的业主记录
select*fromt_ownerswherenamelike'%刘%'
//查询业主名称包含“刘”的并且门牌号包含5的业主记录
select*fromt_ownerswherenamelike'%刘%'andhousenumberlike'%5%'
//查询业主名称包含“刘”的或者门牌号包含5的业主记录
select*fromt_ownerswherenamelike'%刘%'orhousenumberlike'%5%'
//查询业主名称包含“刘”的或者门牌号包含5的业主记录,并且地址编号为3的记录
select*fromt_ownerswhere(namelike'%刘%'orhousenumberlike'%5%')andaddressid=3
//查询台账记录中用水字数大于等于10000,并且小于等于20000的记录
select*fromt_accountwhereusenum>=10000andusenum<=20000
select*fromt_accountwhereusenumbetween10000and20000
~~~
###2.查询空值
~~~java
//查询T_PRICETABLE表中MAXNUM为空的记录
select*fromt_pricetablewheremaxnumisnull
//查询T_PRICETABLE表中MAXNUM不为空的记录
select*fromt_pricetablewheremaxnumisnotnull
~~~
###3.去重查询
~~~java
//查询业主表中的地址ID,不重复显示
selectdistinctaddressidfromt_owners
~~~
###4.排序查询
~~~java
//对T_ACCOUNT表按使用量进行升序排序
select*fromt_accountorderbyusenum
//对T_ACCOUNT表按使用量进行降序排序
select*fromt_accountorderbyusenumdesc
~~~
###5.伪列查询
~~~java
注意:
查询一条数据生成一个rowid和rownum,没有查询的数据不产生rowid和rownum.每次查询rownum和rowid都从1开始
//ROWID和ROWNUM。
selectrowid,rownum,t.*fromt_areat
~~~
###6.函数查询
~~~java
//统计2012年所有用户的用水量总和
selectsum(usenum)fromt_accountwhereyear='2012'
//统计2012年所有用水量(字数)的平均值
selectavg(usenum)fromt_accountwhereyear='2012'
//统计2012年最高用水量(字数)
selectmax(usenum)fromt_accountwhereyear='2012'
//求最小值min
selectmin(usenum)fromt_accountwhereyear='2012'
//统计记录个数count
selectcount(*)fromt_accountwhereyear='2012'
select*fromt_accountwhereyear='2012'
//统计业主类型ID为1的业主数量
selectcount(*)fromt_ownerswhereownertypeid=1
//按区域分组统计水费合计数
selectareaid,sum(money)fromt_accountgroupbyareaid
~~~
###7.having
~~~java
//查询水费合计大于16900的区域及水费合计
selectareaid,sum(money)fromt_accountgroupbyareaidhavingsum(money)>16900
~~~
###8.隐式内链接
~~~java
//查询显示业主编号,业主名称,业主类型名称
selectt.id,t.name业主名称,a.name业主类型fromt_ownerst,t_areaa
~~~
###9.多表联查
~~~java
//查询显示业主编号,业主名称、地址和业主类型
selectt.id业主编号,t.name业主名称,a.name地址,ot.name业主类型fromt_ownerst,t_areaa,t_ownertypeot
//查询显示业主编号、业主名称、地址、所属区域、业主分类
selectow.id业主编号,ow.name业主名称,ar.name区域,ad.name地址,ot.name业主分类fromt_ownersow,t_areaar,t_addressad,t_ownertypeot
//查询显示业主编号、业主名称、地址、所属区域、收费员、业主分类
selectow.id业主编号,ow.name业主名称,ad.name地址,ar.name区域,op.name收费员,ot.name业主分类fromt_ownersow,t_addressad,t_areaar,t_operatorop,t_ownertypeot
~~~
###10.左外链接与右外链接
~~~java
注意:
右外链接➕放左边,左外链接➕方右边,但都要放在where语句中关联的id的后面,示例如下:
右外:
ow.id(+)=ac.owneruuid左外:
ow.id=ac.owneruuid(+)
//查询业主的账务记录,显示业主编号、名称、年、月、金额。
//如果此业主没有账务记录也要列出姓名
selectow.id业主编号,ow.name名称,ac.year年,ac.month月,ac.money金额fromt_ownersowleftjoint_accountaconow.id=ac.owneruuid
selectow.id业主编号,ow.name名称,ac.year年,ac.month月,ac.money金额fromt_ownersow,t_accountacwhereow.id=ac.owneruuid(+)
//查询业主的账务记录,显示业主编号、名称、年、月、金额。
如果账务记录没有对应的业主信息,也要列出记录
selectow.id业主编号,ow.name名称,ac.year年,ac.month月,ac.money金额fromt_ownersowrightjoint_accountaconow.id=ac.owneruuid
selectow.id业主编号,ow.name名称,ac.year年,ac.month月,ac.money金额fromt_ownersow,t_accountacwhereow.id(+)=ac.owneruuid
~~~
###11.where字句查询
~~~java
1.单行自居查询
//查询2012年1月用水量大于平均值的台账记录
select*fromt_accountwhereyear='2012'andmonth='01'andusenum>(selectavg(usenum)fromt_accountwhereyear='2012'andmonth='01')
2.多行子句查询
//查询地址含有“花园”的业主的信息
select*fromt_ownerswhereaddressidin(selectidfromt_addresswherenamelike'%花园%')
//查询地址不含有“花园”的业主的信息
select*fromt_ownerswhereaddressidnotin(selectidfromt_addresswherenamelike'%花园%')
3.in的用法:
该语句的意思是,地址id只要在in里面,就查出来,结果是查出来了1,3,4三条数据
//查询地址编号为1、3、4的业主记录
select*fromt_ownerswhereaddressidin(1,3,4)
~~~
###12.form字句查询
~~~java
注意:
from后面跟的一定是一个表,所以字句查询出来的结果页必须是一个表
//查询显示业主编号,业主名称,业主类型名称,条件为业主类型为”居民”,使用子查询实现
select*from(selectos.id业主编号,os.name业主名称,ot.name业主类型fromt_ownersos,t_ownertypeotwhereos.ownertypeid=ot.id)where业主类型='居民'
~~~
###13.select字句查询
~~~java
注意:
select子句的子查询必须为单行子查询
//列出业主信息,包括ID,名称,所属地址
selectid,name,(selectnamefromt_addresswhereid=addressid)addressnamefromt_owners
//列出业主信息,包括ID,名称,所属地址,所属区域
selectid,name,(selectnamefromt_addresswhereid=addressid)addressname,(select(selectnamefromt_areawhereid=areaid)fromt_addresswhereid=addressid)adrenamefromt_owners
~~~
###14.分页查询
~~~java
注意:
因为rownum是查询一条生成一个rowid和rownum,所以在分页之前先把数据查出来并分组,然后在生成rownum,再进行分页
//分页查询台账表T_ACCOUNT,每页10条记录
selectrownum,t.*fromT_ACCOUNTtwhererownum<=10
//显示第11条到第20条的记录
select*from(selectrownumr,t.*fromt_accounttwhererownum<=20)wherer>10
//分页查询台账表T_ACCOUNT,每页10条记录,按使用字数降序排序
select*from(selectrownumr,t.*from(select*fromt_accountorderbyusenumdesc)twhererownum<=20)wherer>10
//用row_number()分析函数实现的分页查询
select*from(selectrow_number()over(orderbyusenumdesc)rownumber,t.*fromt_accountt)whererownumber>10andrownumber<=20
~~~
###15.字符串操作
~~~java
//求字符串长度LENGTH
selectlength('helloworld')fromdual
//求字符串的子串SUBSTR
selectsubstr('hello',2,2)fromdual
//字符串拼接CONCAT
selectconcat('hello','world')fromdual
//使用||进行字符串拼接
select'abc'||'def'fromdual
~~~
###16.数学操作
~~~java
//四舍五入函数ROUND
selectround(100.67)fromdual//四舍五入并取整
selectround(100.67,1)fromdual//四舍五入并保留一位小数
//截取函数TRUNC
selecttrunc(100.456)fromdual//小数点以后全部不要
selecttrunc(100.456,2)fromdual//小数点以后保留两位,剩下的全不要
//取模MOD
selectmod(10,3)fromdual//相当与取余
~~~
###17.日期操作
~~~java
//获取当前日期和时间sysdate
selectsysdatefromdual//2017/12/811:
24:
17
//加月函数ADD_MONTHS:
在当前日期基础上加指定的月
selectADD_MONTHS(sysdate,3)fromdual
//求所在月最后一天LAST_DAY
selectlast_day(sysdate)fromdual
//日期截取TRUNC
selecttrunc(sysdate)fromdual//只要日期,不要时分秒
selecttrunc(sysdate,'yyyy')fromdual//2017/1/1
selecttrunc(sysdate,'mm')fromdual//2017/12/1
selecttrunc(sysdate,'dd')fromdual//2017/12/8
selecttrunc(sysdate,'hh')fromdual//2017/12/811:
00:
00
selecttrunc(sysdate,'mi')fromdual//2017/12/811:
24:
00
~~~
###18.日期,数字转字符串操作
~~~java
//数字转字符串TO_CHAR
selectto_char(100)fromdual
//日期转字符串TO_CHAR
selectto_char(sysdate,'yyyy-mm-dd')fromdual//第二个参数表示要转的格式,但不能使用年月日
~~~
###19.字符串转数字,日期操作
~~~java
//字符串转日期TO_DATE
//字符串是什么格式,后面转的时候就用什么格式
selectto_date('2017-12-12','yyyy-mm-dd')fromdual
//字符串转数字TO_NUMBER
selectto_number('100')fromdual
~~~
###20.空值处理NVL和NVL2
~~~java
用法:
NVL(检测的值,如果为null的值)
//空值处理函数NVL用法:
NVL
selectnvl(null,0)fromdual//如果是空的话,就取0,非空的话,就取原来的值
selectprice,maxnum,nvl(maxnum,9999)fromt_pricetablewhereownertypeid=1
NVL2用法:
NVL2(检测的值,如果不为null的值,如果为null的值)
//空值处理函数NVL2
selectprice,maxnum,nvl2(maxnum,to_char(maxnum),'不限')fromt_pricetable
~~~
###21.条件取值decode
~~~java
用法:
decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
//条件取值decode
selectname,decode(ownertypeid,1,'居民',2,'事业单位',3,'其他')as类型fromt_owners
~~~
###22.条件取值(case,when,then)
~~~java
//注意:
case,when,then一定要放在括号里面
selectname,(caseownertypeid
when1then'居民'
when2then'事业单位'
when3then'其他'
end
)fromt_owners
selectname,(case
whenownertypeid=1then'居民'
whenownertypeid=2then'事业单位'
whenownertypeid=3then'其他'
end
)fromt_owners
~~~
###23.行列转换
~~~java
//按月份统计2012年各个地区的水费
select(selectnamefromt_areawhereid=areaid)区域,
sum(casewhenmonth='01'thenmoneyelse0end)一月,
sum(casewhenmonth='02'thenmoneyelse0end)二月,
sum(casewhenmonth='03'thenmoneyelse0end)三月,
sum(casewhenmonth='04'thenmoneyelse0end)四月,
sum(casewhenmonth='05'thenmoneyelse0end)五月,
sum(casewhenmonth='06'thenmoneyelse0end)六月,
sum(casewhenmonth='07'thenmoneyelse0end)七月,
sum(casewhenmonth='08'thenmoneyelse0end)八月,
sum(casewhenmonth='09'thenmoneyelse0end)九月,
sum(casewhenmonth='010'thenmoneyelse0end)十月,
sum(casewhenmonth='011'thenmoneyelse0end)十一月,
sum(casewhenmonth='012'thenmoneyelse0end)十二月
fromt_accountwhereyear='2012'groupbyareaid
//按季度统计2012年各个地区的水费
select(selectnamefromt_areawhereid=areaid)区域,
sum(casewhenmonth>=01andmonth<=03thenmoneyelse0end)第一季度,
sum(casewhenmonth>=04andmonth<=06thenmoneyelse0end)第二季度,
sum(casewhenmonth>=07andmonth<=09thenmoneyelse0end)第三季度,
sum(casewhenmonth>=10andmonth<=12thenmoneyelse0end)第四季度
fromt_accountwhereyear='2012'groupbyareaid
~~~
###24.分析函数
~~~java
(1)RANK相同的值排名相同,排名跳跃
//对T_ACCOUNT表的usenum字段进行排序,相同的值排名相同,排名跳跃
selectrank()over(orderbyusenumdesc),usenumfromt_account
(2)DENSE_RANK相同的值排名相同,排名连续
//对T_ACCOUNT表的usenum字段进行排序,相同的值排名相同,排名连续
selectDENSE_RANK()over(orderbyusenumdesc),usenumfromt_account
(3)ROW_NUMBER返回连续的排名,无论值是否相等
//对T_ACCOUNT表的usenum字段进行排序,返回连续的排名,无论值是否相等
selectROW_NUMBER()over(orderbyusenumdesc),usenumfromt_account
实现分页:
//用row_number()分析函数实现的分页查询
注意:
在里面的select语句中,不能使用whererow_number>10,因为执行where条件的时候,row_number还没有产生(原因是读取一条数据,row_number向下走一步,产生一个数字,类似id,会自动增长)
select*from(selectrow_number()over(orderbyusenumdesc)rownumber,t.*fromt_accountt)whererownumber>10andrownumber<=20
~~~
###25.集合运算
~~~java
//UNIONALL(并集),返回各个查询的所有记录,包括重复记录。
查询出小于6的,和大于3的全部查出来,会但是大于3的和小于6的会查两次
select*fromt_ownerswhereid>6
unionall
select*fromt_ownerswhereid<3
//UNION(并集),返回各个查询的所有记录,不包括重复记录
查询出小于6的,和大于3的全部查出来,不会出现重复
select*fromt_ownerswhereid>6
union
select*fromt_ownerswhereid<3
//INTERSECT(交集),返回两个查询共有的记录
查出小于6并且大于3的,结果是id为4和5的
select
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 男性 健康 项目