Error[8]: Undefined offset: 806, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述--数值型函数--四舍五入round(x,y)对x保留y为小数--四舍五入数值select round(23.225) from dual;--输出结果:24--四舍五入(小数点后保留1位小数)数值select round(23.652,1)from dual;--输出结果:23.7--四舍五入(四舍五入到小数点前1位小数)数值select roun
--数值型函数--四舍五入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;--输出结果:23select trunc(14.562,1)from dual;--输出结果:14.5select 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;

--------------------------------------------------转换函数--转换函数就是把字符、日期、数值型数据进行相互转换。类型转换分两种:隐式类型转换和显式类型转换--隐式类型转换--字符和数字/日期之间的隐式转换-- 字符隐式转换成数值select 100-10 from dual;-- 字符隐式转化为日期--DD-MON-RR默认的日期格式select 1 from dual where sysdate>13-1月-19-- 查date format格式select * from nls_session_parameters

------------显示类型转换-- to_char-- 【1】把日期转化成字符-- 按照默认格式DD-MON-RRselect to_char(sysdate) from dual;-- 按指定格式(格式查文档)select to_char(sysdate,YYYY"年"MM"月"DD"日" HH24:MI:SS) as "时间" from dual;--输出结果:2019年05月14日 19:34:50-- 【2】把数值格式化成字符串select to_char(12345,999999.99)from dual;--输出结果: 12345.00select to_char(1230.45,9999999.9999)from dual;--输出结果:1230.4500select to_char(1255.55,0000000.0000000)from dual;--输出结果: 0001255.5500000select to_char(12345,000.0000from) dual;--输出结果: 345.0000--需求:把18612341234格式化成186-1234-1234selectreplace 18612341234(to_char(,999,9999,9999),,,-from) dual;---------- to_numberselect to_number(,345,,999from) dual;--输出结果:12345----------------- to_dateselect to_date(14-1月-19,DD-MON-RRfrom) dual;--输出结果:2019/1/14select to_date(2004-08-27,YYYY-MM-DDfrom) dual;--输出结果:2004/8/27----------------函数可以嵌套-- 查询雇用期满6个月的下一个周一的日期。select6 e.hiredate,next_day(add_months(e.hiredate,),星期一from)where emp e > months_between(sysdate,e.hiredate)6;-------------------------------decode/case when--decode(条件,值1,“返回值1”,值2,“返回值2”,“默认值”)-- 需求:查询员工所在的部门名称select10 e.ename,e.deptno,decode(e.deptno,,部门120,,部门230,,部门3,未知from) emp e;---------case when X then ‘y‘else ‘‘... endselectcase e.ename, e.deptnowhen10 then 部门1when20 then 部门2when30 then 部门3else 未知end from emp e; -- 需求:对各个部门进行涨薪,10->1.1 20->1.2 30->1.3 其他->1.0select as e.deptno,e.ename,e.sal "涨薪前",10*,e.sal1.1*,e.sal1.2*,e.sal1.3as) from "涨薪后" emp e; -- 需求:根据工资分布输出以下信息/* <1000 真屌丝 (1001,2000] 屌丝 (2001,3000] 白领 (3001,5000] 高富帅 (5001,10000] 土豪*/select e.ename "姓名",e.sal "工资",casewhen <= e.sal1000then 真屌丝when <= e.sal2000then 屌丝when <= e.sal3000then 白领when <= e.sal5000then 高富帅when <= e.sal10000then 土豪else 未知end "描述" from emp e;-----------------------------总结:--decode 多用于等值匹配;case when可以用于等值,多用于条件分支。--

--------------------------------组函数--组函数把多行数据经过运算后返回单个值。也称聚合函数。-- 求公司雇员的数量--count 字段的总数(一般指定主键,指定某个字段时,null会被忽略不计,但*会计)selectcount *(from)  emp e;selectcount from(e.empno)  emp e;selectcount 1(from)  emp e;-- avg:对多个记录的某个字段求平均值-- 需求:求底薪的平均值selectavg from(e.sal)  emp e;-- max/min需求:求雇员的最高薪资/最低薪资selectmax min(e.sal),avg(e.sal),from(e.sal)  emp e;-- sum(总数) 需求:求公司一个月的员工基本开销selectsum from(e.sal)  emp e;--------------------------------注意:--[1] 组函数或聚合函数是对一个数据集(表数据、查询出来的表、分组的表)进行聚合。--[2] 聚合函数对字段是null的值进行忽略。count(*) --[3] max/min 适合任意数据类型,sum/avg 只适用于数值类型。--聚合函数的结果可以作为其他查询条件。--

