oracle:数值型函数,日期函数,转换函数,组函数,分组,排序,
发布时间:2021-03-14 01:21:45 所属栏目:站长百科 来源:网络整理
导读:-- 数值型函数 -- 四舍五入round(x,y)对x保存y为小数 -- 四舍五入数值 select round ( 23.225 ) from dual; -- 输出功效:24 -- 四舍五入(小数点后保存1位小数)数值 select round ( 23.652 , 1 ) from dual; -- 输出功效:23.7 -- 四舍五入(四舍五入到小
--数值型函数 --四舍五入round(x,y)对x保存y为小数 --四舍五入数值 select round(23.225) from dual; --输出功效:24 --四舍五入(小数点后保存1位小数)数值 select round(23.652,1)from dual; --输出功效:23.7 --四舍五入(四舍五入到小数点前1位小数)数值 select round(25.2466,-1)from dual; --输出功效:30 -- 返回x按精度y截取后的值 --未四舍五入的值 select trunc(23.621) from dual; --输出功效:23 select trunc(14.562,1)from dual; --输出功效:14.5 select trunc(15.25,-1) from dual; --输出功效:10 -- mod(x,y)求余数 select mod(9,2)from dual; --输出功效:1 -- ceil 向上取整 select ceil(1.8)from dual; --输出功效:2 -- floor 向下取整 select floor(1.8)from dual; --输出功效:1 ----------------------------------------------------- --------------------------------日期函数 -- 返回体系当前时刻 select sysdate from dual; -- 返回当前会话时区中的当前日期 select current_date from dual; -- 添加月数(在当前时刻上加一个月) select add_months(sysdate,1)from dual; -- 返回两个时刻相差的月数 select months_between(sysdate,add_months(sysdate,1))from dual; -- 需求:查询事变年限在30年以上 select e.ename,e.hiredate from emp e where months_between(sysdate,e.hiredate)/12>30; -- 返回date地址月份最后的一天 select last_day(sysdate)from dual; -- next_day(date1,week) 返回date1下周礼拜几的日期 select next_day(sysdate,‘礼拜一‘) from dual; -- 查询会话的情形参数(我的是china) select * from nls_session_parameters; -- 日期计较(oracle的时刻计较单元为天) --来日诰日的此时 select sysdate+1 from dual; --前天的此时 select sysdate-2 from dual; ----------------------------------组函数 --组函数把多行数据颠末运算后返回单个值。也称聚合函数。 -- 求公司雇员的数目 --count 字段的总数(一样平常指定主键,指定某个字段时,null会被忽略不计,但*管帐) select count(*) from emp e; select count(e.empno) from emp e; select count(1) from emp e; -- avg:对多个记录的某个字段求均匀值 -- 需求:求底薪的均匀值 select avg(e.sal) from emp e; -- max/min需求:求雇员的最高薪资/最低薪资 select max(e.sal),min(e.sal),avg(e.sal) from emp e; -- sum(总数) 需求:求公司一个月的员工根基开销 select sum(e.sal) from emp e; --------------------------------留意: --[1] 组函数或聚合函数是对一个数据集(表数据、查询出来的表、分组的表)举办聚合。 --[2] 聚合函数对字段是null的值举办忽略。count(*) --[3] max/min 得当恣意数据范例,sum/avg 只合用于数值范例。 --聚合函数的功效可以作为其他查询前提。 ----------------------------------------分组(group by) /*在处理赏罚统计或聚合数据时,许多时辰必要对数据举办分组 语法 select field1,。。。 from tableName group by field1[,field2,…] 凭证field1[,…] 分组,字段值沟通的记录分到一组。*/ ----------------------[1]分组和聚合函数 -- 需求:统计部分10的人数 select count(1) from emp e where e.deptno=10; -- 需求:求各个部分的人数 select e.deptno,count(e.ename) from emp e group by e.deptno; group by e.deptno; -- 需求:求各个部分的均匀薪资 select e.deptno,avg(e.sal) from emp e group by e.deptno; -- 需求:求各个部分的月收入均匀值 select e.deptno,avg(e.sal+nvl(e.comm,0)) from emp e group by e.deptno; -- ----------特例:凭证补助分组(以是null同一分为一组) select e.comm,count(1) from emp e group by e.comm; -----------------------------having --假如必要对分组的数据举办前提过滤,必需行使having!!! -- group by having -- 查询部分均匀薪资大于3000的部分 select e.deptno from emp e group by e.deptno having avg(e.sal)>3000; -- 查询部分薪资大于3000的雇员按部分分组的均匀薪资 select e.deptno,avg(e.sal) from emp e where e.sal>3000 group by e.deptno; --留意: --[1] Where过滤行,having过滤分组。 --[2] Having支持全部where操纵符。 --对数据举办分组后,select语句的字段值只能是分组字段可能聚合函数。 ---------------------排序 (order by) /*排序 (order by)(select field1,。。。 from tablename order by field1,field2 对数据集举办排序,先按field1排序,假如field1排序沟通,凭证field2排序,依次类推。 -asc 升序,默认 -desc 降序*/ -- order by -- 需求:按雇员薪资排序 select e.ename,e.sal from emp e order by e.sal desc; -----------order by 一样平常都是最后执行。 --薪资大于1200的雇员 地址部分的均匀薪资大于1500的部分,凭证均匀薪资升序排序 select e.deptno,avg(e.sal) from emp e where e.sal>1200 group by e.deptno having avg(e.sal)>1500 order by avg(e.sal) asc ; ---------order by 既可以用于数据行(记录)排序。也可以对分组的功效举办排序,此时必要聚合函数共同。 --Select 说话的执行次序 /*1.读取from子句中的根基表、视图的数据,[执行笛卡尔积操纵]。 2.选取满意where子句中给出的前提表达式的元组 3.按group子句中指定列的值分组,同时提取满意Having子句中组前提表达式的那些组 4.按select子句中给出的列名或列表达式求值输出 5.Order by子句对输出的方针表举办排序。 from -> where -> group by -> having -> select -> order by */ --交集、全集、并集、差集 -- 并集:把荟萃A的功效和荟萃B的功效归并,并去掉一再的记录。 select e.* from emp e where e.deptno = 10 union select e.* from emp e where e.deptno = 20; -- 有一再记登科并集 select e.* from emp e where e.deptno = 10 or e.deptno = 20 union select e.* from emp e where e.deptno = 20; -- 全集:: 把荟萃A的功效和荟萃B的功效归并,保存一再记录 select e.* from emp e where e.deptno = 10 or e.deptno = 20 union all select e.* from emp e where e.deptno = 10; --交集: 把荟萃A的功效和荟萃B的功效取沟通部分 select e.* from emp e where e.deptno = 10 or e.deptno = 20 intersect select e.* from emp e where e.deptno = 10; --差集: 在荟萃A的功效中去掉荟萃B的功效 (A-B) select e.* from emp e where e.deptno = 10 or e.deptno = 20 minus select e.* from emp e where e.deptno = 10; -- 笛卡尔积(两张表合在一路,新表行数便是两张表行数相乘【第一张表的每行加一次第二章表全部行】) select * from emp,dept -- 等值毗连 -- 需求:查询雇员的部分名称 select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno -- 不等值毗连 -- 查询每个雇员的薪资品级 select e.ename,e.sal,s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal --外毗连 --左外毗连:左边的表作为主表,右边表作为从表,主表数据都表现,从表数据没有,用null添补,用+号暗示。 -- 需求:查询全部部分的雇员 select * from dept d,emp e where d.deptno=e.deptno(+) -- 右外毗连 --右外毗连: 右边的表作为主表,左边表作为从表,主表数据都表现,从表数据没有,用null添补,用+号暗示。 select * from emp e,dept d where e.deptno(+) = d.deptno; --自毗连 --一个表自身毗连自身时,称为自毗连。自毗连以差异的视角对待统一张表。 -- 查询每个雇员的上级率领 select e.ename "雇员",nvl(m.ename,‘boss‘) "率领" from emp e,emp m where e.mgr = m.empno(+) /*多于两张表的查询 假若有多个表参加查询,先把t1xt2笛卡尔积获得一个大表T1,再把T1xt3笛卡尔积获得一个其它的大表T2,依次类推。 全部的多表查询最终都是两种表的查询。*/ (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |