经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Oracle » 查看文章
Oracle数据库之操作符及函数
来源:cnblogs  作者:壹叶知秋  时间:2019/7/30 9:33:25  对本文有异议

一、操作符:

1、分类:

算术、比较、逻辑、集合、连接;

2、算术操作符:

    执行数值计算;

  1. -- 工资加1000
  2. select empno,ename,job,sal+1000 from emp;

3、比较操作符:

  1. -- 比较运算符(between and包头不包尾)
  2. select * from emp where sal between 1000 and 2000;

(不等于是!=  ,   在mysql中是<>  )

4、逻辑操作符:and  or  not 

 

  1. --查询奖金不为空的员工信息
  2. select * from emp where comm is not null;

 

5、集合操作符:

  将两个查询的结果组合成一个结果:

  1. select sid from t_score where score>=70 and cid = '01'
  2. INTERSECT
  3. select sid from t_score where score>=70 and cid = '07';

①、intersect 返回两个查询的公共行;

②、union:返回两个查询的不重复的所有行;这里面可以是一个表中的数据(在mysql中是另外的联合查询--不是一个表)

③、minus:返回从第一个查询的结果中排除第二个查询中出现的行;(在第一个的结果中查找不满足第二个的)

6、连接操作符:

    将多个字符串或数据值合并成一个字符串;

  1. --连接操作符
  2. select ('员工号为'||empno||',姓名为'||ename||'的工资为'||sal) from emp

7、优先级:

算术>连接>比较>not逻辑>and逻辑>or逻辑操作符

二、SQL函数:

    用于执行特殊的操作的函数;

1、分类:

  单行、 分组、分析;

2、单行函数分类:

  从表中查询的每一行只返回一个值;

  字符、数字、日期、转换、其他;

3、字符函数:

  1. -- 字符串函数
  2. select lower(ename),job from emp; --小写
  3.  
  4. select ltrim('xysdezadmas','xyz') from dual;--截取:从左边开始按后面字段开始截取,有几个截取几个,没有就不截取

 ①、其他字符函数:

chr:根据ASCII码返回对应的字符(0:48    a:97    A:65)

lpad和rpad: 填充;

trim:去除左右两边的空格符;

lenth:字符串长度;

decode:逐个值置换;

  1. select sname,decode(cid,1,'开发部')as 部门 from java0322;
  2. select ename,decode(job,'CLERK','职员','SALESMAN','导购') as 工作 from emp

4、数字函数;

5、日期函数:

  对日期值进行计算,并生成日期数据类型或数值类型的结果;

add_months 偏移;

months_between:月数差;

last_day 最后一天;

round:四舍五入;

trunc:只舍不入,返回指定日期模式截断后的第一天;

next_day(d,day):下周周几的日期

extract:计算年份差:

  1. --日期函数
  2. select add_months(sbirth,-3) from java0322;--月份偏移3月,可以是负数,也就是向前偏移
  3.  
  4. select extract(year from sysdate) from dual;--截取当前时间的年份
  5.  
  6. select sname,extract(year from sysdate) - extractyear from sbirth) from java0322;--计算年纪

6、转换函数:

to_char:按照指定的格式转化字符串;

to_date:将字符串转化为日期;

to_number:将数字字符串转化为数字;----可以实现直接在sql语句中进行格式的转换

  1. --转换函数(字符串,格式)
  2. Select TO_CHAR(0.123,'$0.9999') FROM DUAL
  3. --字符串转日期
  4. select to_date ('2005-02-28','yyyy-mm-dd') from dual;
  5. --字符串转数字
  6. select to_number('20') from dual;

其他函数:

nvl:isnull,不为空时为本身,为空时指定0;

nvl2:不为空时指定值2,为空时指定值3;

NullIF:相等时为空,否则为前者

  1. --查询员工表的所有人的姓名,工资+奖金(奖金没有的时候,由null转为0)---nvl转换空值的函数
  2. select ename,sal+nvl(comm,0)as sal from emp;--当空为0,不为空为comm
  3.  
  4. select ename,sal+nvl2(comm,10000,0) from emp;---不为空时10000,为空时0
  5.  
  6. select nullif(100,200) from dual;--相等为空,不等为前者

7、分组函数:

  基于一组行来返回结果;

avg、min、max、sum、count

8、分析函数:

     根据一组行来计算聚合值;用于计算完成聚集的累计排名、移动平均数等;

row_number:返回连续的排位,不论值是否相等;

rank:具有相等值的行排位相同,序数随后跳跃;

dense_rank:具有相等值的行排位相同,序号是连续的

  1. -- 排位
  2. select empno,ename,job,sal,row_number()over (order by sal desc) as numm from emp; --返回连续的排位,不论值是否相等12345
  3.  
  4. select empno,ename,job,sal,rank()over (order by sal desc) as numm from emp; --相等值的行排位相同,序号随后跳跃;12245
  5.  
  6. select empno,ename,job,sal,dense_rank()over (order by sal desc) as numm from emp; --相等值的行排位相同,序号是连续的;12234

 

原文链接:http://www.cnblogs.com/21-forever/p/11265585.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号