--------------------------------------分组(group by)/*在处理统计或聚合数据时,很多时候需要对数据进行分组 语法select fIEld1,。。。from tablenamegroup by fIEld1[,fIEld2,…]按照fIEld1[,…] 分组,字段值相同的记录分到一组。*/----------------------[1]分组和聚合函数-- 需求:统计部门10的人数selectcount 1(from) where emp e = e.deptno10;-- 需求:求各个部门的人数selectcount e.deptno,from(e.ename) group emp e by  e.deptno;groupby  e.deptno;-- 需求:求各个部门的平均薪资selectavg e.deptno,from(e.sal) group emp e by  e.deptno;-- 需求:求各个部门的月收入平均值selectavg e.deptno,+(e.sal0nvl(e.comm,from)) group emp e by  e.deptno;-- ----------特例:按照津贴分组(所以null统一分为一组)selectcount e.comm,1(from) group emp e by  e.comm;-----------------------------having--如果需要对分组的数据进行条件过滤,必须使用having!!!-- group by having-- 查询部门平均薪资大于3000的部门selectfrom e.deptno group emp e by having e.deptno avg >(e.sal)3000;-- 查询部门薪资大于3000的雇员按部门分组的平均薪资selectavg e.deptno,from(e.sal) where emp e > e.sal3000group by  e.deptno;--注意:--[1] Where过滤行,having过滤分组。--[2] Having支持所有where *** 作符。--对数据进行分组后,select语句的字段值只能是分组字段或者聚合函数。---------------------排序 (order by)/*排序 (order by)(select fIEld1,。。。from tablenameorder by fIEld1,fIEld2对数据集进行排序,先按fIEld1排序,如果fIEld1排序相同,按照fIEld2排序,依次类推。-asc 升序,默认-desc 降序*/-- order by-- 需求:按雇员薪资排序selectfrom e.ename,e.sal order emp e by desc e.sal ;-----------order by 一般都是最后执行。--薪资大于1200的雇员 所在部门的平均薪资大于1500的部门,按照平均薪资升序排序 selectavg e.deptno,(e.sal)from emp ewhere> e.sal1200groupby  e.deptnohavingavg >(e.sal)1500orderby avg asc(e.sal)  ;---------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 where emp e = e.deptno 10 unionselect* e.from where emp e = e.deptno 20 ;-- 有重复记录取并集select* e.from where emp e = e.deptno 10 or = e.deptno 20 unionselect* e.from where emp e = e.deptno 20 ;-- 全集:: 把集合A的结果和集合B的结果合并,保留重复记录select* e.from where emp e = e.deptno 10 or = e.deptno 20 unionall select* e.from where emp e = e.deptno 10 ;--交集: 把集合A的结果和集合B的结果取相同部门select* e.from where emp e = e.deptno 10 or = e.deptno 20 intersectselect* e.from where emp e = e.deptno 10 ;--差集: 在集合A的结果中去掉集合B的结果 (A-B)select* e.from where emp e = e.deptno 10 or = e.deptno 20 minusselect* e.from where emp e = e.deptno 10 ;-- 笛卡尔积(两张表合在一起,新表行数等于两张表行数相乘【第一张表的每行加一次第二章表所有行】)select* from  emp,dept-- 等值连接-- 需求:查询雇员的部门名称select e.ename,d.dnamefrom emp e,dept dwhere= e.deptnod.deptno-- 不等值连接-- 查询每个雇员的薪资等级select e.ename,e.sal,s.gradefrom emp e,salgrade swherebetween e.sal and s.losal  s.hisal--外连接--左外连接:左边的表作为主表,右边表作为从表,主表数据都显示,从表数据没有,用null填充,用+号表示。-- 需求:查询所有部门的雇员select* from  dept d,emp ewhere= d.deptno+e.deptno()-- 右外连接--右外连接: 右边的表作为主表,左边表作为从表,主表数据都显示,从表数据没有,用null填充,用+号表示。select* from emp e,dept dwhere+ e.deptno(=)  d.deptno;--自连接--一个表自身连接自身时,称为自连接。自连接以不同的视角看待同一张表。-- 查询每个雇员的上级领导select e.ename "雇员",nvl(m.ename,boss) "领导"from emp e,emp mwhere= e.mgr + m.empno()/*多于两张表的查询如果有多个表参与查询,先把t1xt2笛卡尔积得到一个大表T1,再把T1xt3笛卡尔积得到一个另外的大表T2,依次类推。所有的多表查询最终都是两种表的查询。*/[+++]
总结

以上是内存溢出为你收集整理的oracle:数值型函数,日期函数,转换函数,组函数,分组,排序,两表查询连接全部内容,希望文章能够帮你解决oracle:数值型函数,日期函数,转换函数,组函数,分组,排序,两表查询连接所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
oracle:数值型函数,日期函数,转换函数,组函数,分组,排序,两表查询连接_非关系型数据库_内存溢出

