糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > oracle查询注意点 oracle查询相关注意点

oracle查询注意点 oracle查询相关注意点

时间:2021-07-22 22:55:02

相关推荐

oracle查询注意点 oracle查询相关注意点

单表查询:

1.or和and混合使用

需求:查询业主名称包含'刘'或门牌号包含'5'的,并且地址编号为3的记录SELECT*FROMT_OWNERSWHERE("NAME"LIKE'%刘%'orHOUSENUMBERLIKE'%5%')ANDADDRESSID=3

and的权限优先于 or所以需要在or的两边添加()

2.范围查询

除了传统的where usenum >=100 and usenum <=200,还可以用between and查询

SELECT*fromT_ACCOUNTWHEREUSENUMBETWEEN100and200--只适合>=或<=

3.去空查询

SELECT*FROMT_PRICETABLEWHEREMAXNUMISNULL;SELECT*FROMT_PRICETABLEWHEREMAXNUMISNOTnull;

4.去掉重复记录SELECTADDRESSIDFROMT_OWNERSGROUPBYADDRESSID;SELECTDISTINCTADDRESSIDFROMT_OWNERS;--执行效率高

5.基于伪列的查询

rowid :表中每一行在数据文件中都有一个物理地址,rowid返回就是该行的物理地址

SELECTROWID,t.*FROMT_AREAt;

rownum :通过rownum伪列可以限制查询结果集中返回的行数,可用于分页SELECTROWNUM,t.*FROMT_OWNERSt;

6.聚合函数

sum(),avg(),max(),min(),count()括号内传递条件,如:

SELECT"COUNT"(*)FROMT_OWNERStWHEREOWNERTYPEID=1;

分组聚合group by如果后面加having条件,即在分组后过滤数据SELECTAREAID,"SUM"(MONEY)FROMT_ACCOUNTGROUPBYAREAIDHAVING"SUM"(MONEY)>169000

多表查询:

连接规定 能用内连接 就不用外链接 能用左外 就 不用右外

1.内连接

需求:查询显示业主编号,业主名称,业主类型名称

SELECT

t1."ID",

T1."NAME",

T2."NAME"FROM

T_OWNERSt1,

T_OWNERTYPEt2WHERE

T1.OWNERTYPEID=T2."ID"

需求:查询显示业主编号,业主名称,地址,业主类型名称

SELECT

T1."ID",

T1."NAME",

t2."NAME",

T3."NAME"FROM

T_OWNERSt1,

T_OWNERTYPEt2,

T_ADDRESSt3WHERE

T1.OWNERTYPEID=T2."ID"ANDt1.ADDRESSID=T3."ID";

注意:多表的内连接,可以先写fromxxx ,xxx ,xxx以及wherexx=yy,aa=bb,xx=zz,最后再写select * 需要显示的内容

2.左外连接

需求:查询业主的账务记录,显示业主的编号,名称,年,月,金额,没有账务信息也要列出

SELECT--这是SQL1999标准的语法

A1."ID",

A1."NAME",

B1."YEAR",

B1."MONTH",

B1.MONEYFROM

T_OWNERSa1LEFTJOINT_ACCOUNTb1ONA1."ID"=b1.OWNERUUID

SELECT--这是ORACLE提供的语法

A1."ID",

A1."NAME",

B1."YEAR",

B1."MONTH",

B1.MONEYFROM

T_OWNERSa1,

T_ACCOUNTb1WHERE

A1."ID"=B1.OWNERUUID(+);

注意:left join左边的是主表,右边的是辅表,on后面是条件;ORACLE提供的,谁是辅表就在谁身上

加 (+) .

3.子查询

单行子查询:

需求:查询01月用水量大于台账记录平均值的数据.分析:先查平均值,再传入

SELECT

*FROM

T_ACCOUNTWHERE

"YEAR"=''AND"MONTH"='01'ANDUSENUM>(SELECT--查平均值

"AVG"(USENUM)FROM

T_ACCOUNTWHERE

"YEAR"=''

AND"MONTH"='01')

多行子查询:

需求:查询地址编号为1,3,4的业主记录.分析:如果用or来编写太繁琐,所以用inSELECT*FROMT_OWNERSWHEREADDRESSIDIN(1,3,4);

需求:查询地址含有"花园"的业主信息.分析:先模糊查询,再传入

SELECT

*FROM

T_OWNERSWHERE

ADDRESSIDIN(SELECT

"ID"--外查询需要addressID,所以内查询要查idFROM

T_ADDRESSWHERE

"NAME"LIKE'%花园%'

);

注意:not in不包含 is not null代表不为空;子查询查询的结果作为条件传入另一个SQL语句

分页查询:

简单分页查询:

需求:分页查询台账表,每页10条记录.分析:rownum不能使用>符号,只能

使用子查询:

SELECT

*FROM

(

SELECT

ROWNUMr,

A1.*

FROM

T_ACCOUNTa1WHERE

ROWNUM<=20--如果要嵌套排序查,代码该如何写?

)WHERE

r>10;

基于排序的分页:

SELECT

*FROM

(SELECT

A.*,ROWNUMRNFROM

(SELECT

*

FROM

T_ACCOUNTWHERE

YEAR=''

ORDERBY

USENUMDESC

)A--A表代表排序,也是三层中的数据层,第一步

)B--B表代表基于伪列查询,也是三层中的伪列层,第二步WHERE--最后就是分页查询了,也是三层中的分页层,第三步

B.RNBETWEEN(3-1)*5+1--ORACLE中索引是从1开始的AND3*5;--条件要知道怎么计算

未完待续...

如果觉得《oracle查询注意点 oracle查询相关注意点》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。