迅闻网
让更多人看到你

oracle分页查询语句(oracle是干嘛的)

  oracle分页查询语句

1、分组函数的概念
分组函数:作用于一组数据,并对一组数据回来一个值。
常用的六个分组函数:AVG平均值、SUM求和、MIN最小值、MAX最大值、COUNT统计个数、WM_CONCAT行转列
2、分组函数的运用
–列出表中字段的平均值,和
selectavg(表中列字段),sum(表中列字段)from表;–列出表中字段的最大值最小值
selectmax(表中的字段),min(表中的字段)from表;–输出这个表中一共有的数据条数
selectcount(*)from表;
–输出表中不重复字段的个数selectcount(distinct表中字段)from表;
–行转列
selectywbm,wm_concat(bh)fromgx_yh_ywxxgroupbyywbm
留意点:分组函数会主动滤掉空值,可运用nvl函数屏蔽分组函数的滤空功用,nvl(arg1,arg2),当榜首个参数为空则回来第二个自参数的值。
3、groupby子句的运用
selecta,组函数(x)fromtablegroupbya;
留意点:select列表中所有未包括在组函数中的列都要包括在GROUPBY子句中;而GROUPBY子句中的列不必包括在SELECT列表中
4、having子句
例子:selectdeptno,avg(sal)fromempgroupbydeptnohavingavg(sal)>2000;不能再where子句中运用分组函数(留意)。能够在having子句中运用分组函数。
–查询10号部分的薪酬selectdeptno,avg(sal)fromempgroupbydeptnohavingdeptno=10;=selectdeptno,avg(sal)fromempwheredeptno=10groupbydeptno;where和having能够通用的情况:从SQL优化的角度上看,尽量运用wherehaving先分组,后过滤where先过滤,后分组
5、Orderby子句
(1)selectdeptno,avg(sal)平均薪酬fromempgroupbydeptno
orderby平均薪酬
*平均薪酬是avg(sal)的别号,orderby句子能够直接运用别号,默许按升序排序
(2)selectdeptno,avg(sal)平均薪酬fromempgroupbydeptno
orderby2
*select句子第二列是平均薪酬,所以orderby句子后面直接写2也是跟榜首条句子履行成果相同,是依照平均薪酬排序的
6、分组函数的嵌套
selectmax(avg(sal))fromempgroupbydeptno;
*先在部分表里分组查出个部分的平均薪酬,然后嵌套max函数,得到各部分平均薪酬的最大值
7、GROUPBY句子的增强
二、多表查询
1、等值衔接
多表中的相同属性等值,以此为衔接点
查询职工编号,名字,薪酬,部分称号:selecte.empno,e,ename,e.sal,d.dnamefromempe,deptnodwheree.deptno=d.deptno;
2、不等值衔接
示例:查询职工信息,要求显示:职工号,名字,月薪,薪水的级别
selecte.empno,e.ename,e.sal,s.gradefromempe,salgradeswheree.salbetweens.losalands.hisal;
“betweenand”句子代替大于等于和小于等于
3、外衔接
核心:经过外衔接,把关于衔接条件不成立的记载,依然包括在最终的成果中
左外衔接:当衔接条件不成立的时分,等号左面的表依然被包括
右外衔接:当衔接条件不成立的时分,等号右边的表依然被包括
留意:左右外衔接的叫法和写法是相反的。如:若是右外衔接,则在等号的左面加上(+)符合,左外衔接则在等号的右边加上(+)符号。
selectd.deptno,d.dname,count(e.empno)fromempe,deptdwheree.deptno(+)=d.deptnogroupbyd.deptno,d.dname;
4、自衔接
核心:经过别号,将同一张表视为多张表
selecte.ename职工名字,b.ename老板名字fromempe,empb
wheree.mgr=b.empno;
5、层次查询
某些情况下,能够代替自衔接,本质上,是一个单表查询
selectlevel【伪列,表明树的深度】,empno,ename,sal,mgr
fromempconnectbypriorempno=mgr【前者的职工号等于后者的老板号,在树中即上一层的职工号等于当前层的老板号】
startwithmgrisnull;【从没有老板的那个职工即树的根节点开始遍历整棵树】
//相当于startwithempno=某个职工号【遍历以该职工为根节点的树】;
orderby1;

 