oracle:数值型函数,日期函数,转换函数,组函数,分组,排序,两表查询连接

oracle:数值型函数,日期函数,转换函数,组函数,分组,排序,两表查询连接,第1张

概述--数值型函数--四舍五入round(x,y)对x保留y为小数--四舍五入数值select round(23.225) from dual;--输出结果:24--四舍五入(小数点后保留1位小数)数值select round(23.652,1)from dual;--输出结果:23.7--四舍五入(四舍五入到小数点前1位小数)数值select roun
--数值型函数--四舍五入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;--输出结果:23select trunc(14.562,1)from dual;--输出结果:14.5select 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;

--------------------------------------------------转换函数--转换函数就是把字符、日期、数值型数据进行相互转换。类型转换分两种:隐式类型转换和显式类型转换--隐式类型转换--字符和数字/日期之间的隐式转换-- 字符隐式转换成数值select 100-10 from dual;-- 字符隐式转化为日期--DD-MON-RR默认的日期格式select 1 from dual where sysdate>13-1月-19-- 查date format格式select * from nls_session_parameters

------------显示类型转换-- to_char-- 【1】把日期转化成字符-- 按照默认格式DD-MON-RRselect to_char(sysdate) from dual;-- 按指定格式(格式查文档)select to_char(sysdate,YYYY"年"MM"月"DD"日" HH24:MI:SS) as "时间" from dual;--输出结果:2019年05月14日 19:34:50-- 【2】把数值格式化成字符串select to_char(12345,999999.99)from dual;--输出结果: 12345.00select to_char(1230.45,9999999.9999)from dual;--输出结果:1230.4500select to_char(1255.55,0000000.0000000)from dual;--输出结果: 0001255.5500000select to_char(12345,000.0000from) dual;--输出结果: 345.0000--需求:把18612341234格式化成186-1234-1234selectreplace 18612341234(to_char(,999,9999,9999),,,-from) dual;---------- to_numberselect to_number(,345,,999from) dual;--输出结果:12345----------------- to_dateselect to_date(14-1月-19,DD-MON-RRfrom) dual;--输出结果:2019/1/14select to_date(2004-08-27,YYYY-MM-DDfrom) dual;--输出结果:2004/8/27----------------函数可以嵌套-- 查询雇用期满6个月的下一个周一的日期。select6 e.hiredate,next_day(add_months(e.hiredate,),星期一from)where emp e > months_between(sysdate,e.hiredate)6;-------------------------------decode/case when--decode(条件,值1,“返回值1”,值2,“返回值2”,“默认值”)-- 需求:查询员工所在的部门名称select10 e.ename,e.deptno,decode(e.deptno,,部门120,,部门230,,部门3,未知from) emp e;---------case when X then ‘y‘else ‘‘... endselectcase e.ename, e.deptnowhen10 then 部门1when20 then 部门2when30 then 部门3else 未知end from emp e; -- 需求:对各个部门进行涨薪,10->1.1 20->1.2 30->1.3 其他->1.0select as e.deptno,e.ename,e.sal "涨薪前",10*,e.sal1.1*,e.sal1.2*,e.sal1.3as) from "涨薪后" emp e; -- 需求:根据工资分布输出以下信息/* <1000 真屌丝 (1001,2000] 屌丝 (2001,3000] 白领 (3001,5000] 高富帅 (5001,10000] 土豪*/select e.ename "姓名",e.sal "工资",casewhen <= e.sal1000then 真屌丝when <= e.sal2000then 屌丝when <= e.sal3000then 白领when <= e.sal5000then 高富帅when <= e.sal10000then 土豪else 未知end "描述" from emp e;-----------------------------总结:--decode 多用于等值匹配;case when可以用于等值,多用于条件分支。--

--------------------------------组函数--组函数把多行数据经过运算后返回单个值。也称聚合函数。-- 求公司雇员的数量--count 字段的总数(一般指定主键,指定某个字段时,null会被忽略不计,但*会计)selectcount *(from)  emp e;selectcount from(e.empno)  emp e;selectcount 1(from)  emp e;-- avg:对多个记录的某个字段求平均值-- 需求:求底薪的平均值selectavg from(e.sal)  emp e;-- max/min需求:求雇员的最高薪资/最低薪资selectmax min(e.sal),avg(e.sal),from(e.sal)  emp e;-- sum(总数) 需求:求公司一个月的员工基本开销selectsum from(e.sal)  emp e;--------------------------------注意:--[1] 组函数或聚合函数是对一个数据集(表数据、查询出来的表、分组的表)进行聚合。--[2] 聚合函数对字段是null的值进行忽略。count(*) --[3] max/min 适合任意数据类型,sum/avg 只适用于数值类型。--聚合函数的结果可以作为其他查询条件。--

