频道栏目
首页 > 资讯 > Oracle > 正文

oracle的学习笔记--NVL()函数的使用技巧

18-02-18        来源:[db:作者]  
收藏   我要投稿

一、给列起别名的规则:特殊字符(#$除外)、数字、空格需要加双引号处理;中文加不加双引号都可以;as关键字可以省略。

-- 查询员工姓名,员工编号,员工的工作。
SELECT empno AS "员工编号",ename "员工姓名",job 工作 FROM emp;
select empno as "员工编号",ename "员工姓名",job 工 作 from emp;--语法错误 ,别名“工 作”中出现空格没有加双引号
select empno as "员工编号",ename "员工姓名",job "工 作" from emp;--正确,出现空格加双引号
select empno as "员工编号",ename "员工@姓名",job "工 作" from emp;--正确,出现特殊字符加双引号
select empno as "员工编号",ename "123",job "工 作" from emp;--正确,出现数字加双引号
select empno as 员工$编号,ename "123",job "工 作" from emp;--正确,特殊字符中(#,$)除外

二、NVL()函数的使用:要记住一点,null值参与运算,结果为空

emp表:有员工没有奖金

--计算一下员工的年薪(月薪x12+奖金)
SELECT sal*12+comm 年薪 FROM emp;

未使用nvl函数的情况,查询结果如下:


--nvl(v1,v2),其中v1是原始值,v2是当为空时参与计算的值
SELECT sal*12+NVL(comm,0) AS 年薪 FROM emp;

使用nvl函数的情况下,查询结果如下:

三、distinct关键字和oracle特有的连接符“||”

需求:在一列中显示员工编号和员工姓名;方法:使用oracle特有的连接符

select 'empno:'||empno||' '||'ename:'||ename 个人简介 from emp;

查询结果:

distinct去重关键字,在查询结果中去掉重复的

select distinct job from emp;

四、条件查询(目的是过滤出满足条件的结果)

where是条件关键字,后面加条件

比较运算符:> < >= <= = <> !=

逻辑运算符:and or not

其余运算表达式:like模糊查询 % 匹配0个或多个字符

in not in 判断范围

between and 判断区间,包含边界

is null,is not null 判断是否为空值

---查询工作不是 MANAGER 的员工信息
SELECT * FROM emp WHERE job !='MANAGER';
SELECT * FROM emp WHERE job <>'MANAGER';
--查询工作是领导MANAGER 并且工资> 2000的员工信息
SELECT * FROM emp WHERE job='MANAGER' AND sal>2000;
--查询工资>2000 或者 工作是MANAGER的员工信息
SELECT * FROM emp WHERE sal>2000 OR job='MANAGER';
--查询员工姓名包含M的员工信息
SELECT * FROM emp WHERE ename LIKE '%M%';
--查询员工姓名第二位M的员工信息
SELECT * FROM emp WHERE ename LIKE '_M%';
--查询员工工作是MANAGER 或者工作室PRESIDENT
SELECT * FROM emp WHERE job='MANAGER' OR job='MANAGER';
--使用in来实现
SELECT * FROM emp WHERE job IN('MANAGER','PRESIDENT');
--查询工资在1500 和3000之间的员工信息
SELECT * FROM emp WHERE sal BETWEEN 1500 AND 3000;
--查询有奖金的员工信息
SELECT * FROM emp WHERE comm IS NOT NULL;
--null不等于任何值 如果对null判断 比较判断 UNKUOW
SELECT * FROM emp WHERE comm=NULL;

五、排序关键字order by关键字的使用

--将员工的数据按照工资从小到大排序
SELECT * FROM emp ORDER BY sal;
--将员工数据按照奖金倒叙排序
SELECT * FROM emp ORDER BY comm DESC;
--null倒序排序 null在上面 指定null到末尾 nulls last
SELECT * FROM emp ORDER BY comm DESC NULLS LAST;

六、数据库函数:单行函数(数值、字符、日期、转换、通用函数),多行函数(max,min,sum,count,avg)

1.四舍五入 round(v1,v2) v1是原始的数值 v2是保留的小数位数(v2默认数值是0)
select round(43.726) from dual;
select round(43.726,0) from dual;--44
select round(43.726,1) from dual;--43.7
select round(43.726,2) from dual;--43.73
select round(43.726,-1) from dual;--40
select round(43.726,-2) from dual;--0
select round(53.726,-2) from dual;--100

2.--截取 trunc(v1,v2) v1是原始的数值 v2是保留的小数位数( v2默认数值是0)
--43.726
select trunc(43.726) from dual;
select trunc(43.726,0) from dual;--43
select trunc(43.726,1) from dual;--43.7
select trunc(43.726,2) from dual;--43.72
select trunc(43.726,-1) from dual;--40
select trunc(43.726,-2) from dual;--0
select trunc(53.726,-2) from dual;--0

3.--mod取余数
select mod(10,3) from dual; --1

4.获取字符的长度 length(v1)
--abcde
select length('abcde') from dual;

5.截取字符串 substr(v1,v2,v3) v1原始字符串 v2开始截取位置 v3截取长度
--截取字符串 从0开始和1开始都是第一位开始截取
select substr('abcde',0,2) from dual; -- ab
select substr('abcde',1,2) from dual; --ab
select substr('abcde',-1,2) from dual; -- e
select substr('abcde',-2,2) from dual; -- de

6.替换字符串 replace(v1,v2,v3)v1原始字符串 v2被替换的字符 v3替换后的字符
--替换字符串 hello 替换匹配的所有字符
select replace('hello','l','o') from dual; -- heooo
select replace('hello','he','l') from dual; -- lllo
select replace('hello','he','') from dual; -- llo

7.大小写转换 upper() lower()
select * from emp;
select * from emp where ename = 'smith'
select * from emp where ename = 'sMIth'
select * from emp where ename = upper('smith');
select * from emp where ename = upper('Smith');
select * from emp where ename = upper('SMITH');

8.去除空格 trim()

--去除空格__abc_de__ 去除字符串两端的空格
select trim(' abc de ') from dual;--abc_de

七、日期函数

--查看系统当前时间

SELECT SYSDATE FROM dual;

--增加月份,查询3个月以后的日期
SELECT add_months(SYSDATE,3) FROM dual;
--计算所有员工到目前为止,入职了多少个月
SELECT months_between(SYSDATE,hiredate) FROM emp;
----计算所有员工入职的天数 日期和日期做计算 结果为天数
SELECT ROUND(SYSDATE-hiredate) FROM emp;

八、转换函数

--字符串转数字
SELECT to_number('123')+1 FROM dual;
--数字转字符串
select to_char(sal,'$99,999.00') from emp;
--日期转字符串
SELECT to_char(SYSDATE,'yyyy-mm-dd') FROM dual;
SELECT to_char(SYSDATE,'hh:mi:ss') FROM dual;
SELECT to_char(SYSDATE,'yyyy-MM-dd HH:mi:ss') FROM dual;
--字符串转日期
SELECT to_date('2017-05-03','yyyy-mm-dd') FROM dual;
SELECT to_date('2017-05-03 6:08:32','yyyy-mm-dd hh:mi:ss') FROM dual;--小时只能取1-12的值
SELECT to_date('2017-05-03 16:08:32','yyyy-mm-dd hh24:mi:ss') FROM dual;--小时可以取1-24的值

九、聚合函数和分组函数的使用

---查询每个部门的平均工资
select * from emp;
SELECT avg(sal) from emp group by deptno;
--显示部门编号
select deptno,avg(sal) from emp group by deptno;
--加入其余的列是不可以的,使用group by,select语句只能查询分组的列和聚合函数
select job,deptno,avg(sal) from emp group by deptno;
--使用多个列做分组 必须多个列的数值一致 才为一组
select job,deptno,count(*) from emp group by deptno,job;
--查询部门平均工资>2000的部门编号
select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;
--mySql分组可以起别名过滤
select deptno,avg(sal) s from emp group by deptno having s >2000;

相关TAG标签
上一篇:Oracle数据库varchar2使用技巧
下一篇:使用dbms_job包创建Oracle定时任务
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站