oracle
三、子查询
子查询便是处理不能一步查询到的成果,用select嵌套。
selectsalfromempwhereename=’scott’;
select*fromempwhere>3000;
select*fromempwheresal>(selectsalfromempwhereename=’scott’);
1、子查询需要留意的十点
(1)子查询语法中的小括号
(2)子查询的书写风格
(3)能够运用子查询的方位:where,select,select,having,from(在select后的子查询必须是一个单行子查询—即,子查询回来的成果集只要一条记载)
(4)不能够运用子查询的方位:groupby
(5)强调:from后面的子查询
(6)主查询和子查询能够不是同一张表
(7)一般不在子查询中,运用排序;但在Top-N剖析问题中,必须对子查询排序
行号永久依照默许的顺序排序的,由于是先查出数据,查出数据的瞬间就会添加行号这个伪劣了,假如有order或group才会持续履行,order一般是最终履行的,所以假如whererownuum<3orderbycolumn是先选出3行在order,而不是order后再拿出三行,所以假如要top-N的问题的话是要运用子查询先排序在选出rownum<3或者运用row_num再选出前3的数据。
(8)一般先履行子查询,再履行主查询;但相关子查询例外
相关子查询(子查询运用了主查询字段)
select职工号,名字,薪酬,(selectavg(薪酬)from职工表where部分号=t1.部分号)部分平均薪酬from职工表t1where薪酬>(selectavg(薪酬)from职工表where部分号=t1.部分号)
(9)单行子查询只能运用单行操作符;多行子查询只能运用多行操作符
(10)留意:子查询中是null值问题
假如集合中有空值不能运用notin由于notin等价于<>all,便是所以anotin(1,2,null)便是a!=1anda!=2anda!=null,由于a!=null永久是false所以最终是没有值回来的,当运用in的集合中有null是能够的,由于此时是or的操作了。假如要运用notin集合中有空值,便是用whereisnotnull过滤掉就能够了。
四、事例集锦
1、事例1
行号只能运用<,<=,而不能运用>,>=。跟Oracle数据库的行号生成机制有联系,取了榜首行才能取第二行,取了第二行才能取第三行
分页查询(嵌套子查询的方式查询5~8数据):
selectr,empno,ename,salfrom(selectrownumr,empno,ename,salfrom(selectrownum,empno,ename,salfromemporderbysaldesc)e1whererownum<=8)e2wherer>=5;
2、事例2
当一个成果有两种解法,便是完成一个功用能够是多种sql句子时,能够经过履行计划检查哪个的效率更高
explainplanforsql句子;
select*fromtable(dbm_xplan.display);
查询薪酬大于部分平均薪酬的职工
–相关子查询:
selectempno,ename,sal,(selectavg(sal)fromempwheredeptno=e.deptno)avgsalfromempe
wheresal>(selectavg(sal)fromempwheredeptno=e.deptno)
–多表查询:
selecte.empno,e.ename,e.sal,d.avgsal
fromempe,(selectdeptno,avg(sal)avgsalfromempgroupbydeptno)dwheree.deptno=d.deptnoande.sal>d.avgsal
–比较解说计划窗口的相关子查询比多表查询占用cpu少
3、事例3
按部分统计职工的人数:
函数查询:
selectcount(*)Total,sum(decode(to_char(hiredate,’YYYY’),’1980′,1,0))”1980″,sum(decode(to_char(hiredate,’YYYY’),’1981′,1,0))”1981″,sum(decode(to_char(hiredate,’YYYY’),’1982′,1,0))”1982″,sum(decode(to_char(hiredate,’YYYY’),’1987′,1,0))”1987″fromemp;
子查询:
select(selectcount(*)fromemp)Total,(selectcount(*)fromempwhereto_char(hiredate,’YYYY’)=’1980′)”1980″,(selectcount(*)fromempwhereto_char(hiredate,’YYYY’)=’1981′)”1981″,(selectcount(*)fromempwhereto_char(hiredate,’YYYY’)=’1982′)”1982″,(selectcount(*)fromempwhereto_char(hiredate,’YYYY’)=’1987′)”1987″fromdual;

oracle是干嘛的

ORACLE是一种适用于大型、中型和微型核算机的联系数据库办理体系,它运用SQL(Structuredguerylanguage)作为它的数据库言语。
SQL首要包含数据定义、数据操作(包含查询)和数据操控等三方面功用。SQL是一种非过程化程度很高的言语,用户只需阐明”干什么”而无需具体阐明”怎么干”言语简练、运用方便功用强大,集联机交互与嵌入于一体,能习惯广泛的运用环境。ORACLE数据库由三种类型的文件组成:数据库文件、日志文件和操控文件。
数据字典是由ORACLE自动建立并更新的一组表,这些表中记载用户的姓名、描述表和视图以及有关用户权限等的信息。数据字典是只读的,只允许查询。也就是说数据字典是一种数据库资源,每个用户都可以拜访数据字典,DBA可通过数据字典来监视ORACLERDBMS的运用,并协助用户完结其运用。ORACLERDBMS本身也要利用数据库字典来办理和操控整个数据库。
提起数据库,第一个想到的公司,一般都会是Oracle。该公司成立于1977年,最初是一家专门开发数据库的公司。
Oracle在数据库领域一直处于领先地位。1984年,首先将联系数据库转到了桌面核算机上。然后,Oracle的下一个版别,版别5,首先推出了分布式数据库、客户/服务器结构等崭新的概念。Oracle的版别6创始行锁定形式以及对称多处理核算机的支持……最新的Oracle8首要增加了对象技术,成为联系-对象数据库体系。现在,ORACLE产品覆盖了大、中、小型机等几十种机型,Oracle数据库成为世界上运用最广泛的联系数据体系之一。

未经允许不得转载:迅闻网 » oracle分页查询语句(oracle是干嘛的)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

迅闻网-让更多人看到你

登录/注册返回首页