--------------------------------------分组(group by)/*在处理统计或聚合数据时,很多时候需要对数据进行分组 语法select fIEld1,。。。from tablenamegroup by fIEld1[,fIEld2,…]按照fIEld1[,…] 分组,字段值相同的记录分到一组。*/----------------------[1]分组和聚合函数-- 需求:统计部门10的人数selectcount 1(from) where emp e = e.deptno10;-- 需求:求各个部门的人数selectcount e.deptno,from(e.ename) group emp e by  e.deptno;groupby  e.deptno;-- 需求:求各个部门的平均薪资selectavg e.deptno,from(e.sal) group emp e by  e.deptno;-- 需求:求各个部门的月收入平均值selectavg e.deptno,+(e.sal0nvl(e.comm,from)) group emp e by  e.deptno;-- ----------特例:按照津贴分组(所以null统一分为一组)selectcount e.comm,1(from) group emp e by  e.comm;-----------------------------having--如果需要对分组的数据进行条件过滤,必须使用having!!!-- group by having-- 查询部门平均薪资大于3000的部门selectfrom e.deptno group emp e by having e.deptno avg >(e.sal)3000;-- 查询部门薪资大于3000的雇员按部门分组的平均薪资selectavg e.deptno,from(e.sal) where emp e > e.sal3000group by  e.deptno;--注意:--[1] Where过滤行,having过滤分组。--[2] Having支持所有where *** 作符。--对数据进行分组后,select语句的字段值只能是分组字段或者聚合函数。---------------------排序 (order by)/*排序 (order by)(select fIEld1,。。。from tablenameorder by fIEld1,fIEld2对数据集进行排序,先按fIEld1排序,如果fIEld1排序相同,按照fIEld2排序,依次类推。-asc 升序,默认-desc 降序*/-- order by-- 需求:按雇员薪资排序selectfrom e.ename,e.sal order emp e by desc e.sal ;-----------order by 一般都是最后执行。--薪资大于1200的雇员 所在部门的平均薪资大于1500的部门,按照平均薪资升序排序 selectavg e.deptno,(e.sal)from emp ewhere> e.sal1200groupby  e.deptnohavingavg >(e.sal)1500orderby avg asc(e.sal)  ;---------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 where emp e = e.deptno 10 unionselect* e.from where emp e = e.deptno 20 ;-- 有重复记录取并集select* e.from where emp e = e.deptno 10 or = e.deptno 20 unionselect* e.from where emp e = e.deptno 20 ;-- 全集:: 把集合A的结果和集合B的结果合并,保留重复记录select* e.from where emp e = e.deptno 10 or = e.deptno 20 unionall select* e.from where emp e = e.deptno 10 ;--交集: 把集合A的结果和集合B的结果取相同部门select* e.from where emp e = e.deptno 10 or = e.deptno 20 intersectselect* e.from where emp e = e.deptno 10 ;--差集: 在集合A的结果中去掉集合B的结果 (A-B)select* e.from where emp e = e.deptno 10 or = e.deptno 20 minusselect* e.from where emp e = e.deptno 10 ;-- 笛卡尔积(两张表合在一起,新表行数等于两张表行数相乘【第一张表的每行加一次第二章表所有行】)select* from  emp,dept-- 等值连接-- 需求:查询雇员的部门名称select e.ename,d.dnamefrom emp e,dept dwhere= e.deptnod.deptno-- 不等值连接-- 查询每个雇员的薪资等级select e.ename,e.sal,s.gradefrom emp e,salgrade swherebetween e.sal and s.losal  s.hisal--外连接--左外连接:左边的表作为主表,右边表作为从表,主表数据都显示,从表数据没有,用null填充,用+号表示。-- 需求:查询所有部门的雇员select* from  dept d,emp ewhere= d.deptno+e.deptno()-- 右外连接--右外连接: 右边的表作为主表,左边表作为从表,主表数据都显示,从表数据没有,用null填充,用+号表示。select* from emp e,dept dwhere+ e.deptno(=)  d.deptno;--自连接--一个表自身连接自身时,称为自连接。自连接以不同的视角看待同一张表。-- 查询每个雇员的上级领导select e.ename "雇员",nvl(m.ename,boss) "领导"from emp e,emp mwhere= e.mgr + m.empno()/*多于两张表的查询如果有多个表参与查询,先把t1xt2笛卡尔积得到一个大表T1,再把T1xt3笛卡尔积得到一个另外的大表T2,依次类推。所有的多表查询最终都是两种表的查询。*/
总结

以上是内存溢出为你收集整理的oracle:数值型函数,日期函数,转换函数,组函数,分组,排序,两表查询连接全部内容,希望文章能够帮你解决oracle:数值型函数,日期函数,转换函数,组函数,分组,排序,两表查询连接所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1166140.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存